# 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.new(-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.new(-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