From 9347d43508a5774283bfd0e101733b76d006bcd8 Mon Sep 17 00:00:00 2001 From: John C Date: Tue, 1 Mar 2016 11:49:02 +1100 Subject: [PATCH] Add settlement search --- CHANGELOG.md | 4 + LICENSE.md | 2 +- lib/eway_rapid.rb | 5 + lib/eway_rapid/constants.rb | 19 +++ .../direct_settlement_search_response.rb | 26 ++++ .../internal_settlement_to_settlement.rb | 27 +++++ .../convert/internal_summary_to_summary.rb | 39 ++++++ .../direct_settlement_to_settlement.rb | 38 ++++++ .../message/process/transaction_process.rb | 24 ++++ lib/eway_rapid/models/enums.rb | 14 +++ lib/eway_rapid/models/internal_models.rb | 112 ++++++++++++++++++ lib/eway_rapid/models/models.rb | 43 +++++++ .../output/settlement_search_response.rb | 11 ++ lib/eway_rapid/rapid_client.rb | 26 +++- lib/eway_rapid/version.rb | 2 +- .../transaction/settlement_search_test.rb | 19 +++ ...settlement_to_settlement_converter_test.rb | 26 ++++ ...ernal_summary_to_summary_converter_test.rb | 27 +++++ ...settlement_to_settlement_converter_test.rb | 28 +++++ .../object/create/object_creator.rb | 37 ++++++ test/input_model_factory.rb | 8 ++ 21 files changed, 533 insertions(+), 4 deletions(-) create mode 100644 lib/eway_rapid/entities/direct_settlement_search_response.rb create mode 100644 lib/eway_rapid/message/convert/internal_settlement_to_settlement.rb create mode 100644 lib/eway_rapid/message/convert/internal_summary_to_summary.rb create mode 100644 lib/eway_rapid/message/convert/response/direct_settlement_to_settlement.rb create mode 100644 lib/eway_rapid/output/settlement_search_response.rb create mode 100644 test/eway_rapid/integration/transaction/settlement_search_test.rb create mode 100644 test/eway_rapid/message/convert/internal_settlement_to_settlement_converter_test.rb create mode 100644 test/eway_rapid/message/convert/internal_summary_to_summary_converter_test.rb create mode 100644 test/eway_rapid/message/convert/response/direct_settlement_to_settlement_converter_test.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 39b0407..db1cddc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ All notable changes will be documented in this file +## 1.1.0 + + - Add settlement search support + ## 1.0.1 - Fix for endpoint names ('production' & 'sandbox') not working diff --git a/LICENSE.md b/LICENSE.md index d370f1b..85fe2a9 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ # The MIT License (MIT) -Copyright (c) 2015 Web Active Corporation Pty Ltd +Copyright (c) 2015-2016 Web Active Corporation Pty Ltd > Permission is hereby granted, free of charge, to any person obtaining a copy > of this software and associated documentation files (the "Software"), to deal diff --git a/lib/eway_rapid.rb b/lib/eway_rapid.rb index a370a20..49dae69 100644 --- a/lib/eway_rapid.rb +++ b/lib/eway_rapid.rb @@ -18,6 +18,7 @@ require File.join(File.dirname(__FILE__), 'eway_rapid', 'output', 'query_customer_response') require File.join(File.dirname(__FILE__), 'eway_rapid', 'output', 'query_transaction_response') require File.join(File.dirname(__FILE__), 'eway_rapid', 'output', 'refund_response') +require File.join(File.dirname(__FILE__), 'eway_rapid', 'output', 'settlement_search_response') require File.join(File.dirname(__FILE__), 'eway_rapid', 'entities', 'cancel_authorisation_request') require File.join(File.dirname(__FILE__), 'eway_rapid', 'entities', 'cancel_authorisation_response') @@ -34,12 +35,15 @@ require File.join(File.dirname(__FILE__), 'eway_rapid', 'entities', 'direct_payment_response') require File.join(File.dirname(__FILE__), 'eway_rapid', 'entities', 'direct_refund_request') require File.join(File.dirname(__FILE__), 'eway_rapid', 'entities', 'direct_refund_response') +require File.join(File.dirname(__FILE__), 'eway_rapid', 'entities', 'direct_settlement_search_response') require File.join(File.dirname(__FILE__), 'eway_rapid', 'entities', 'transaction_search_response') require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'customer_to_internal_customer') require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'direct_payment_to_trans_status') require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'direct_refund_to_trans_status') require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'internal_customer_to_customer') +require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'internal_settlement_to_settlement') +require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'internal_summary_to_summary') require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'internal_trans_to_trans') require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'internal_transaction_to_address') require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'internal_transaction_to_status') @@ -67,6 +71,7 @@ require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'response', 'direct_payment_to_create_cust') require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'response', 'direct_payment_to_create_trans') require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'response', 'direct_refund_to_refund_response') +require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'response', 'direct_settlement_to_settlement') require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'convert', 'response', 'search_to_query_trans') require File.join(File.dirname(__FILE__), 'eway_rapid', 'message', 'process', 'rest_process') diff --git a/lib/eway_rapid/constants.rb b/lib/eway_rapid/constants.rb index 3f4531e..33a7372 100644 --- a/lib/eway_rapid/constants.rb +++ b/lib/eway_rapid/constants.rb @@ -94,6 +94,24 @@ module Constants CUSTOMER_VIEW = 'CustomView' VERIFY_CUSTOMER_PHONE = 'VerifyCustomerPhone' VERIFY_CUSTOMER_EMAIL = 'VerifyCustomerEmail' + SETTLEMENT_SUMMARIES = 'SettlementSummaries' + SETTLEMENT_TRANSACTIONS = 'SettlementTransactions' + SETTLEMENT_ID = 'SettlementID' + CURRENCY = 'Currency' + TOTAL_CREDIT = 'TotalCredit' + TOTAL_DEBIT = 'TotalDebit' + TOTAL_BALANCE = 'TotalBalance' + BALANCE_PER_CARD_TYPE = 'BalancePerCardType' + CARD_TYPE = 'CardType' + NUMBER_OF_TRANSACTIONS = 'NumberOfTransactions' + CREDIT = 'Credit' + DEBIT = 'Debit' + BALANCE = 'Balance' + EWAY_CUSTOMER_ID = 'eWAYCustomerID' + TXN_REFERENCE = 'TxnReference' + AMOUNT = 'Amount' + TRANSACTION_DATE = 'TransactionDateTime' + SETTLEMENT_DATE = 'SettlementDateTime' JSON_SUFFIX = '.json' LIBRARY_NOT_HAVE_ENDPOINT_ERROR_CODE = 'S9990' API_KEY_INVALID_ERROR_CODE = 'S9991' @@ -122,5 +140,6 @@ module Constants TRANSACTION_QUERY_WITH_INVOICE_REF_METHOD = 'InvoiceRef' REFUND_SUB_PATH_METHOD = 'Refund' CAPTURE_PAYMENT_METHOD = 'CapturePayment' + SETTLEMENT_SEARCH_METHOD = 'Search/Settlement?' end end diff --git a/lib/eway_rapid/entities/direct_settlement_search_response.rb b/lib/eway_rapid/entities/direct_settlement_search_response.rb new file mode 100644 index 0000000..5d01693 --- /dev/null +++ b/lib/eway_rapid/entities/direct_settlement_search_response.rb @@ -0,0 +1,26 @@ +module EwayRapid + class DirectSettlementSearchResponse + attr_accessor :settlement_summaries + attr_accessor :settlement_transactions + attr_accessor :error + + def to_json(summaries={}, transactions={}) + {Constants::SETTLEMENT_SUMMARIES => summaries, + Constants::SETTLEMENT_TRANSACTIONS => transactions, + Constants::ERRORS_CAPITALIZED => error}.to_json + end + + def self.from_json(json) + hash = JSON.parse(json) + from_hash(hash) + end + + def self.from_hash(hash) + settlement_search_response = DirectSettlementSearchResponse.new + settlement_search_response.settlement_summaries = InternalModels::SettlementSummary.from_array(hash[Constants::SETTLEMENT_SUMMARIES]) + settlement_search_response.settlement_transactions = InternalModels::SettlementTransaction.from_array(hash[Constants::SETTLEMENT_TRANSACTIONS]) + settlement_search_response.error = hash[Constants::ERRORS_CAPITALIZED] + settlement_search_response + end + end +end diff --git a/lib/eway_rapid/message/convert/internal_settlement_to_settlement.rb b/lib/eway_rapid/message/convert/internal_settlement_to_settlement.rb new file mode 100644 index 0000000..dc8e76a --- /dev/null +++ b/lib/eway_rapid/message/convert/internal_settlement_to_settlement.rb @@ -0,0 +1,27 @@ +module EwayRapid + module Message + module Convert + class InternalSettlementToSettlement + + # @param [InternalModels::SettlementTransaction] i_settlement + # @return [Models::SettlementTransaction] + def do_convert(i_settlement) + settlement = Models::SettlementTransaction.new + settlement.settlement_id = i_settlement.settlement_id + settlement.eway_customer_id = i_settlement.eway_customer_id + settlement.currency = i_settlement.currency + settlement.currency_code = i_settlement.transaction_id + settlement.transaction_id = i_settlement.transaction_id + settlement.txn_reference = i_settlement.txn_reference + settlement.card_type = i_settlement.card_type + settlement.amount = i_settlement.amount + settlement.transaction_type = i_settlement.transaction_type + settlement.transaction_date = Time.at(i_settlement.transaction_date.delete('^0-9').to_i / 1000.0 ) + settlement.settlement_date = Time.at(i_settlement.settlement_date.delete('^0-9').to_i / 1000.0 ) + settlement + end + + end + end + end +end diff --git a/lib/eway_rapid/message/convert/internal_summary_to_summary.rb b/lib/eway_rapid/message/convert/internal_summary_to_summary.rb new file mode 100644 index 0000000..a339258 --- /dev/null +++ b/lib/eway_rapid/message/convert/internal_summary_to_summary.rb @@ -0,0 +1,39 @@ +module EwayRapid + module Message + module Convert + class InternalSummaryToSummary + + # @param [InternalModels::SettlementSummary] i_summary + # @return [Models::SettlementSummary] + def do_convert(i_summary) + summary = Models::SettlementSummary.new + summary.settlement_id = i_summary.settlement_id + summary.currency = i_summary.currency + summary.currency_code = i_summary.currency_code + summary.total_credit = i_summary.total_credit + summary.total_debit = i_summary.total_debit + summary.total_balance = i_summary.total_balance + summary.balance_per_card_type = [] + i_summary.balance_per_card_type.each {|balance| + obj = get_balance(balance) + summary.balance_per_card_type.push(obj) + } + summary + end + + # @param [InternalModels::BalancePerCardType] i_balance + # @return [Models::BalancePerCardType] + def get_balance(i_balance) + balance = Models::BalancePerCardType.new + balance.card_type = i_balance.card_type + balance.number_of_transactions = i_balance.number_of_transactions + balance.credit = i_balance.credit + balance.debit = i_balance.debit + balance.balance = i_balance.balance + balance + end + + end + end + end +end diff --git a/lib/eway_rapid/message/convert/response/direct_settlement_to_settlement.rb b/lib/eway_rapid/message/convert/response/direct_settlement_to_settlement.rb new file mode 100644 index 0000000..21969e0 --- /dev/null +++ b/lib/eway_rapid/message/convert/response/direct_settlement_to_settlement.rb @@ -0,0 +1,38 @@ +module EwayRapid + module Message + module Convert + module Response + class DirectSettlementToSettlement + + # @param [DirectSettlementSearchResponse] response + # @return [SettlementSearchResponse] + def do_convert(response) + settlement_search_response = SettlementSearchResponse.new + + if response.settlement_summaries && response.settlement_summaries.length > 0 + summary_convert = InternalSummaryToSummary.new + settlement_search_response.settlement_summaries = [] + response.settlement_summaries.each {|summary| + obj = summary_convert.do_convert(summary) + settlement_search_response.settlement_summaries.push(obj) + } + end + + if response.settlement_transactions && response.settlement_summaries.length > 0 + settlement_convert = InternalSettlementToSettlement.new + settlement_search_response.settlement_transactions = [] + response.settlement_transactions.each {|transaction| + obj = settlement_convert.do_convert(transaction) + settlement_search_response.settlement_transactions.push(obj) + } + end + + settlement_search_response.errors = response.error.split(/\s*,\s*/) if response.error + + settlement_search_response + end + end + end + end + end +end \ No newline at end of file diff --git a/lib/eway_rapid/message/process/transaction_process.rb b/lib/eway_rapid/message/process/transaction_process.rb index 246c549..4ffb17f 100644 --- a/lib/eway_rapid/message/process/transaction_process.rb +++ b/lib/eway_rapid/message/process/transaction_process.rb @@ -134,6 +134,30 @@ def self.make_result(response) converter.do_convert(transaction_search_resp) end end + + # Settlement search message process + class SettlementSearchMsgProcess + include RestProcess + + def self.create_request(input) + hash = {} + input.instance_variables.map do |var| + hash[var.to_s.delete('@').split('_').collect(&:capitalize).join] = input.instance_variable_get(var) + end + + URI.encode_www_form(hash) + end + + def self.send_request(url, api_key, password) + SettlementSearchMsgProcess.new.do_get(url, api_key, password) + end + + def self.make_result(response) + settlement_search_resp = DirectSettlementSearchResponse.from_json(response) + converter = Convert::Response::DirectSettlementToSettlement.new + converter.do_convert(settlement_search_resp) + end + end end end end diff --git a/lib/eway_rapid/models/enums.rb b/lib/eway_rapid/models/enums.rb index b6bbe33..540bfa6 100644 --- a/lib/eway_rapid/models/enums.rb +++ b/lib/eway_rapid/models/enums.rb @@ -122,5 +122,19 @@ def self.calculate_status(index) end end end + + class CardType + ALL = 'ALL' + VISA = 'VI' + MASTERCARD = 'MC' + AMEX = 'AX' + DINERS = 'DC' + JCB = 'JC' + MAESTRO_UK = 'MD' + MAESTRO_INTERNATIONAL = 'MI' + SOLO = 'SO' + LASER = 'LA' + DISCOVER = 'DS' + end end end diff --git a/lib/eway_rapid/models/internal_models.rb b/lib/eway_rapid/models/internal_models.rb index d36651f..bfda8a2 100644 --- a/lib/eway_rapid/models/internal_models.rb +++ b/lib/eway_rapid/models/internal_models.rb @@ -427,5 +427,117 @@ def self.from_hash(hash) verification end end + + class SettlementSummary + attr_accessor :settlement_id + attr_accessor :currency + attr_accessor :currency_code + attr_accessor :total_credit + attr_accessor :total_debit + attr_accessor :total_balance + attr_accessor :balance_per_card_type + + def self.from_json(json) + hash = JSON.parse(json) + from_hash(hash) + end + + def self.from_hash(hash) + settlement_summary = SettlementSummary.new + settlement_summary.settlement_id = hash[Constants::SETTLEMENT_ID] + settlement_summary.currency = hash[Constants::CURRENCY] + settlement_summary.currency_code = hash[Constants::CURRENCY_CODE] + settlement_summary.total_credit = hash[Constants::TOTAL_CREDIT] + settlement_summary.total_debit = hash[Constants::TOTAL_DEBIT] + settlement_summary.total_balance = hash[Constants::TOTAL_BALANCE] + settlement_summary.balance_per_card_type = BalancePerCardType.from_array(hash[Constants::BALANCE_PER_CARD_TYPE]) + settlement_summary + end + + def self.from_array(array) + summaries = [] + array.each {|summary_hash| + obj = from_hash(summary_hash) + summaries.push(obj) + } + summaries + end + end + + class BalancePerCardType + attr_accessor :card_type + attr_accessor :number_of_transactions + attr_accessor :credit + attr_accessor :debit + attr_accessor :balance + + def self.from_json(json) + hash = JSON.parse(json) + from_hash(hash) + end + + def self.from_hash(hash) + balance = BalancePerCardType.new + balance.card_type = hash[Constants::CARD_TYPE] + balance.number_of_transactions = hash[Constants::NUMBER_OF_TRANSACTIONS] + balance.credit = hash[Constants::CREDIT] + balance.debit = hash[Constants::DEBIT] + balance.balance = hash[Constants::BALANCE] + balance + end + + def self.from_array(array) + balances = [] + array.each {|balance_hash| + obj = from_hash(balance_hash) + balances.push(obj) + } + balances + end + end + + class SettlementTransaction + attr_accessor :settlement_id + attr_accessor :eway_customer_id + attr_accessor :currency + attr_accessor :currency_code + attr_accessor :transaction_id + attr_accessor :txn_reference + attr_accessor :card_type + attr_accessor :amount + attr_accessor :transaction_type + attr_accessor :transaction_date + attr_accessor :settlement_date + + def self.from_json(json) + hash = JSON.parse(json) + from_hash(hash) + end + + def self.from_hash(hash) + transaction = SettlementTransaction.new + transaction.settlement_id = hash[Constants::SETTLEMENT_ID] + transaction.eway_customer_id = hash[Constants::EWAY_CUSTOMER_ID] + transaction.currency = hash[Constants::CURRENCY] + transaction.currency_code = hash[Constants::CURRENCY_CODE] + transaction.transaction_id = hash[Constants::TRANSACTION_ID] + transaction.txn_reference = hash[Constants::TXN_REFERENCE] + transaction.card_type = hash[Constants::CARD_TYPE] + transaction.amount = hash[Constants::AMOUNT] + transaction.transaction_type = hash[Constants::TRANSACTION_TYPE] + transaction.transaction_date = hash[Constants::TRANSACTION_DATE] + transaction.settlement_date = hash[Constants::SETTLEMENT_DATE] + transaction + end + + def self.from_array(array) + transactions = [] + array.each {|transaction_hash| + obj = from_hash(transaction_hash) + transactions.push(obj) + } + transactions + end + end end end diff --git a/lib/eway_rapid/models/models.rb b/lib/eway_rapid/models/models.rb index 4366af9..1698c05 100644 --- a/lib/eway_rapid/models/models.rb +++ b/lib/eway_rapid/models/models.rb @@ -330,5 +330,48 @@ class VerificationResult # The result of the Beagle Verify phone verification attr_accessor :beagle_phone end + + class SettlementSearch + attr_accessor :report_mode + attr_accessor :settlement_date + attr_accessor :start_date + attr_accessor :end_date + attr_accessor :card_type + attr_accessor :currency + attr_accessor :page + attr_accessor :page_size + end + + class SettlementSummary + attr_accessor :settlement_id + attr_accessor :currency + attr_accessor :currency_code + attr_accessor :total_credit + attr_accessor :total_debit + attr_accessor :total_balance + attr_accessor :balance_per_card_type + end + + class BalancePerCardType + attr_accessor :card_type + attr_accessor :number_of_transactions + attr_accessor :credit + attr_accessor :debit + attr_accessor :balance + end + + class SettlementTransaction + attr_accessor :settlement_id + attr_accessor :eway_customer_id + attr_accessor :currency + attr_accessor :currency_code + attr_accessor :transaction_id + attr_accessor :txn_reference + attr_accessor :card_type + attr_accessor :amount + attr_accessor :transaction_type + attr_accessor :transaction_date + attr_accessor :settlement_date + end end end diff --git a/lib/eway_rapid/output/settlement_search_response.rb b/lib/eway_rapid/output/settlement_search_response.rb new file mode 100644 index 0000000..6e005fa --- /dev/null +++ b/lib/eway_rapid/output/settlement_search_response.rb @@ -0,0 +1,11 @@ +module EwayRapid + # Settlement search response + class SettlementSearchResponse < ResponseOutput + + # Array of daily settlement summaries + attr_accessor :settlement_summaries + + # Array of settlement transactions + attr_accessor :settlement_transactions + end +end diff --git a/lib/eway_rapid/rapid_client.rb b/lib/eway_rapid/rapid_client.rb index a4fbeb8..a5b34d3 100644 --- a/lib/eway_rapid/rapid_client.rb +++ b/lib/eway_rapid/rapid_client.rb @@ -270,6 +270,28 @@ def query_customer(token_customer_id) end end + # Performs a search of settlements + # + # @param [SettlementSearch] + # @return [SettlementSearchResponse] + def settlement_search(search_request) + unless @is_valid + return make_response_with_exception(Exceptions::APIKeyInvalidException.new('API key, password or Rapid endpoint missing or invalid'), QueryCustomerResponse) + end + begin + + request = Message::TransactionProcess::SettlementSearchMsgProcess.create_request(search_request) + url = @web_url + Constants::SETTLEMENT_SEARCH_METHOD + request + + response = Message::TransactionProcess::SettlementSearchMsgProcess.send_request(url, @api_key, @password) + Message::TransactionProcess::SettlementSearchMsgProcess.make_result(response) + + rescue => e + @logger.error(e.to_s) if @logger + make_response_with_exception(e, SettlementSearchResponse) + end + end + # Translate an error code to a user friendly message # # @param [String] code The code to translate @@ -354,7 +376,7 @@ def validate_api_param if @is_valid begin parser_endpoint_to_web_url - if !@list_error.nil? + unless @list_error.nil? @list_error.clear end set_valid(true) @@ -365,7 +387,7 @@ def validate_api_param add_error_code(Constants::LIBRARY_NOT_HAVE_ENDPOINT_ERROR_CODE) end else - @logger.warn "Invald parameter passed to Rapid client" if @logger + @logger.warn 'Invalid parameter passed to Rapid client' if @logger end end diff --git a/lib/eway_rapid/version.rb b/lib/eway_rapid/version.rb index fefec4b..02339c6 100644 --- a/lib/eway_rapid/version.rb +++ b/lib/eway_rapid/version.rb @@ -1,3 +1,3 @@ module EwayRapid - VERSION = '1.0.1' + VERSION = '1.1.0' end diff --git a/test/eway_rapid/integration/transaction/settlement_search_test.rb b/test/eway_rapid/integration/transaction/settlement_search_test.rb new file mode 100644 index 0000000..5104879 --- /dev/null +++ b/test/eway_rapid/integration/transaction/settlement_search_test.rb @@ -0,0 +1,19 @@ +require_relative '../../../test_base' + +class SettlementSearchTest < TestBase + + def setup + @client = IntegrationTest.get_sandbox_client + end + + def test_valid_input + @search = EwayRapid::InputModelFactory.create_settlement_search + + search_response = @client.settlement_search(@search) + + assert(search_response.errors.nil? || search_response.errors.length == 0) + assert(!search_response.settlement_transactions.nil? && search_response.settlement_transactions.length > 0) + end + + def teardown; end +end \ No newline at end of file diff --git a/test/eway_rapid/message/convert/internal_settlement_to_settlement_converter_test.rb b/test/eway_rapid/message/convert/internal_settlement_to_settlement_converter_test.rb new file mode 100644 index 0000000..af28add --- /dev/null +++ b/test/eway_rapid/message/convert/internal_settlement_to_settlement_converter_test.rb @@ -0,0 +1,26 @@ +require_relative '../../../test_base' + +module EwayRapid + module Message + module Convert + class InternalSettlementToSettlementConverterTest < TestBase + + def setup + @convert = InternalSettlementToSettlement.new + end + + def test_do_convert + internal_tran = ObjectCreator.create_settlement_transaction + tran = @convert.do_convert(internal_tran) + assert_equal('53e78b14-ac2c-4b1b-a099-a12c6d5f30bc', tran.settlement_id) + assert_equal('VI', tran.card_type) + assert_true(tran.transaction_date.is_a?(Time)) + end + + def teardown + + end + end + end + end +end \ No newline at end of file diff --git a/test/eway_rapid/message/convert/internal_summary_to_summary_converter_test.rb b/test/eway_rapid/message/convert/internal_summary_to_summary_converter_test.rb new file mode 100644 index 0000000..3ff5e03 --- /dev/null +++ b/test/eway_rapid/message/convert/internal_summary_to_summary_converter_test.rb @@ -0,0 +1,27 @@ +require_relative '../../../test_base' + +module EwayRapid + module Message + module Convert + class InternalSummaryToSummaryConverterTest < TestBase + + def setup + @convert = InternalSummaryToSummary.new + end + + def test_do_convert + internal_summary = ObjectCreator.create_settlement_summary + internal_summary.balance_per_card_type = [ObjectCreator.create_balance] + summary = @convert.do_convert(internal_summary) + assert_equal('53e78b14-ac2c-4b1b-a099-a12c6d5f30bc', summary.settlement_id) + assert_equal('AUD', summary.currency_code) + assert_equal(14, summary.balance_per_card_type.first.number_of_transactions) + end + + def teardown + + end + end + end + end +end \ No newline at end of file diff --git a/test/eway_rapid/message/convert/response/direct_settlement_to_settlement_converter_test.rb b/test/eway_rapid/message/convert/response/direct_settlement_to_settlement_converter_test.rb new file mode 100644 index 0000000..e201a12 --- /dev/null +++ b/test/eway_rapid/message/convert/response/direct_settlement_to_settlement_converter_test.rb @@ -0,0 +1,28 @@ +require_relative '../../../../test_base' + +module EwayRapid + module Message + module Convert + module Response + class DirectSettlementToSettlementConverterTest < TestBase + def setup + @convert = DirectSettlementToSettlement.new + json = '{"SettlementSummaries":[{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","Currency":"36","CurrencyCode":"AUD","TotalCredit":22400,"TotalDebit":0,"TotalBalance":22400,"BalancePerCardType":[{"CardType":"VI","NumberOfTransactions":11,"Credit":16000,"Debit":0,"Balance":16000},{"CardType":"MC","NumberOfTransactions":1,"Credit":6400,"Debit":0,"Balance":6400}]}],"SettlementTransactions":[{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","eWAYCustomerID":91312168,"Currency":"36","CurrencyCode":"AUD","TransactionID":12189063,"TxnReference":"0000000012189063","CardType":"MC","Amount":6400,"TransactionType":"1","TransactionDateTime":"\/Date(1454371076000)\/","SettlementDateTime":"\/Date(1454331600000)\/"},{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","eWAYCustomerID":91312168,"Currency":"36","CurrencyCode":"AUD","TransactionID":12189930,"TxnReference":"0000000012189930","CardType":"VI","Amount":1000,"TransactionType":"1","TransactionDateTime":"\/Date(1454388043000)\/","SettlementDateTime":"\/Date(1454331600000)\/"},{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","eWAYCustomerID":91312168,"Currency":"36","CurrencyCode":"AUD","TransactionID":12189936,"TxnReference":"0000000012189936","CardType":"VI","Amount":1000,"TransactionType":"1","TransactionDateTime":"\/Date(1454388161000)\/","SettlementDateTime":"\/Date(1454331600000)\/"},{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","eWAYCustomerID":91312168,"Currency":"36","CurrencyCode":"AUD","TransactionID":12189951,"TxnReference":"0000000012189951","CardType":"VI","Amount":2000,"TransactionType":"1","TransactionDateTime":"\/Date(1454388443000)\/","SettlementDateTime":"\/Date(1454331600000)\/"},{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","eWAYCustomerID":91312168,"Currency":"36","CurrencyCode":"AUD","TransactionID":12189953,"TxnReference":"0000000012189953","CardType":"VI","Amount":1000,"TransactionType":"1","TransactionDateTime":"\/Date(1454388462000)\/","SettlementDateTime":"\/Date(1454331600000)\/"},{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","eWAYCustomerID":91312168,"Currency":"36","CurrencyCode":"AUD","TransactionID":12189959,"TxnReference":"0000000012189959","CardType":"VI","Amount":2000,"TransactionType":"1","TransactionDateTime":"\/Date(1454388517000)\/","SettlementDateTime":"\/Date(1454331600000)\/"},{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","eWAYCustomerID":91312168,"Currency":"36","CurrencyCode":"AUD","TransactionID":12189987,"TxnReference":"0000000012189987","CardType":"VI","Amount":2000,"TransactionType":"1","TransactionDateTime":"\/Date(1454389115000)\/","SettlementDateTime":"\/Date(1454331600000)\/"},{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","eWAYCustomerID":91312168,"Currency":"36","CurrencyCode":"AUD","TransactionID":12189998,"TxnReference":"0000000012189998","CardType":"VI","Amount":2000,"TransactionType":"1","TransactionDateTime":"\/Date(1454389263000)\/","SettlementDateTime":"\/Date(1454331600000)\/"},{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","eWAYCustomerID":91312168,"Currency":"36","CurrencyCode":"AUD","TransactionID":12190064,"TxnReference":"0000000012190064","CardType":"VI","Amount":1000,"TransactionType":"1","TransactionDateTime":"\/Date(1454390090000)\/","SettlementDateTime":"\/Date(1454331600000)\/"},{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","eWAYCustomerID":91312168,"Currency":"36","CurrencyCode":"AUD","TransactionID":12190065,"TxnReference":"0000000012190065","CardType":"VI","Amount":1000,"TransactionType":"1","TransactionDateTime":"\/Date(1454390127000)\/","SettlementDateTime":"\/Date(1454331600000)\/"},{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","eWAYCustomerID":91312168,"Currency":"36","CurrencyCode":"AUD","TransactionID":12190129,"TxnReference":"0000000012190129","CardType":"VI","Amount":1000,"TransactionType":"1","TransactionDateTime":"\/Date(1454391143000)\/","SettlementDateTime":"\/Date(1454331600000)\/"},{"SettlementID":"85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0","eWAYCustomerID":91312168,"Currency":"36","CurrencyCode":"AUD","TransactionID":12190141,"TxnReference":"0000000012190141","CardType":"VI","Amount":2000,"TransactionType":"1","TransactionDateTime":"\/Date(1454391459000)\/","SettlementDateTime":"\/Date(1454331600000)\/"}],"Errors":""}' + @response = DirectSettlementSearchResponse.from_json(json) + end + + def test_do_convert + res = @convert.do_convert(@response) + assert_true(res.settlement_summaries.count > 0) + assert_equal('85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0', res.settlement_summaries.first.settlement_id) + assert_equal('VI', res.settlement_summaries.first.balance_per_card_type.first.card_type) + assert_true(res.settlement_transactions.count > 0) + assert_equal('85e4c36a-1c2d-4cfc-8b81-ba32caadb6b0', res.settlement_transactions.first.settlement_id) + end + + def teardown; end + end + end + end + end +end \ No newline at end of file diff --git a/test/eway_rapid/object/create/object_creator.rb b/test/eway_rapid/object/create/object_creator.rb index db59e65..aa50eb2 100644 --- a/test/eway_rapid/object/create/object_creator.rb +++ b/test/eway_rapid/object/create/object_creator.rb @@ -148,5 +148,42 @@ def self.create_options options.push('Option 1') options end + + def self.create_settlement_transaction + settlement_transaction = InternalModels::SettlementTransaction.new + settlement_transaction.settlement_id = '53e78b14-ac2c-4b1b-a099-a12c6d5f30bc' + settlement_transaction.eway_customer_id = 87654321 + settlement_transaction.currency = '36' + settlement_transaction.currency_code = 'AUD' + settlement_transaction.transaction_id = 11258912 + settlement_transaction.txn_reference = '0000000011258912' + settlement_transaction.card_type = 'VI' + settlement_transaction.amount = 100 + settlement_transaction.transaction_type = '1' + settlement_transaction.transaction_date = '/Date(1422795600000)/' + settlement_transaction.settlement_date = '/Date(1422795600000)/' + settlement_transaction + end + + def self.create_settlement_summary + settlement_summary = InternalModels::SettlementSummary.new + settlement_summary.settlement_id = '53e78b14-ac2c-4b1b-a099-a12c6d5f30bc' + settlement_summary.currency = '36' + settlement_summary.currency_code = 'AUD' + settlement_summary.total_credit = 97100 + settlement_summary.total_debit = 320 + settlement_summary.total_balance = 96780 + settlement_summary + end + + def self.create_balance + balance = InternalModels::BalancePerCardType.new + balance.card_type = 'VI' + balance.number_of_transactions = 14 + balance.credit = 97100 + balance.debit = 320 + balance.balance = 94780 + balance + end end end \ No newline at end of file diff --git a/test/input_model_factory.rb b/test/input_model_factory.rb index 9d52c23..f0aee03 100644 --- a/test/input_model_factory.rb +++ b/test/input_model_factory.rb @@ -104,6 +104,14 @@ def self.create_shipping_detail shipping_detail end + def self.create_settlement_search + settlement_search = Models::SettlementSearch.new + settlement_search.report_mode = 'Both' + settlement_search.settlement_date = '2016-02-02' + settlement_search.card_type = Enums::CardType::VISA + settlement_search + end + def self.random_string(number) o = [('a'..'z'), ('A'..'Z')].map { |i| i.to_a }.flatten (0...number).map { o[rand(o.length)] }.join