# frozen_string_literal: true require "simplecov" SimpleCov.start do add_filter "/test/" enable_coverage :branch end require "em_promise" require "fiber" require "minitest/autorun" require "rantly/minitest_extensions" require "sentry-ruby" require "webmock/minitest" begin require "pry-rescue/minitest" require "pry-reload" module Minitest class Test alias old_capture_exceptions capture_exceptions def capture_exceptions old_capture_exceptions do yield rescue Minitest::Skip => e failures << e end end end end rescue LoadError # Just helpers for dev, no big deal if missing nil end require "backend_sgx" $VERBOSE = nil Sentry.init def customer(customer_id="test", plan_name: nil, **kwargs) jid = Blather::JID.new("#{customer_id}@example.net") if plan_name expires_at = kwargs.delete(:expires_at) || Time.now plan = CustomerPlan.new( customer_id, plan: Plan.for(plan_name), expires_at: expires_at ) Customer.new(customer_id, jid, plan: plan, **kwargs) else Customer.new(customer_id, jid, **kwargs) end end CONFIG = { sgx: "sgx", component: { jid: "component" }, creds: { account: "test_bw_account", username: "test_bw_user", password: "test_bw_password" }, catapult: { user: "catapult_user", token: "catapult_token", secret: "catapult_secret", domain: "catapult_domain", sip_host: "host.bwapp.io.example.com", application_id: "catapult_app" }, activation_amount: 1, plans: [ { name: "test_usd", currency: :USD, monthly_price: 10000 }, { name: "test_bad_currency", currency: :BAD }, { name: "test_cad", currency: :CAD, monthly_price: 10000 } ], braintree: { merchant_accounts: { USD: "merchant_usd" } }, credit_card_url: ->(*) { "http://creditcard.example.com" }, electrum_notify_url: ->(*) { "http://notify.example.com" } }.freeze def panic(e) raise e end LOG = Class.new { def child(*) Minitest::Mock.new end }.new.freeze BLATHER = Class.new { def <<(*); end }.new.freeze class Matching def initialize(&block) @block = block end def ===(other) @block.call(other) end end class PromiseMock < Minitest::Mock def then(succ=nil, _=nil) if succ succ.call(self) else yield self end end end module EventMachine class << self # Patch EM.add_timer to be instant in tests alias old_add_timer add_timer def add_timer(*args, &block) args[0] = 0 old_add_timer(*args, &block) end end end module Minitest class Test def self.property(m, &block) define_method("test_#{m}") do property_of(&block).check { |args| send(m, *args) } end end def self.em(m) alias_method "raw_#{m}", m define_method(m) do EM.run do Fiber.new { begin send("raw_#{m}") ensure EM.stop end }.resume end end end end end