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")
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 kind = SIMKind.new("invalid")
44 assert_raises(ArgumentError) { kind.get_processor(@cust) }
45 end
46
47 def test_initialize_with_nil
48 kind = SIMKind.new(nil)
49 assert_raises(NoMethodError) { kind.get_processor(@cust) }
50 end
51
52 def test_from_form_with_sim
53 kind = SIMKind.from_form(@sim_form.form)
54 assert_instance_of SIMOrder, kind.get_processor(@cust)
55 end
56
57 def test_from_form_with_esim
58 kind = SIMKind.from_form(@esim_form.form)
59 assert_instance_of SIMOrder::ESIM, kind.get_processor(@cust)
60 end
61
62 def test_price_returns_nil_when_customer_currency_nil
63 kind = SIMKind.new("sim")
64 cust = customer(currency: nil)
65 assert_nil kind.price(cust)
66 end
67
68 def test_price_returns_nil_when_config_missing_variant
69 kind = SIMKind.new("invalid")
70 cust = customer(currency: :USD)
71 assert_nil kind.price(cust)
72 end
73
74 def test_cfg_returns_nil_when_config_missing_currency
75 kind = SIMKind.new("sim")
76 cust = customer(currency: :EUR)
77 assert_nil kind.price(cust)
78 end
79end