spec/lib/aba/batch_spec.rb in aba-0.4.0 vs spec/lib/aba/batch_spec.rb in aba-0.5.0

- old
+ new

@@ -1,63 +1,101 @@ # encoding: UTF-8 require "spec_helper" describe Aba::Batch do - let(:aba) { Aba::Batch.new(financial_institution: "WPC", user_name: "John Doe", + subject(:batch) { Aba::Batch.new(financial_institution: "WPC", user_name: "John Doe", user_id: "466364", description: "Payroll", process_at: "190615") } - let(:transaction_values) { [30, -20] } + let(:transaction_amounts) { [[53, 30], [13, -20]] } let(:transactions) do - transaction_values.map do |amount| + transaction_amounts.map do |(transaction_code, amount)| Aba::Transaction.new(bsb: '342-342', account_number: '3244654', amount: amount, - account_name: 'John Doe', transaction_code: 53, + account_name: 'John Doe', transaction_code: transaction_code, lodgement_reference: 'R435564', trace_bsb: '453-543', trace_account_number: '45656733', name_of_remitter: 'Remitter') end end - subject { aba } - before { transactions.each { |trx| subject.add_transaction(trx) } } + before { transactions.each { |trx| batch.add_transaction(trx) } } + let(:return_amounts) { [[53, 3], [13, -2]] } + let(:returns) do + return_amounts.map do |(transaction_code, amount)| + Aba::Return.new(bsb: '453-543', account_number: '45656733', amount: amount, + account_name: 'John Doe', transaction_code: transaction_code, + lodgement_reference: 'R435564', trace_bsb: '342-342', + trace_account_number: '3244654', name_of_remitter: 'Remitter', + return_code: 8, original_user_id: 654321, + original_processing_day: 12, + + ) + end + end + before { returns.each { |trx| batch.add_return(trx) } } + describe "#to_s" do context 'when descriptive record' do context 'without bsb' do it "should return a string containing the descriptive record without the bsb" do - expect(subject.to_s).to include("0 01WPC John Doe 466364Payroll 190615 \r\n") + expect(batch.to_s).to include("0 01WPC John Doe 466364Payroll 190615 \r\n") end end context 'with bsb' do - before { subject.bsb = "123-345" } + before { batch.bsb = "123-345" } it "should return a string containing the descriptive record with the bsb" do - expect(subject.to_s).to include("0123-345 01WPC John Doe 466364Payroll 190615 \r\n") + expect(batch.to_s).to include("0123-345 01WPC John Doe 466364Payroll 190615 \r\n") end end end context 'when detail record' do - it "should contain transactions records" do - expect(subject.to_s).to include("1342-342 3244654 530000000030John Doe R435564 453-543 45656733Remitter 00000000\r\n") - expect(subject.to_s).to include("1342-342 3244654 530000000020John Doe R435564 453-543 45656733Remitter 00000000\r\n") + it "should contain transaction & return records" do + expect(batch.to_s).to include("1342-342 3244654 530000000030John Doe R435564 453-543 45656733Remitter 00000000\r\n") + expect(batch.to_s).to include("1342-342 3244654 130000000020John Doe R435564 453-543 45656733Remitter 00000000\r\n") + expect(batch.to_s).to include("2453-543 456567338530000000003John Doe R435564 342-342 3244654Remitter 12654321\r\n") + expect(batch.to_s).to include("2453-543 456567338130000000002John Doe R435564 342-342 3244654Remitter 12654321\r\n") end end context 'when file total record' do context 'with unbalanced transactions' do - it "should return a string wihere the net total is not zero" do - expect(subject.to_s).to include("7999-999 000000001000000000300000000020 000002 ") + it "should return a string where the net total is not zero" do + expect(batch.to_s).to include("7999-999 000000001100000000330000000022 000004 ") end end context 'with balanced transactions' do - let(:transaction_values) { [30, 30, -60] } + let(:transaction_amounts) { [[50, 30], [50, 30], [13, -60]] } + let(:return_amounts) { [[50, 3], [50, 3], [13, -6]] } it "should return a string where the net total is zero" do - expect(subject.to_s).to include("7999-999 000000000000000000600000000060 000003 ") + expect(batch.to_s).to include("7999-999 000000000000000000660000000066 000006 ") end + end + end + end + + describe "#errors" do + + let(:errors) { subject.errors } + + it "is empty" do + expect(errors).to be_nil + end + + context "with an invalid amount" do + let(:transaction_amounts) do + [[53, 1], [53, -1], [13, 'def']] + end + it "reports the errors" do + expect(errors).to eq(:entries => { + 1 => ["amount is negative but the transaction type is a credit"], + 2 => ["amount must be a number"] + }) end end end end