From 0ef2ababf120f6be0d9c3bb0a7ff297961ec1e4d Mon Sep 17 00:00:00 2001 From: Phillip Davis Date: Thu, 10 Jul 2025 07:16:41 -0400 Subject: [PATCH] end-to-end change_number test --- test/test_admin_command.rb | 109 +++++++++++++++++++++++++++++++++---- 1 file changed, 99 insertions(+), 10 deletions(-) diff --git a/test/test_admin_command.rb b/test/test_admin_command.rb index 6c7428275245b2b0a319fd9cf1fc67cf6365a9d1..41aee4b24585f7e8509fc30af2aba94efbce58a9 100644 --- a/test/test_admin_command.rb +++ b/test/test_admin_command.rb @@ -5,6 +5,7 @@ require "admin_command" require "admin_action" BackendSgx::IQ_MANAGER = Minitest::Mock.new +BackendSgx::REDIS = Minitest::Mock.new AdminAction::LaunchSnikket::IQ_MANAGER = Minitest::Mock.new Customer::BLATHER = Minitest::Mock.new AdminActionRepo::REDIS = Minitest::Mock.new @@ -351,19 +352,107 @@ class AdminCommandTest < Minitest::Test end em :test_action_cancel_account_keep_number - def test_change_num_for_unregistered_customer - _sgx, admin = admin_command(registered: false) + def test_change_num_default_sgx + # Same as default given by `sgx.registered?` returned by `admin_command` + old_tel = "+15556667777" + new_tel = "+12222222222" - error = - assert_raises("number_change should have raised") { - admin.action_number_change.sync + admin_number_change_form = Blather::Stanza::Iq::Command.new + admin_number_change_form.form.fields = [ + { var: "new_tel", value: new_tel }, + { var: "should_delete", value: false } + ] + admin_number_change_form.from = "test@example.com" + + execute_command { |exe| + sgx, admin = admin_command + + exe.customer_repo.expect( + :find_by_jid, + EMPromise.resolve(customer(sgx: sgx)), + [Matching.new do |jid| + assert jid.is_a? Blather::JID + assert_equal jid.stripped.to_s, "test@example.com" + end] + ) + + AdminAction::NumberChange::REDIS.expect( + :exists, + EMPromise.resolve(1), + ["catapult_jid-#{old_tel}"] + ) + + AdminAction::NumberChange::REDIS.expect( + :get, + EMPromise.resolve(nil), # Default SGX creds + ["jmp_customer_backend_sgx-test"] + ) + + AdminAction::NumberChange::REDIS.expect( + :rename, + EMPromise.resolve(nil), # Default SGX creds + ["catapult_fwd-#{old_tel}", "catapult_fwd-#{new_tel}"] + ) + + BackendSgx::REDIS.expect( + :set, + EMPromise.resolve(nil), # Default SGX creds + ["catapult_jid-#{new_tel}", "customer_test@component"] + ) + + expected_xadd_args = { + customer_id: "test", + old_tel: old_tel, + new_tel: new_tel, + should_delete: nil, + actor_id: "test", + class: "NumberChange", + direction: :forward } - assert_equal "Customer not registered", error.message + AdminActionRepo::REDIS.expect( + :xadd, + EMPromise.resolve(nil) + ) do |admin_actions, star, **xadd_args| + assert_equal admin_actions, "admin_actions" + assert_equal star, "*" - assert_mock BackendSgx::IQ_MANAGER - assert_mock Customer::BLATHER - assert_mock BandwidthTnRepo::DB + xadd_args.each do |k, v| + assert_equal v, expected_xadd_args[k] + end + end + + # Make sure the IBR record was sent off for + # the new number. + BackendSgx::IQ_MANAGER.expect( + :write, + EMPromise.resolve(nil), + [Matching.new do |iq| + assert_equal iq.nick, "test_bw_account" + assert_equal iq.username, "test_bw_user" + assert_equal iq.password, "test_bw_password" + assert_equal iq.phone, new_tel + end] + ) + + Command::COMMAND_MANAGER.expect( + :write, + EMPromise.resolve(admin_number_change_form), + [Matching.new do |iq| + assert_undoable_form(iq) + assert iq.form.field("new_tel") + assert iq.form.field("should_delete") + end] + ) + + admin.action_number_change.sync + + assert_mock Command::COMMAND_MANAGER + assert_mock exe.customer_repo + assert_mock AdminAction::NumberChange::REDIS + assert_mock AdminActionRepo::REDIS + assert_mock BackendSgx::IQ_MANAGER + } end - em :test_change_num_for_unregistered_customer + em :test_change_num_default_sgx end