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