require 'spec_helper'

describe 'Checkout with Cielo Credit Payment Method', type: :feature do

  include_context 'checkout setup'
  let!(:payment_method) { create(:cielo_credit_payment_method, id: 1) }

  after(:all) do
    Spree::CieloConfig.test_mode = false
    Spree::CieloConfig.afiliation_key = ''
    Spree::CieloConfig.token = ''
    Spree::CieloConfig.credit_cards = {}
    Spree::CieloConfig.minimum_value = '5.0'
    Spree::CieloConfig.generate_token = true
  end

  context 'create order without token' do
    before { Spree::CieloConfig.generate_token = false }

    it 'should create an valid Cielo Credit payment', js: true do
      stub_cielo_request
      navigate_to_payment
      fill_credit_card_data

      expect(page).to have_text 'Your order has been processed successfully'
      expect(page).to have_text 'Ending in 1111'

      expect(Spree::Order.complete.count).to eq 1
    end

    it 'should show an error message when the response of Cielo is invalid', js: true do
      stub_cielo_request 'authorize_error'
      navigate_to_payment
      fill_credit_card_data

      expect(page).to have_text 'Cielo: Permission denied'
      expect(Spree::Order.first.payments.last.state).to eq 'failed'
    end
  end

  context 'creating a token and using' do
    it 'should create a token and use in next transactions', js: true do
      Spree::CieloConfig.generate_token = true

      stub_cielo_request 'authorize_token_success'

      navigate_to_payment
      fill_credit_card_data
      expect(page).to have_text 'Your order has been processed successfully'
      expect(page).to have_text 'Ending in 1111'
      expect(Spree::Order.complete.count).to eq 1
      expect(Spree::Order.last.credit_cards.with_payment_profile.count).to eq 1

      navigate_to_payment true
      choose 'Use an existing card on file'
      choose '2x of $5.00 without tax'
      # confirm payment method
      click_button 'Save and Continue'

      expect(page).to have_text 'Your order has been processed successfully'
      expect(page).to have_text 'Ending in 1111'
      expect(page).to have_text 'Quantity of portions: 2x'
      expect(Spree::Order.complete.count).to eq 2
    end
  end
end