@@ -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