# frozen_string_literal: true require "test_helper" require "customer" Customer::BLATHER = Minitest::Mock.new Customer::BRAINTREE = Minitest::Mock.new Customer::ELECTRUM = Minitest::Mock.new Customer::REDIS = Minitest::Mock.new Customer::DB = Minitest::Mock.new CustomerPlan::DB = Minitest::Mock.new CustomerUsage::REDIS = Minitest::Mock.new CustomerUsage::DB = Minitest::Mock.new class SipAccount public :username, :url class New public :username end end class CustomerTest < Minitest::Test def test_bill_plan_activate CustomerPlan::DB.expect(:transaction, nil) do |&block| block.call true end CustomerPlan::DB.expect( :exec, nil, [ String, Matching.new do |params| params[0] == "test" && params[1].is_a?(String) && BigDecimal(-1) == params[2] end ] ) CustomerPlan::DB.expect( :exec, OpenStruct.new(cmd_tuples: 1), [String, ["test", "test_usd"]] ) customer(plan_name: "test_usd").bill_plan.sync CustomerPlan::DB.verify end em :test_bill_plan_activate def test_bill_plan_update CustomerPlan::DB.expect(:transaction, nil) do |&block| block.call true end CustomerPlan::DB.expect( :exec, nil, [ String, Matching.new do |params| params[0] == "test" && params[1].is_a?(String) && BigDecimal(-1) == params[2] end ] ) CustomerPlan::DB.expect( :exec, OpenStruct.new(cmd_tuples: 0), [String, ["test", "test_usd"]] ) CustomerPlan::DB.expect(:exec, nil, [String, ["test"]]) customer(plan_name: "test_usd").bill_plan.sync CustomerPlan::DB.verify end em :test_bill_plan_update def test_stanza_to Customer::BLATHER.expect( :<<, nil, [Matching.new do |stanza| assert_equal "+15555550000@component/a", stanza.from.to_s assert_equal "test@example.net/b", stanza.to.to_s end] ) m = Blather::Stanza::Message.new m.from = "+15555550000@sgx/a" m.to = "customer_test@component/b" customer.stanza_to(m) assert_mock Customer::BLATHER end em :test_stanza_to def test_stanza_from Customer::BLATHER.expect( :<<, nil, [Matching.new do |stanza| assert_equal "customer_test@component/a", stanza.from.to_s assert_equal "+15555550000@sgx/b", stanza.to.to_s end] ) m = Blather::Stanza::Message.new m.from = "test@example.com/a" m.to = "+15555550000@component/b" customer.stanza_from(m) Customer::BLATHER.verify end def test_customer_usage_report report_for = (Date.today..(Date.today - 1)) report_for.first.downto(report_for.last).each.with_index do |day, idx| CustomerUsage::REDIS.expect( :zscore, EMPromise.resolve(idx), ["jmp_customer_outbound_messages-test", day.strftime("%Y%m%d")] ) end CustomerUsage::DB.expect( :query_defer, EMPromise.resolve([{ "day" => report_for.first, "minutes" => 123 }]), [String, ["test", report_for.first, report_for.last]] ) assert_equal( UsageReport.new( report_for, { Date.today => 0, (Date.today - 1) => 1 }, Date.today => 123 ), customer.usage_report(report_for).sync ) end em :test_customer_usage_report def test_sip_account_new req = stub_request( :get, "https://api.catapult.inetwork.com/v1/users/" \ "catapult_user/domains/catapult_domain/endpoints?page=0&size=1000" ).with( headers: { "Authorization" => "Basic Y2F0YXB1bHRfdG9rZW46Y2F0YXB1bHRfc2VjcmV0" } ).to_return(status: 404) sip = customer.sip_account.sync assert_kind_of SipAccount::New, sip assert_equal "test", sip.username assert_requested req end em :test_sip_account_new def test_sip_account_existing req1 = stub_request( :get, "https://api.catapult.inetwork.com/v1/users/" \ "catapult_user/domains/catapult_domain/endpoints?page=0&size=1000" ).with( headers: { "Authorization" => "Basic Y2F0YXB1bHRfdG9rZW46Y2F0YXB1bHRfc2VjcmV0" } ).to_return(status: 200, body: [ { name: "NOTtest", domainId: "domain", id: "endpoint" } ].to_json) req2 = stub_request( :get, "https://api.catapult.inetwork.com/v1/users/" \ "catapult_user/domains/catapult_domain/endpoints?page=1&size=1000" ).with( headers: { "Authorization" => "Basic Y2F0YXB1bHRfdG9rZW46Y2F0YXB1bHRfc2VjcmV0" } ).to_return(status: 200, body: [ { name: "test", domainId: "domain", id: "endpoint" } ].to_json) sip = customer.sip_account.sync assert_kind_of SipAccount, sip assert_equal "test", sip.username assert_equal( "https://api.catapult.inetwork.com/v1/users/" \ "catapult_user/domains/domain/endpoints/endpoint", sip.url ) assert_requested req1 assert_requested req2 end em :test_sip_account_existing def test_sip_account_error stub_request( :get, "https://api.catapult.inetwork.com/v1/users/" \ "catapult_user/domains/catapult_domain/endpoints?page=0&size=1000" ).to_return(status: 400) assert_raises(RuntimeError) do customer.sip_account.sync end end em :test_sip_account_error def test_btc_addresses Customer::REDIS.expect( :smembers, EMPromise.resolve(["testaddr"]), ["jmp_customer_btc_addresses-test"] ) assert_equal ["testaddr"], customer.btc_addresses.sync assert_mock Customer::REDIS end em :test_btc_addresses def test_add_btc_address Customer::REDIS.expect( :spopsadd, EMPromise.resolve("testaddr"), [["jmp_available_btc_addresses", "jmp_customer_btc_addresses-test"]] ) Customer::ELECTRUM.expect( :notify, EMPromise.resolve(nil), ["testaddr", "http://notify.example.com"] ) assert_equal "testaddr", customer.add_btc_address.sync assert_mock Customer::REDIS assert_mock Customer::ELECTRUM end em :test_add_btc_address end