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
 80
 81	def test_complete_nil_pin_returns_error
 82		property_of {
 83			PortOutPinCompleteCmd
 84				.new(REDIS)
 85				.pin {
 86					choose(true, false) ? nil : sized(range(4, 10)) { string(:alnum) }
 87				}
 88				.confirm_pin { |pin|
 89					pin.nil? ? choose(nil, sized(range(4, 10)) { string(:alnum) }) : nil
 90				}
 91				.stanza { |jid, sid, pin, cpin|
 92					cmd = Blather::Stanza::Iq::Command.new
 93					cmd.type = :set
 94					cmd.to = 'component'
 95					cmd.node = 'set-port-out-pin'
 96					cmd.sessionid = sid
 97					cmd.action = :complete
 98					cmd.from = jid
 99					cmd.form.type = :submit
100
101					fields = []
102					if pin
103						fields << { var: 'pin', value: pin }
104					elsif choose(true, false)
105						fields << { var: 'pin', value: nil }
106					end
107					if cpin
108						fields << { var: 'confirm_pin', value: cpin }
109					elsif choose(true, false)
110						fields << { var: 'confirm_pin', value: nil }
111					end
112					cmd.form.fields = fields unless fields.empty?
113					cmd
114				}
115				.generate
116		}.check { |_metadata, example|
117			process_stanza(example['stanza'])
118
119			assert_equal 1, written.length
120			reply = written.shift
121			assert_kind_of Blather::StanzaError, reply
122			assert_equal :modify, reply.type
123			assert_equal :bad_request, reply.name
124		}
125	end
126	em :test_complete_nil_pin_returns_error
127
128	def test_complete_mismatched_pins_returns_error
129		property_of {
130			PortOutPinCompleteCmd
131				.new(REDIS)
132				.confirm_pin { |_pin|
133					sized(range(4, 10)) { string(:alnum) } + "X"
134				}
135				.generate
136		}.check { |_metadata, example|
137			process_stanza(example['stanza'])
138
139			assert_equal 1, written.length
140			reply = written.shift
141			assert_kind_of Blather::StanzaError, reply
142			assert_equal :modify, reply.type
143			assert_equal :bad_request, reply.name
144		}
145	end
146	em :test_complete_mismatched_pins_returns_error
147
148	def test_complete_invalid_pin_format_returns_error
149		property_of {
150			PortOutPinCompleteCmd
151				.new(REDIS)
152				.pin { choose("ab", "a" * 11, "pin!@#") }
153				.confirm_pin { |pin| pin }
154				.generate
155		}.check { |_metadata, example|
156			process_stanza(example['stanza'])
157
158			assert_equal 1, written.length
159			reply = written.shift
160			assert_kind_of Blather::StanzaError, reply
161			assert_equal :modify, reply.type
162			assert_equal :bad_request, reply.name
163		}
164	end
165	em :test_complete_invalid_pin_format_returns_error
166end