Sha256: 95758645a4140a50bd9798cffad849ad72ad93f75a1f8237ded330a98f6e52ed

Contents?: true

Size: 1.86 KB

Versions: 13

Compression:

Stored size: 1.86 KB

Contents

module Spree
  module SolidusSixSaferpay
    class PaymentValidator
      attr_reader :order, :saferpay_payment

      def self.call(saferpay_payment)
        new(saferpay_payment).call
      end

      def initialize(saferpay_payment)
        @order = saferpay_payment.order
        @saferpay_payment = saferpay_payment
      end

      def call
        saferpay_transaction = saferpay_payment.transaction

        validate_payment_authorized(saferpay_transaction)
        validate_order_reference(saferpay_transaction)
        validate_order_amount(saferpay_transaction)
      end

      def validate_payment_authorized(saferpay_transaction)
        if saferpay_transaction.status != "AUTHORIZED"
          error("Status should be 'AUTHORIZED', is: '#{saferpay_transaction.status}'")
        end

        true
      end

      def validate_order_reference(saferpay_transaction)
        if order.number != saferpay_transaction.order_id
          error("Order ID should be '#{order.number}', is: '#{saferpay_transaction.order_id}'")
        end

        true
      end

      def validate_order_amount(saferpay_transaction)
        order_amount = Spree::Money.new(order.total, currency: order.currency)

        saferpay_transaction_currency = saferpay_transaction.amount.currency_code
        if order_amount.currency.iso_code != saferpay_transaction_currency
          error("Currency should be '#{order.currency}', is: '#{saferpay_transaction_currency}'")
        end

        saferpay_transaction_cents = saferpay_transaction.amount.value
        if order_amount.cents.to_s != saferpay_transaction_cents
          error("Order total (cents) should be '#{order_amount.cents}', is: '#{saferpay_transaction_cents}'")
        end

        true
      end

      private

      def error(details)
        raise ::SolidusSixSaferpay::InvalidSaferpayPayment.new(details: details)
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
solidus_six_saferpay-0.5.0 app/services/spree/solidus_six_saferpay/payment_validator.rb
solidus_six_saferpay-0.4.0 app/services/spree/solidus_six_saferpay/payment_validator.rb
solidus_six_saferpay-0.3.0 app/services/spree/solidus_six_saferpay/payment_validator.rb
solidus_six_saferpay-0.1.8.1 app/services/spree/solidus_six_saferpay/payment_validator.rb
solidus_six_saferpay-0.2.0 app/services/spree/solidus_six_saferpay/payment_validator.rb
solidus_six_saferpay-0.1.8 app/services/spree/solidus_six_saferpay/payment_validator.rb
solidus_six_saferpay-0.1.7 app/services/spree/solidus_six_saferpay/payment_validator.rb
solidus_six_saferpay-0.1.5 app/services/spree/solidus_six_saferpay/payment_validator.rb
solidus_six_saferpay-0.1.4 app/services/spree/solidus_six_saferpay/payment_validator.rb
solidus_six_saferpay-0.1.3 app/services/spree/solidus_six_saferpay/payment_validator.rb
solidus_six_saferpay-0.1.2 app/services/spree/solidus_six_saferpay/payment_validator.rb
solidus_six_saferpay-0.1.1 app/services/spree/solidus_six_saferpay/payment_validator.rb
solidus_six_saferpay-0.1.0 app/services/spree/solidus_six_saferpay/payment_validator.rb