ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'vcr'
require 'sidekiq/testing'
require 'minitest/reporters'

VCR.configure do |config|
  config.cassette_library_dir = "test/vcr_cassettes"
  config.hook_into :webmock
end

Sidekiq::Testing.fake!
Minitest::Reporters.use! [Minitest::Reporters::DefaultReporter.new({ color: true })]




class ActiveSupport::TestCase
  # Add more helper methods to be used by all tests here...

  fixtures :all

  def json_response(body)
    JSON.parse(body, symbolize_names: true)
  end

  def default_headers
    { 'Accept' => Mime::JSON, 'Content-Type' => Mime::JSON.to_s }
  end

  def stripe_card_token(error: nil)
    number = "4242424242424242"
    exp_month = 4
    exp_year = DateTime.now.next_year.year
    cvc = "314"

    case error
    when /card_declined/
      number = "4000000000000002"
    when /incorrect_number/
      number = "4242424242424241"
    when /invalid_expiry_month/
      exp_month = 15
    when /invalid_expiry_year/
      exp_year = 1964
    when /invalid_cvc/
      cvc = "99"
    end

    Stripe::Token.create(card: {
      number: number,
        exp_month: exp_month,
        exp_year: exp_year,
        cvc:  cvc
      },
    ).id
  end

  # Force the invoice generation worker to run NOW and check the resulting file generated.
  # Delete the file afterwards.
  # @param invoice {Invoice}
  def assert_invoice_pdf(invoice)
    assert_not_nil invoice, 'Invoice was not created'

    invoice_worker = InvoiceWorker.new
    invoice_worker.perform(invoice.id)

    assert File.exist?(invoice.file), 'Invoice PDF was not generated'

    File.delete(invoice.file)
  end
end

class ActionDispatch::IntegrationTest
  include Warden::Test::Helpers
  Warden.test_mode!
end
