1# frozen_string_literal: true
2
3require "test_helper"
4require_relative "../../sgx-bwmsgsv2"
5require "rantly/minitest_extensions"
6require_relative "generators/disco_items_iq"
7
8def panic(e)
9 $panic = e
10end
11
12class DiscoItemsPropertyTest < Minitest::Test
13 def setup
14 reset_stanzas!
15 reset_redis!
16 end
17
18 def test_eligible_tn_shows_port_out_pin_command
19 property_of {
20 DiscoItemsIQ.new(REDIS).generate
21 }.check { |_metadata, example|
22 BandwidthTNOptions.stub(
23 :tn_eligible_for_port_out_pin?,
24 EMPromise.resolve(true)
25 ) do
26 process_stanza(example['stanza'])
27 end
28
29 assert_equal 1, written.length
30 reply = written.shift
31
32 assert_equal example['jid'], reply.to.to_s
33
34 ns = 'http://jabber.org/protocol/disco#items'
35 items = reply.query.find('.//ns:item', ns: ns)
36 assert_equal 1, items.length
37 assert_equal 'set-port-out-pin', items.first[:node]
38 }
39 end
40 em :test_eligible_tn_shows_port_out_pin_command
41
42 def test_ineligible_tn_shows_no_commands
43 property_of {
44 DiscoItemsIQ.new(REDIS).generate
45 }.check { |_metadata, example|
46 BandwidthTNOptions.stub(
47 :tn_eligible_for_port_out_pin?,
48 EMPromise.resolve(false)
49 ) do
50 process_stanza(example['stanza'])
51 end
52
53 assert_equal 1, written.length
54 reply = written.shift
55
56 ns = 'http://jabber.org/protocol/disco#items'
57 items = reply.query.find('.//ns:item', ns: ns)
58 assert_empty items
59 }
60 end
61 em :test_ineligible_tn_shows_no_commands
62
63 def test_unregistered_user_gets_error
64 property_of {
65 DiscoItemsIQ
66 .new(REDIS)
67 .redis_state { |_jid, _phone| @redis.reset! }
68 .generate
69 }.check { |_metadata, example|
70 process_stanza(example['stanza'])
71
72 assert_equal 1, written.length
73 reply = written.shift
74 assert_kind_of Blather::StanzaError, reply
75 assert_equal :auth, reply.type
76 assert_equal :registration_required, reply.name
77 }
78 end
79 em :test_unregistered_user_gets_error
80end