# 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