test_sim_kind.rb

 1# frozen_string_literal: true
 2
 3require "test_helper"
 4
 5require "ostruct"
 6require "customer"
 7
 8require_relative "../lib/sim_order"
 9require_relative "../lib/sim_kind"
10
11class SIMKindTest < Minitest::Test
12	def setup
13		@sim_form = Blather::Stanza::Iq::Command.new.tap { |iq|
14			iq.form.fields = [{ var: "sim_kind", value: "sim" }]
15		}
16
17		@esim_form = Blather::Stanza::Iq::Command.new.tap { |iq|
18			iq.form.fields = [{ var: "sim_kind", value: "esim" }]
19		}
20
21		@invalid_form = Blather::Stanza::Iq::Command.new.tap { |iq|
22			iq.form.fields = [{ var: "sim_kind", value: "invalid" }]
23		}
24
25		@missing_form = Blather::Stanza::Iq::Command.new.tap { |iq|
26			iq.form.fields = []
27		}
28
29		@cust = customer(plan_name: "test_usd", balance: 1000)
30	end
31
32	def test_initialize_with_sim
33		kind = SIMKind.new("sim")
34		assert_instance_of SIMOrder, kind.get_processor(@cust)
35	end
36
37	def test_initialize_with_esim
38		kind = SIMKind.new("esim")
39		assert_instance_of SIMOrder::ESIM, kind.get_processor(@cust)
40	end
41
42	def test_initialize_with_invalid_variant
43		assert_raises do
44			SIMKind.new("invalid")
45		end
46	end
47
48	def test_initialize_with_nil
49		assert_raises do
50			SIMKind.new(nil)
51		end
52	end
53
54	def test_from_form_with_sim
55		kind = SIMKind.from_form(@sim_form.form)
56		assert_instance_of SIMOrder, kind.get_processor(@cust)
57	end
58
59	def test_from_form_with_esim
60		kind = SIMKind.from_form(@esim_form.form)
61		assert_instance_of SIMOrder::ESIM, kind.get_processor(@cust)
62	end
63
64	def test_price_returns_usd_when_customer_currency_nil
65		kind = SIMKind.new("sim")
66		cust = customer(currency: nil)
67		assert_equal 5, kind.price(cust)
68	end
69
70	def test_price_raises_when_config_missing_variant
71		assert_raises do
72			SIMKind.new("invalid")
73		end
74	end
75end