test(port-out-pin): execute returns form

Phillip Davis created

Change summary

test/property/generators/port_out_pin_cmd.rb | 75 ++++++++++++++++++++++
test/property/test_port_out_pin.rb           | 37 ++++++++++
2 files changed, 112 insertions(+)

Detailed changes

test/property/generators/port_out_pin_cmd.rb 🔗

@@ -0,0 +1,75 @@
+# frozen_string_literal: true
+
+require "jennifer"
+require_relative "../rantly_extensions/data_extensions"
+
+class PortOutPinExecuteCmd
+	# @param redis [FakeRedis]
+	def initialize(redis)
+		@redis = redis
+	end
+
+	include Jennifer.rant(self) {
+		jid { bare_jid }
+		phone(transient: true) { nanpa_phone }
+
+		stanza derived_from(:jid) do |jid|
+			cmd = Blather::Stanza::Iq::Command.new
+			cmd.type = :set
+			cmd.to = 'component'
+			cmd.node = 'set-port-out-pin'
+			cmd.action = :execute
+			cmd.from = jid
+			cmd
+		end
+
+		redis_state derived_from(:jid, :phone), transient: true do |jid, phone|
+			@redis.reset!
+			@redis.rpush("catapult_cred-#{jid}", 'acct', 'token', 'secret', phone)
+		end
+
+		written_state(transient: true) {
+			SGXbwmsgsv2.instance_variable_set(:@written, [])
+		}
+	}
+end
+
+class PortOutPinCompleteCmd
+	# @param redis [FakeRedis]
+	def initialize(redis)
+		@redis = redis
+	end
+
+	include Jennifer.rant(self) {
+		jid { bare_jid }
+		phone(transient: true) { nanpa_phone }
+		pin { sized(range(4, 10)) { string(:alnum) } }
+		confirm_pin derived_from(:pin) { |pin| pin }
+		sessionid { SecureRandom.uuid }
+
+		stanza derived_from(:jid, :sessionid, :pin, :confirm_pin) do |jid, sid, pin, cpin|
+			cmd = Blather::Stanza::Iq::Command.new
+			cmd.type = :set
+			cmd.to = 'component'
+			cmd.node = 'set-port-out-pin'
+			cmd.sessionid = sid
+			cmd.action = :complete
+			cmd.from = jid
+			cmd.form.type = :submit
+			cmd.form.fields = [
+				{ var: 'pin', value: pin },
+				{ var: 'confirm_pin', value: cpin }
+			]
+			cmd
+		end
+
+		redis_state derived_from(:jid, :phone), transient: true do |jid, phone|
+			@redis.reset!
+			@redis.rpush("catapult_cred-#{jid}", 'acct', 'token', 'secret', phone)
+		end
+
+		written_state(transient: true) {
+			SGXbwmsgsv2.instance_variable_set(:@written, [])
+		}
+	}
+end

test/property/test_port_out_pin.rb 🔗

@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+require "test_helper"
+require_relative "../../sgx-bwmsgsv2"
+require "rantly/minitest_extensions"
+require_relative "generators/port_out_pin_cmd"
+
+def panic(e)
+	$panic = e
+end
+
+class PortOutPinPropertyTest < Minitest::Test
+	def setup
+		reset_stanzas!
+		reset_redis!
+	end
+
+	def test_execute_returns_form_for_registered_user
+		property_of {
+			PortOutPinExecuteCmd.new(REDIS).generate
+		}.check { |_metadata, example|
+			process_stanza(example['stanza'])
+
+			assert_equal 1, written.length
+			reply = written.shift
+
+			assert_equal example['jid'], reply.to.to_s
+			assert_equal :executing, reply.status
+			assert_equal 'set-port-out-pin', reply.node
+
+			vars = reply.form.fields.map(&:var)
+			assert_includes vars, 'pin'
+			assert_includes vars, 'confirm_pin'
+		}
+	end
+	em :test_execute_returns_form_for_registered_user
+end