# frozen_string_literal: true
require "test_helper"
require "customer_repo"
class CustomerRepoTest < Minitest::Test
def mkrepo(
redis: Minitest::Mock.new,
db: Minitest::Mock.new,
braintree: Minitest::Mock.new
)
CustomerRepo.new(redis: redis, db: db, braintree: braintree)
end
def test_find_by_jid
redis = Minitest::Mock.new
db = Minitest::Mock.new
repo = mkrepo(redis: redis, db: db)
redis.expect(
:get,
EMPromise.resolve(1),
["jmp_customer_id-test@example.com"]
)
db.expect(
:query_defer,
EMPromise.resolve([{ balance: 1234, plan_name: "test_usd" }]),
[String, [1]]
)
customer = repo.find_by_jid("test@example.com").sync
assert_kind_of Customer, customer
assert_equal 1234, customer.balance
assert_equal "merchant_usd", customer.merchant_account
assert_mock redis
assert_mock db
end
em :test_find_by_jid
def test_find_by_jid_not_found
redis = Minitest::Mock.new
repo = mkrepo(redis: redis)
redis.expect(
:get,
EMPromise.resolve(nil),
["jmp_customer_id-test2@example.com"]
)
assert_raises do
repo.find_by_jid("test2@example.com").sync
end
assert_mock redis
end
em :test_find_by_jid_not_found
def test_find_db_empty
db = Minitest::Mock.new
redis = Minitest::Mock.new
redis.expect(
:get,
EMPromise.resolve("test@example.net"),
["jmp_customer_jid-7357"]
)
repo = mkrepo(db: db, redis: redis)
db.expect(
:query_defer,
EMPromise.resolve([]),
[String, [7357]]
)
customer = repo.find(7357).sync
assert_equal BigDecimal.new(0), customer.balance
assert_mock db
end
em :test_find_db_empty
def test_create
redis = Minitest::Mock.new
braintree = Minitest::Mock.new
repo = mkrepo(redis: redis, braintree: braintree)
braintree_customer = Minitest::Mock.new
braintree.expect(:customer, braintree_customer)
braintree_customer.expect(:create, EMPromise.resolve(
OpenStruct.new(success?: true, customer: OpenStruct.new(id: "test"))
))
redis.expect(
:msetnx,
EMPromise.resolve(1),
[
"jmp_customer_id-test@example.com", "test",
"jmp_customer_jid-test", "test@example.com"
]
)
assert_kind_of Customer, repo.create("test@example.com").sync
assert_mock braintree
assert_mock braintree_customer
assert_mock redis
end
em :test_create
end