~singpolyma/sgx-jmp

c5447fe92f87950e7a907131dc347363e9b6802a — Stephen Paul Weber 2 months ago 0d1a200 + 17d9b2f
Merge branch 'only-bill-if-expired'

* only-bill-if-expired:
  Only bill customer if they for sure have balance and are expired
  Allow an in-transaction condition for billing
  Change multiline chain style
M .rubocop.yml => .rubocop.yml +3 -0
@@ 67,6 67,9 @@ Layout/AccessModifierIndentation:
Layout/FirstParameterIndentation:
  EnforcedStyle: consistent

Layout/MultilineMethodCallIndentation:
  EnforcedStyle: indented

Style/AccessModifierDeclarations:
  Enabled: false


M lib/bill_plan_command.rb => lib/bill_plan_command.rb +22 -3
@@ 3,6 3,7 @@
class BillPlanCommand
	def self.for(customer)
		return ForUnregistered.new(customer) unless customer.registered?
		return ForNotExpired.new(customer) unless customer.expires_at <= Time.now

		unless customer.balance > customer.monthly_price
			return ForLowBalance.new(customer)


@@ 16,10 17,15 @@ class BillPlanCommand
	end

	def call
		@customer.bill_plan(note: "Renew account plan")
		billed = @customer.bill_plan(note: "Renew account plan") { |db|
			@customer = Command.execution.customer_repo.with(db: db)
				.find(@customer.customer_id).sync
			@customer.balance > @customer.monthly_price &&
				@customer.expires_at <= Time.now
		}
		Command.reply do |reply|
			reply.note_type = :info
			reply.note_text = "#{@customer.customer_id} billed"
			reply.note_type = billed ? :info : :error
			reply.note_text = "#{@customer.customer_id}#{billed ? '' : ' not'} billed"
		end
	end



@@ 70,4 76,17 @@ class BillPlanCommand
			end
		end
	end

	class ForNotExpired
		def initialize(customer)
			@customer = customer
		end

		def call
			Command.reply do |reply|
				reply.note_type = :error
				reply.note_text = "#{@customer.customer_id} is not expired"
			end
		end
	end
end

M lib/customer_plan.rb => lib/customer_plan.rb +4 -1
@@ 71,9 71,12 @@ class CustomerPlan

	def bill_plan(note: nil)
		EM.promise_fiber do
			DB.transaction do
			DB.transaction do |db|
				next false unless !block_given? || yield(db)

				charge_for_plan(note)
				add_one_month_to_current_plan unless activate_plan_starting_now
				true
			end
		end
	end

M sgx_jmp.rb => sgx_jmp.rb +1 -2
@@ 46,8 46,7 @@ module SentryOugai
end
LOG.extend SentryOugai

CONFIG =
	Dhall::Coder
CONFIG = Dhall::Coder
	.new(safe: Dhall::Coder::JSON_LIKE + [Symbol, Proc])
	.load(
		"(#{ARGV[0]}) : #{__dir__}/config-schema.dhall",

M test/test_electrum.rb => test/test_electrum.rb +4 -8
@@ 28,8 28,7 @@ class ElectrumTest < Minitest::Test
	property(:getaddresshistory) { string(:alnum) }
	em :test_getaddresshistory
	def getaddresshistory(address)
		req =
			stub_rpc("getaddresshistory", address: address)
		req = stub_rpc("getaddresshistory", address: address)
			.to_return(body: { result: "result" }.to_json)
		assert_equal "result", @electrum.getaddresshistory(address).sync
		assert_requested(req)


@@ 38,8 37,7 @@ class ElectrumTest < Minitest::Test
	property(:get_tx_status) { string(:alnum) }
	em :test_get_tx_status
	def get_tx_status(tx_hash)
		req =
			stub_rpc("get_tx_status", txid: tx_hash)
		req = stub_rpc("get_tx_status", txid: tx_hash)
			.to_return(body: { result: "result" }.to_json)
		assert_equal "result", @electrum.get_tx_status(tx_hash).sync
		assert_requested(req)


@@ 48,11 46,9 @@ class ElectrumTest < Minitest::Test
	property(:gettransaction) { [string(:alnum), string(:xdigit)] }
	em :test_gettransaction
	def gettransaction(tx_hash, dummy_tx)
		req1 =
			stub_rpc("gettransaction", txid: tx_hash)
		req1 = stub_rpc("gettransaction", txid: tx_hash)
			.to_return(body: { result: dummy_tx }.to_json)
		req2 =
			stub_rpc("deserialize", [dummy_tx])
		req2 = stub_rpc("deserialize", [dummy_tx])
			.to_return(body: { result: { outputs: [] } }.to_json)
		assert_kind_of Electrum::Transaction, @electrum.gettransaction(tx_hash).sync
		assert_requested(req1)

M test/test_tel_selections.rb => test/test_tel_selections.rb +2 -4
@@ 26,8 26,7 @@ class TelSelectionsTest < Minitest::Test
		def test_for_no_rsm
			form = Blather::Stanza::X.new
			form.fields = [{ var: "q", value: "226" }]
			iris_query =
				TelSelections::ChooseTel::AvailableNumber
			iris_query = TelSelections::ChooseTel::AvailableNumber
				.for(form)
				.instance_variable_get(:@iris_query)
			assert_equal(


@@ 44,8 43,7 @@ class TelSelectionsTest < Minitest::Test
					max 500
				end
			end
			iris_query =
				TelSelections::ChooseTel::AvailableNumber
			iris_query = TelSelections::ChooseTel::AvailableNumber
				.for(form)
				.instance_variable_get(:@iris_query)
			assert_equal(