# frozen_string_literal: true
require "test_helper"
require "customer"
Customer::REDIS = Minitest::Mock.new
Customer::DB = Minitest::Mock.new
class CustomerTest < Minitest::Test
def test_for_jid
Customer::REDIS.expect(
:get,
EMPromise.resolve(1),
["jmp_customer_id-test@example.com"]
)
Customer::DB.expect(
:query_defer,
EMPromise.resolve([{ balance: 1234, plan_name: "test_usd" }]),
[String, [1]]
)
customer = Customer.for_jid("test@example.com").sync
assert_kind_of Customer, customer
assert_equal 1234, customer.balance
assert_equal "merchant_usd", customer.merchant_account
end
em :test_for_jid
def test_for_jid_not_found
Customer::REDIS.expect(
:get,
EMPromise.resolve(nil),
["jmp_customer_id-test2@example.com"]
)
assert_raises do
Customer.for_jid("test2@example.com").sync
end
end
em :test_for_jid_not_found
def test_for_customer_id_not_found
Customer::DB.expect(
:query_defer,
EMPromise.resolve([]),
[String, [7357]]
)
customer = Customer.for_customer_id(7357).sync
assert_equal BigDecimal.new(0), customer.balance
end
em :test_for_customer_id_not_found
def test_bill_plan_activate
Customer::DB.expect(:transaction, nil) do |&block|
block.call
true
end
Customer::DB.expect(
:exec,
nil,
[
String,
Matching.new do |params|
params[0] == "test" &&
params[1].is_a?(String) &&
BigDecimal.new(-1) == params[2]
end
]
)
Customer::DB.expect(
:exec,
OpenStruct.new(cmd_tuples: 1),
[String, ["test", "test_usd"]]
)
Customer.new("test", plan_name: "test_usd").bill_plan.sync
Customer::DB.verify
end
em :test_bill_plan_activate
def test_bill_plan_update
Customer::DB.expect(:transaction, nil) do |&block|
block.call
true
end
Customer::DB.expect(
:exec,
nil,
[
String,
Matching.new do |params|
params[0] == "test" &&
params[1].is_a?(String) &&
BigDecimal.new(-1) == params[2]
end
]
)
Customer::DB.expect(
:exec,
OpenStruct.new(cmd_tuples: 0),
[String, ["test", "test_usd"]]
)
Customer::DB.expect(:exec, nil, [String, ["test"]])
Customer.new("test", plan_name: "test_usd").bill_plan.sync
Customer::DB.verify
end
em :test_bill_plan_update
end