test_customer.rb

  1# frozen_string_literal: true
  2
  3require "test_helper"
  4require "customer"
  5
  6Customer::REDIS = Minitest::Mock.new
  7Customer::DB = Minitest::Mock.new
  8
  9class CustomerTest < Minitest::Test
 10	def test_for_jid
 11		Customer::REDIS.expect(
 12			:get,
 13			EMPromise.resolve(1),
 14			["jmp_customer_id-test@example.com"]
 15		)
 16		Customer::DB.expect(
 17			:query_defer,
 18			EMPromise.resolve([{ balance: 1234, plan_name: "test_usd" }]),
 19			[String, [1]]
 20		)
 21		customer = Customer.for_jid("test@example.com").sync
 22		assert_kind_of Customer, customer
 23		assert_equal 1234, customer.balance
 24		assert_equal "merchant_usd", customer.merchant_account
 25	end
 26	em :test_for_jid
 27
 28	def test_for_jid_not_found
 29		Customer::REDIS.expect(
 30			:get,
 31			EMPromise.resolve(nil),
 32			["jmp_customer_id-test2@example.com"]
 33		)
 34		assert_raises do
 35			Customer.for_jid("test2@example.com").sync
 36		end
 37	end
 38	em :test_for_jid_not_found
 39
 40	def test_for_customer_id_not_found
 41		Customer::DB.expect(
 42			:query_defer,
 43			EMPromise.resolve([]),
 44			[String, [7357]]
 45		)
 46		customer = Customer.for_customer_id(7357).sync
 47		assert_equal BigDecimal.new(0), customer.balance
 48	end
 49	em :test_for_customer_id_not_found
 50
 51	def test_bill_plan_activate
 52		Customer::DB.expect(:transaction, nil) do |&block|
 53			block.call
 54			true
 55		end
 56		Customer::DB.expect(
 57			:exec,
 58			nil,
 59			[
 60				String,
 61				Matching.new do |params|
 62					params[0] == "test" &&
 63					params[1].is_a?(String) &&
 64					BigDecimal.new(-1) == params[2]
 65				end
 66			]
 67		)
 68		Customer::DB.expect(
 69			:exec,
 70			OpenStruct.new(cmd_tuples: 1),
 71			[String, ["test", "test_usd"]]
 72		)
 73		Customer.new("test", plan_name: "test_usd").bill_plan.sync
 74		Customer::DB.verify
 75	end
 76	em :test_bill_plan_activate
 77
 78	def test_bill_plan_update
 79		Customer::DB.expect(:transaction, nil) do |&block|
 80			block.call
 81			true
 82		end
 83		Customer::DB.expect(
 84			:exec,
 85			nil,
 86			[
 87				String,
 88				Matching.new do |params|
 89					params[0] == "test" &&
 90					params[1].is_a?(String) &&
 91					BigDecimal.new(-1) == params[2]
 92				end
 93			]
 94		)
 95		Customer::DB.expect(
 96			:exec,
 97			OpenStruct.new(cmd_tuples: 0),
 98			[String, ["test", "test_usd"]]
 99		)
100		Customer::DB.expect(:exec, nil, [String, ["test"]])
101		Customer.new("test", plan_name: "test_usd").bill_plan.sync
102		Customer::DB.verify
103	end
104	em :test_bill_plan_update
105end