test_port_out_pin.rb

 1# frozen_string_literal: true
 2
 3require "test_helper"
 4require_relative "../../sgx-bwmsgsv2"
 5require "rantly/minitest_extensions"
 6require_relative "generators/port_out_pin_cmd"
 7
 8def panic(e)
 9	$panic = e
10end
11
12class PortOutPinPropertyTest < Minitest::Test
13	def setup
14		reset_stanzas!
15		reset_redis!
16	end
17
18	def test_execute_returns_form_for_registered_user
19		property_of {
20			PortOutPinExecuteCmd.new(REDIS).generate
21		}.check { |_metadata, example|
22			process_stanza(example['stanza'])
23
24			assert_equal 1, written.length
25			reply = written.shift
26
27			assert_equal example['jid'], reply.to.to_s
28			assert_equal :executing, reply.status
29			assert_equal 'set-port-out-pin', reply.node
30
31			vars = reply.form.fields.map(&:var)
32			assert_includes vars, 'pin'
33			assert_includes vars, 'confirm_pin'
34		}
35	end
36	em :test_execute_returns_form_for_registered_user
37
38	def test_execute_rejects_unregistered_user
39		property_of {
40			PortOutPinExecuteCmd
41				.new(REDIS)
42				.redis_state { |_jid, _phone| @redis.reset! }
43				.generate
44		}.check { |_metadata, example|
45			process_stanza(example['stanza'])
46
47			assert_equal 1, written.length
48			reply = written.shift
49			assert_kind_of Blather::StanzaError, reply
50			assert_equal :auth, reply.type
51			assert_equal :registration_required, reply.name
52		}
53	end
54	em :test_execute_rejects_unregistered_user
55
56	def test_complete_success_sets_pin
57		property_of {
58			PortOutPinCompleteCmd.new(REDIS).generate
59		}.check { |_metadata, example|
60			BandwidthTNOptions.stub(
61				:set_port_out_pin,
62				EMPromise.resolve(nil)
63			) do
64				process_stanza(example['stanza'])
65			end
66
67			assert_equal 1, written.length
68			reply = written.shift
69
70			assert_equal example['jid'], reply.to.to_s
71			assert_equal :completed, reply.status
72			assert_equal 'set-port-out-pin', reply.node
73			ns = 'http://jabber.org/protocol/commands'
74			note = reply.find('.//ns:note', ns: ns).first
75			assert_equal 'info', note[:type]
76			assert_equal 'Port-out PIN has been set successfully.', note.content
77		}
78	end
79	em :test_complete_success_sets_pin
80end