conekta_oxxo_handler_spec.rb 2.06 KB
# frozen_string_literal: true
require 'spec_helper'

describe Var::ConektaHandler do
  let!(:product) { 
      # product = instance_double('Product')
      # allow(product).to receive(:charge_with).and_return(:success)
      # product
    Product.create
  }

  let!(:var_mock) {
    var = class_double('Var')
    allow(var).to receive(:find_charge).and_return(product)
    var
  }

  # TODO: Probar errores en Var.create_charge
  it 'processes oxxo charge' do
    conekta_object_mock = JSON.parse(
      ConektaChargeCreateObject::OXXO_CREATE_CHARGE_OBJECT,
      object_class: OpenStruct)
  	allow_any_instance_of(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')

    Var::ConektaOxxoHandler.analyze(WebHookPostRequest::OXXO_CHARGE_CREATED)
    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')
  end

  it 'processes oxxo payment' do
    conekta_object_mock = JSON.parse(
      ConektaChargeCreateObject::OXXO_CREATE_CHARGE_OBJECT,
      object_class: OpenStruct)
    allow_any_instance_of(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')

    Var::ConektaOxxoHandler.analyze(WebHookPostRequest::OXXO_CHARGE_PAID)
    product.reload
    
    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_not be_nil
    expect(product.var_fee).to_not be_nil
    expect(product.var_payment_method).to eq('OXXO')
    expect(product.var_payment_at).to_not be_nil
  end
end