test_disco_items.rb

 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