conekta_card_handler_spec.rb 2.31 KB
# frozen_string_literal: true
require 'spec_helper'

describe Var::ConektaCardHandler 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
  }

  it 'processes card charge' do
    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')

    # Se está testeando crear un cargo y recibir webook
    # Analizar separación
  	Var::ConektaCardHandler.analyze(WebHookPostRequest::CARD_CHARGE_CREATED)

    # TODO: Revisar que si entra un cargo, se debe actualizar status a pending_payment
    # Pero falta desarrollo (Hacer un overwrite del método process_charge en el handler de 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')
  end

  it 'processes card payment' do
    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')

  	Var::ConektaHandler.analyze(WebHookPostRequest::CARD_CHARGE_PAID)

    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
  end
end
    # Conekta.config do |c|
    #   c.locale = :en
    #   # Llave de Sandbox
    #    c.api_key = 'key_mGmC5ry7s71JSLCv2WcxUg'
    #    c::PUBLIC_KEY = 'key_K6WVsv82RrEHGocJQcoEqPw'
    # end
  	# Var.create_charge(:conekta, product, { conekta_type: 'card', card_token: 'tok_ZGFFi3sv18a3duJWR' })