diff --git a/test/property/generators/port_out_pin_cmd.rb b/test/property/generators/port_out_pin_cmd.rb new file mode 100644 index 0000000000000000000000000000000000000000..1dee0af309e9b138d61d0912cc47f0ba015f0d1d --- /dev/null +++ b/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 diff --git a/test/property/test_port_out_pin.rb b/test/property/test_port_out_pin.rb new file mode 100644 index 0000000000000000000000000000000000000000..d76106eef398dbeabb105abc297cf2d70ba6c712 --- /dev/null +++ b/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