acts_as_chargeable_spec.rb 2.83 KB
# frozen_string_literal: true
require 'spec_helper'

describe ActsAsChargeable do
  before(:each) do
    Product.delete_all
  end

  context 'as a module' do
    it 'can be implemented in ActiveRecord' do
      expect(Product).to respond_to(:acts_as_chargeable)
    end
  end

  context 'processing charges' do
    it ': oxxo' do
      product = Product.create
      conekta_object_mock = JSON.parse(
        ConektaChargeCreateObject::OXXO_CREATE_CHARGE_OBJECT,
        object_class: OpenStruct)
      allow(product).to receive(:conekta_charge).and_return(conekta_object_mock)
      
      Var.create_charge(:conekta, product, {"conekta_type": "oxxo"})

      expect(product.var_id).to eq conekta_object_mock.id
      expect(product.var_service).to eq 'conekta'
      expect(product.var_status).to eq 'pending_payment'
      expect(product.var_paid_amount).to eq conekta_object_mock.amount
      expect(product.var_fee).to eq conekta_object_mock.fee
      expect(product.var_payment_method).to eq 'OXXO'
      expect(product.var_payment_at).to eq(Time.strptime conekta_object_mock.paid_at.to_s, '%s')
    end

    it ': card' do
      product = Product.create
      conekta_object_mock = JSON.parse(
        ConektaChargeCreateObject::CARD_CREATE_CHARGE_OBJECT,
        object_class: OpenStruct)
      allow(product).to receive(:conekta_charge).and_return(conekta_object_mock)

      Var.create_charge(:conekta, product, { conekta_type: 'card' })

      expect(product.var_id).to eq conekta_object_mock.id
      expect(product.var_service).to eq 'conekta'
      expect(product.var_status).to eq 'paid'
      expect(product.var_paid_amount).to eq conekta_object_mock.amount
      expect(product.var_fee).to eq conekta_object_mock.fee
      expect(product.var_payment_method).to eq 'Card'
      expect(product.var_payment_at).to eq(Time.strptime conekta_object_mock.paid_at.to_s, '%s')
    end

    xit ': spei' do
    end
  end
end

# Tests for mock on Chargeable class
describe Product do
  it { is_expected.to respond_to(:charge_with) }
  it { is_expected.to respond_to(:charge_with_conekta) }
  it { is_expected.to respond_to(:conekta_charge) }
  it { is_expected.to respond_to(:conekta_type_of_charge) }
  it { is_expected.to respond_to(:update_conekta_barcode) }
  it { is_expected.to respond_to(:manual_charge) }
  it { is_expected.to respond_to(:manual_discharge) }
  it { is_expected.to respond_to(:find_charge) }
  it { is_expected.to respond_to(:charged?) }
  it { is_expected.to respond_to(:find_conekta_charge) }
  it { is_expected.to respond_to(:instance_support?) }
  it { is_expected.to respond_to(:sync) }
  it { is_expected.to respond_to(:conekta_attributes) }
  it { is_expected.to respond_to(:paypal_attributes) }
  it { is_expected.to respond_to(:var_payed?) }
  it { is_expected.to respond_to(:cancel_oxxo_payment) }
  it { is_expected.to respond_to(:var_expired_by) }
end