bankserv 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/.rvmrc +1 -0
- data/Gemfile +16 -0
- data/Rakefile +8 -0
- data/bankserv.gemspec +31 -0
- data/config.ru +7 -0
- data/lib/bankserv.rb +48 -0
- data/lib/bankserv/account_holder_verification.rb +90 -0
- data/lib/bankserv/bank_account.rb +19 -0
- data/lib/bankserv/configuration.rb +67 -0
- data/lib/bankserv/credit.rb +70 -0
- data/lib/bankserv/debit.rb +94 -0
- data/lib/bankserv/eft.rb +83 -0
- data/lib/bankserv/engine.rb +183 -0
- data/lib/bankserv/engine/engine_configuration.rb +12 -0
- data/lib/bankserv/engine/engine_process.rb +3 -0
- data/lib/bankserv/request.rb +27 -0
- data/lib/bankserv/transaction.rb +22 -0
- data/lib/bankserv/transmission/document.rb +43 -0
- data/lib/bankserv/transmission/input_document.rb +84 -0
- data/lib/bankserv/transmission/output_document.rb +27 -0
- data/lib/bankserv/transmission/record.rb +13 -0
- data/lib/bankserv/transmission/reply_document.rb +27 -0
- data/lib/bankserv/transmission/set.rb +120 -0
- data/lib/bankserv/transmission/set/account_holder_verification.rb +81 -0
- data/lib/bankserv/transmission/set/account_holder_verification_output.rb +17 -0
- data/lib/bankserv/transmission/set/credit.rb +44 -0
- data/lib/bankserv/transmission/set/debit.rb +44 -0
- data/lib/bankserv/transmission/set/document.rb +45 -0
- data/lib/bankserv/transmission/set/eft.rb +228 -0
- data/lib/bankserv/transmission/set/eft_output.rb +12 -0
- data/lib/bankserv/transmission/set/eft_redirect.rb +18 -0
- data/lib/bankserv/transmission/set/eft_unpaid.rb +18 -0
- data/lib/bankserv/transmission/set/reply.rb +47 -0
- data/lib/bankserv/transmission/statement.rb +46 -0
- data/lib/bankserv/version.rb +3 -0
- data/lib/config/ahv.yml +9 -0
- data/lib/core_extensions.rb +37 -0
- data/lib/generators/active_record/bankserv_generator.rb +30 -0
- data/lib/generators/active_record/templates/migration.rb +141 -0
- data/spec/examples/ahv_input_file.txt +7 -0
- data/spec/examples/ahv_output_file.txt +7 -0
- data/spec/examples/credit_eft_input.txt +166 -0
- data/spec/examples/debit_eft_input_file.txt +20 -0
- data/spec/examples/eft_input_with_2_sets.txt +8 -0
- data/spec/examples/eft_output_file.txt +35 -0
- data/spec/examples/host2host/tmp.log +1 -0
- data/spec/examples/reply/rejected_transmission.txt +7 -0
- data/spec/examples/reply/reply_file.txt +5 -0
- data/spec/examples/statement4_unpacked.dat +51 -0
- data/spec/examples/tmp/OUTPUT0412153500.txt +35 -0
- data/spec/examples/tmp/REPLY0412153000.txt +5 -0
- data/spec/factories.rb +90 -0
- data/spec/internal/config/database.yml.sample +3 -0
- data/spec/internal/config/routes.rb +3 -0
- data/spec/internal/db/schema.rb +138 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/internal/public/favicon.ico +0 -0
- data/spec/lib/bankserv/account_holder_verification_spec.rb +104 -0
- data/spec/lib/bankserv/configuration_spec.rb +34 -0
- data/spec/lib/bankserv/core_ext_spec.rb +43 -0
- data/spec/lib/bankserv/credit_spec.rb +92 -0
- data/spec/lib/bankserv/debit_spec.rb +187 -0
- data/spec/lib/bankserv/engine/engine_spec.rb +142 -0
- data/spec/lib/bankserv/transaction_spec.rb +32 -0
- data/spec/lib/bankserv/transmission/input_document_spec.rb +207 -0
- data/spec/lib/bankserv/transmission/output_document_spec.rb +210 -0
- data/spec/lib/bankserv/transmission/reply_document_spec.rb +117 -0
- data/spec/lib/bankserv/transmission/set/account_holder_verification_spec.rb +108 -0
- data/spec/lib/bankserv/transmission/set/credit_spec.rb +96 -0
- data/spec/lib/bankserv/transmission/set/debit_spec.rb +103 -0
- data/spec/lib/bankserv/transmission/statement_spec.rb +109 -0
- data/spec/spec_helper.rb +28 -0
- data/spec/support/helpers.rb +207 -0
- metadata +223 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bankserv::Configuration do
|
4
|
+
include Helpers
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
create(:configuration)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should store the client code" do
|
11
|
+
Bankserv::Configuration.client_code.should == Bankserv::Configuration.active.client_code
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should store the client name" do
|
15
|
+
Bankserv::Configuration.client_name.should == Bankserv::Configuration.active.client_name
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should store the user code" do
|
19
|
+
Bankserv::Configuration.user_code.should == Bankserv::Configuration.active.user_code
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should store the department code" do
|
23
|
+
Bankserv::Configuration.department_code.should == Bankserv::Configuration.active.department_code
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should store the user generation number" do
|
27
|
+
Bankserv::Configuration.user_generation_number.should == Bankserv::Configuration.active.user_generation_number
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should be able to set the user generation number" do
|
31
|
+
Bankserv::Configuration.set_user_generation_number!(66)
|
32
|
+
Bankserv::Configuration.user_generation_number.should == 66
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Date do
|
4
|
+
|
5
|
+
context "Checking dates against South African holidays/work days" do
|
6
|
+
|
7
|
+
it "should know that Sunday is not a business day" do
|
8
|
+
t = Time.local(2012, 1, 22, 10, 5, 0)
|
9
|
+
Timecop.travel(t)
|
10
|
+
Date.today.business_day?.should be_false
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should know that Saturday is not a business day" do
|
14
|
+
t = Time.local(2012, 1, 21, 10, 5, 0)
|
15
|
+
Timecop.travel(t)
|
16
|
+
Date.today.business_day?.should be_false
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should know that holidays are not business days" do
|
20
|
+
[ Time.local(2007,1,1),
|
21
|
+
Time.local(2007,3,21),
|
22
|
+
Time.local(2007,4,6),
|
23
|
+
Time.local(2007,4,9),
|
24
|
+
Time.local(2007,4,27),
|
25
|
+
Time.local(2007,5,1),
|
26
|
+
Time.local(2007,6,16),
|
27
|
+
Time.local(2007,8,9),
|
28
|
+
Time.local(2007,9,24),
|
29
|
+
Time.local(2007,12,16),
|
30
|
+
Time.local(2007,12,25),
|
31
|
+
Time.local(2007,12,26)].each do |t|
|
32
|
+
Timecop.travel(t)
|
33
|
+
Date.today.business_day?.should be_false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should know that Monday 23rd January 2012 is a business day" do
|
38
|
+
t = Time.local(2012, 1, 23, 10, 5, 0)
|
39
|
+
Timecop.travel(t)
|
40
|
+
Date.today.business_day?.should be_true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bankserv::Debit do
|
4
|
+
|
5
|
+
context "creating a new credit" do
|
6
|
+
|
7
|
+
it "should generate a unique internal reference" do
|
8
|
+
create(:credit)
|
9
|
+
Bankserv::Credit.last.internal_user_ref.should match /CREDIT[0-9]+/
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
context "queuing a batch of credit orders" do
|
15
|
+
|
16
|
+
before(:all) do
|
17
|
+
@data = [{
|
18
|
+
debit: {
|
19
|
+
account_number: "907654321",
|
20
|
+
branch_code: "632005",
|
21
|
+
account_type: 'savings',
|
22
|
+
id_number: '8207205263083',
|
23
|
+
initials: "RC",
|
24
|
+
account_name: "Rawson Milnerton",
|
25
|
+
amount: 1000000,
|
26
|
+
user_ref: 134,
|
27
|
+
action_date: Date.today
|
28
|
+
},
|
29
|
+
credit: [
|
30
|
+
{ account_number: "13123123123", branch_code: "123123", account_type: "savings", id_number: "198273981723", initials: "WC", account_name: "Tenant", amount: 500000, action_date: Date.today, user_ref: "200"},
|
31
|
+
{ account_number: "45645645645", branch_code: "123123", account_type: "savings", id_number: "198273922723", initials: "WX", account_name: "Tefant", amount: 250000, action_date: Date.today, user_ref: "201"},
|
32
|
+
{ account_number: "78978978978", branch_code: "789789", account_type: "savings", id_number: "197873933723", initials: "WB", account_name: "Tebant", amount: 250000, action_date: Date.today, user_ref: "202"}
|
33
|
+
]
|
34
|
+
}]
|
35
|
+
|
36
|
+
@hash = {
|
37
|
+
type: 'credit',
|
38
|
+
data: { batches: @data, type_of_service: "SAMEDAY"}
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should be able to queue a request of credit orders" do
|
43
|
+
Bankserv::Credit.request(@hash).should be_true
|
44
|
+
Bankserv::Credit.all.each {|db| db.completed?.should be_false }
|
45
|
+
Bankserv::Credit.all.each {|db| db.new?.should be_true }
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should link all debit order to the credit record" do
|
49
|
+
Bankserv::Credit.request(@hash)
|
50
|
+
Bankserv::Credit.all.map(&:batch_id).uniq.length.should == 1
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
context "queuing a batch of batched credit orders" do
|
56
|
+
before(:all) do
|
57
|
+
@data = [{
|
58
|
+
debit: {
|
59
|
+
account_number: "907654321", branch_code: "632005", account_type: 'savings', id_number: '8207205263083', initials: "RC", account_name: "Rawson Milnerton", amount: 1000000, user_ref: 234, action_date: Date.today },
|
60
|
+
credit: [
|
61
|
+
{ account_number: "13123123123", branch_code: "123123", account_type: "savings", id_number: "198273981723", initials: "WC", account_name: "Tenant", amount: 500000, action_date: Date.today, user_ref: "235"},
|
62
|
+
{ account_number: "45645645645", branch_code: "123123", account_type: "savings", id_number: "198273922723", initials: "WX", account_name: "Tefant", amount: 250000, action_date: Date.today, user_ref: "236"},
|
63
|
+
{ account_number: "78978978978", branch_code: "789789", account_type: "savings", id_number: "197873933723", initials: "WB", account_name: "Tebant", amount: 250000, action_date: Date.today, user_ref: "237"}
|
64
|
+
]
|
65
|
+
}, {
|
66
|
+
debit: {
|
67
|
+
account_number: "907654522", branch_code: "632005", account_type: 'savings', id_number: '8207205263083', initials: "RC", account_name: "Rawson Claremont", amount: 1500000, user_ref: 300, action_date: Date.today },
|
68
|
+
credit: [
|
69
|
+
{ account_number: "13123123122", branch_code: "123123", account_type: "savings", id_number: "198273981723", initials: "WC", account_name: "Tenant", amount: 500000, action_date: Date.today, user_ref: "301"},
|
70
|
+
{ account_number: "45645645642", branch_code: "123123", account_type: "savings", id_number: "198273922723", initials: "WX", account_name: "Tefant", amount: 250000, action_date: Date.today, user_ref: "302"},
|
71
|
+
{ account_number: "78978978972", branch_code: "789789", account_type: "savings", id_number: "197873933723", initials: "WB", account_name: "Tebant", amount: 750000, action_date: Date.today, user_ref: "303"}
|
72
|
+
]
|
73
|
+
}]
|
74
|
+
|
75
|
+
@hash = {
|
76
|
+
type: 'credit',
|
77
|
+
data: {batches: @data, type_of_service: "SAMEDAY"}
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should be able to queue a batched request of credit orders" do
|
82
|
+
Bankserv::Credit.request(@hash).should be_true
|
83
|
+
Bankserv::Credit.all.each {|db| db.completed?.should be_false }
|
84
|
+
Bankserv::Credit.all.each {|db| db.new?.should be_true }
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should link all debit order to their respective credit record" do
|
88
|
+
Bankserv::Credit.request(@hash)
|
89
|
+
Bankserv::Credit.all.map(&:batch_id).uniq.length.should == 2
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bankserv::Debit do
|
4
|
+
|
5
|
+
context "creating a new debit" do
|
6
|
+
|
7
|
+
it "should generate a unique internal reference" do
|
8
|
+
create(:debit)
|
9
|
+
Bankserv::Debit.last.internal_user_ref.should match /DEBIT[0-9]+/
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
context "queuing a batch of debit orders" do
|
15
|
+
|
16
|
+
before(:all) do
|
17
|
+
|
18
|
+
create(:configuration, client_code: "10", client_name: "LDC USER 10 AFRICA (PTY)", user_code: "9534", client_abbreviated_name: "ALIMITTST")
|
19
|
+
@data = [{
|
20
|
+
credit: {
|
21
|
+
account_number: "907654321",
|
22
|
+
branch_code: "632005",
|
23
|
+
account_type: 'savings',
|
24
|
+
id_number: '8207205263083',
|
25
|
+
initials: "RC",
|
26
|
+
account_name: "Rawson Milnerton",
|
27
|
+
amount: 1000000,
|
28
|
+
user_ref: 134,
|
29
|
+
action_date: Date.today
|
30
|
+
},
|
31
|
+
debit: [
|
32
|
+
{ account_number: "13123123123", branch_code: "123123", account_type: "savings", id_number: "198273981723", initials: "WC", account_name: "Tenant", amount: 500000, action_date: Date.today, user_ref: "200"},
|
33
|
+
{ account_number: "45645645645", branch_code: "123123", account_type: "savings", id_number: "198273922723", initials: "WX", account_name: "Tefant", amount: 250000, action_date: Date.today, user_ref: "201"},
|
34
|
+
{ account_number: "78978978978", branch_code: "789789", account_type: "savings", id_number: "197873933723", initials: "WB", account_name: "Tebant", amount: 250000, action_date: Date.today, user_ref: "202"}
|
35
|
+
]
|
36
|
+
}]
|
37
|
+
|
38
|
+
@hash = {
|
39
|
+
type: 'debit',
|
40
|
+
data: { type_of_service: "SAMEDAY", batches: @data }
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should be able to queue a request of debit orders" do
|
45
|
+
Bankserv::Debit.request(@hash).should be_true
|
46
|
+
Bankserv::Debit.all.each {|db| db.completed?.should be_false }
|
47
|
+
Bankserv::Debit.all.each {|db| db.new?.should be_true }
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should link all debit order to the credit record" do
|
51
|
+
Bankserv::Debit.request(@hash)
|
52
|
+
Bankserv::Debit.all.map(&:batch_id).uniq.length.should == 1
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
context "queuing a batch of batched debit orders" do
|
58
|
+
before(:all) do
|
59
|
+
@data = [{
|
60
|
+
credit: {
|
61
|
+
account_number: "907654321", branch_code: "632005", account_type: 'savings', id_number: '8207205263083', initials: "RC", account_name: "Rawson Milnerton", amount: 1000000, user_ref: 234, action_date: Date.today },
|
62
|
+
debit: [
|
63
|
+
{ account_number: "13123123123", branch_code: "123123", account_type: "savings", id_number: "198273981723", initials: "WC", account_name: "Tenant", amount: 500000, action_date: Date.today, user_ref: "235"},
|
64
|
+
{ account_number: "45645645645", branch_code: "123123", account_type: "savings", id_number: "198273922723", initials: "WX", account_name: "Tefant", amount: 250000, action_date: Date.today, user_ref: "236"},
|
65
|
+
{ account_number: "78978978978", branch_code: "789789", account_type: "savings", id_number: "197873933723", initials: "WB", account_name: "Tebant", amount: 250000, action_date: Date.today, user_ref: "237"}
|
66
|
+
]
|
67
|
+
}, {
|
68
|
+
credit: {
|
69
|
+
account_number: "907654322", branch_code: "632005", account_type: 'savings', id_number: '8207205263083', initials: "RC", account_name: "Rawson Milnerton", amount: 1500000, user_ref: 300, action_date: Date.today },
|
70
|
+
debit: [
|
71
|
+
{ account_number: "13123123122", branch_code: "123123", account_type: "savings", id_number: "198273981723", initials: "WC", account_name: "Tenant", amount: 500000, action_date: Date.today, user_ref: "301"},
|
72
|
+
{ account_number: "45645645642", branch_code: "123123", account_type: "savings", id_number: "198273922723", initials: "WX", account_name: "Tefant", amount: 250000, action_date: Date.today, user_ref: "302"},
|
73
|
+
{ account_number: "78978978972", branch_code: "789789", account_type: "savings", id_number: "197873933723", initials: "WB", account_name: "Tebant", amount: 750000, action_date: Date.today, user_ref: "303"}
|
74
|
+
]
|
75
|
+
}]
|
76
|
+
|
77
|
+
@hash = {
|
78
|
+
type: 'debit',
|
79
|
+
data: {type_of_service: "ONE DAY", batches: @data}
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should be able to queue a batched request of debit orders" do
|
84
|
+
Bankserv::Debit.request(@hash).should be_true
|
85
|
+
Bankserv::Debit.all.each {|db| db.completed?.should be_false }
|
86
|
+
Bankserv::Credit.all.each {|db| db.new?.should be_true }
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should link all debit order to their respective credit record" do
|
90
|
+
Bankserv::Debit.request(@hash)
|
91
|
+
Bankserv::Debit.all.map(&:batch_id).uniq.length.should == 2
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
context "when processing an unpaid debit response" do
|
97
|
+
|
98
|
+
before(:each) do
|
99
|
+
@debit = create(:debit)
|
100
|
+
|
101
|
+
@unpaid_response = {
|
102
|
+
:rec_id=>"013",
|
103
|
+
:rec_status=>"T",
|
104
|
+
:transaction_type=>"50",
|
105
|
+
:transmission_date=>"20010111",
|
106
|
+
:original_sequence_number=>"3378",
|
107
|
+
:homing_branch_code=>"270124",
|
108
|
+
:homing_account_number=>"53090317766",
|
109
|
+
:amount=>"13755",
|
110
|
+
:user_ref=>"DEBIT5",
|
111
|
+
:rejection_reason=>"2",
|
112
|
+
:rejection_qualifier=>"0",
|
113
|
+
:distribution_sequence_number=>"0",
|
114
|
+
:homing_account_name=>"",
|
115
|
+
:response_status=>"unpaid"
|
116
|
+
}
|
117
|
+
|
118
|
+
@debit.process_response(@unpaid_response)
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should be marked as unpaid if the response status is unpaid" do
|
122
|
+
@debit.unpaid?.should be_true
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should record the rejection reason code" do
|
126
|
+
@debit.response[:rejection_reason].should == "2"
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should record a rejection reason description" do
|
130
|
+
@debit.response[:rejection_reason_description].should == "NOT PROVIDED FOR"
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should record the rejection qualifier code" do
|
134
|
+
@debit.response[:rejection_qualifier].should == "0"
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should record the rejection qualifier description" do
|
138
|
+
@debit.response[:rejection_qualifier_description].should be_nil
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
context "when processing a redirect debit response" do
|
144
|
+
|
145
|
+
before(:each) do
|
146
|
+
@debit = create(:debit)
|
147
|
+
|
148
|
+
@redirect_response = {
|
149
|
+
:rec_id=>"017",
|
150
|
+
:rec_status=>"T",
|
151
|
+
:transaction_type=>"50",
|
152
|
+
:transmission_date=>"20010116",
|
153
|
+
:original_sequence_number=>"73",
|
154
|
+
:homing_branch=>"52749",
|
155
|
+
:homing_account=>"405662263",
|
156
|
+
:amount=>"9964",
|
157
|
+
:user_ref=>"DEBIT2",
|
158
|
+
:new_homing_branch=>"55",
|
159
|
+
:new_homing_account_number=>"405663293",
|
160
|
+
:new_homing_account_type=>"2",
|
161
|
+
:distribution_sequence_number=>"0",
|
162
|
+
:homing_account_name=>"",
|
163
|
+
:response_status=>"redirect"
|
164
|
+
}
|
165
|
+
|
166
|
+
@debit.process_response(@redirect_response)
|
167
|
+
end
|
168
|
+
|
169
|
+
it "should be marked as redirect if the response status is redirect" do
|
170
|
+
@debit.redirect?.should be_true
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should record the new homing branch" do
|
174
|
+
@debit.response[:new_homing_branch].should == "55"
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should record the new homing account number" do
|
178
|
+
@debit.response[:new_homing_account_number].should == "405663293"
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should record the new homing account type" do
|
182
|
+
@debit.response[:new_homing_account_type].should == "2"
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bankserv::Engine do
|
4
|
+
include Helpers
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
FileUtils.mkdir(Dir.pwd + "/spec/examples/host2host/archives") unless File.directory?(Dir.pwd + "/spec/examples/host2host/archives")
|
8
|
+
FileUtils.copy(Dir.pwd + "/spec/examples/tmp/OUTPUT0412153500.txt", Dir.pwd + "/spec/examples/host2host/")
|
9
|
+
FileUtils.copy(Dir.pwd + "/spec/examples/tmp/REPLY0412153000.txt", Dir.pwd + "/spec/examples/host2host/")
|
10
|
+
end
|
11
|
+
|
12
|
+
after(:all) do
|
13
|
+
Dir.glob(Dir.pwd + "/spec/examples/host2host/*.txt").each do |input_file|
|
14
|
+
File.delete(input_file)
|
15
|
+
end
|
16
|
+
|
17
|
+
FileUtils.rm_rf(Dir.pwd + "/spec/examples/host2host/archives", secure: true)
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
context "Prepare engine" do
|
22
|
+
|
23
|
+
it "should contain default values from the migration" do
|
24
|
+
Bankserv::Engine.config.should == { interval_in_minutes: 15, input_directory: "/tmp", output_directory: "/tmp", archive_directory: "/tmp" }
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should be able to update engines config" do
|
28
|
+
Bankserv::Engine.interval = 15
|
29
|
+
Bankserv::Engine.output_directory = Dir.pwd + "/spec/examples/host2host"
|
30
|
+
Bankserv::Engine.config[:interval_in_minutes].should == 15
|
31
|
+
Bankserv::Engine.config[:output_directory].should == Dir.pwd + "/spec/examples/host2host"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should not have any running processes" do
|
35
|
+
Bankserv::Engine.running?.should be_false
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
context "Testing individual methods of engine" do
|
41
|
+
|
42
|
+
before(:all) do
|
43
|
+
t = Time.local(2012, 1, 23, 10, 5, 0)
|
44
|
+
Timecop.travel(t)
|
45
|
+
file_contents = File.open("./spec/examples/eft_input_with_2_sets.txt", "rb").read
|
46
|
+
Bankserv::InputDocument.store(file_contents)
|
47
|
+
|
48
|
+
Bankserv::Document.last.mark_processed!
|
49
|
+
|
50
|
+
Bankserv::Engine.output_directory = Dir.pwd + "/spec/examples/host2host"
|
51
|
+
Bankserv::Engine.input_directory = Dir.pwd + "/spec/examples/host2host"
|
52
|
+
Bankserv::Engine.archive_directory = Dir.pwd + "/spec/examples/host2host/archives"
|
53
|
+
|
54
|
+
@queue = Bankserv::Engine.new
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should be able to start processing work" do
|
58
|
+
@queue.start!.should be_true
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should be set to running" do
|
62
|
+
@queue.running?.should be_true
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should be expecting a reply file" do
|
66
|
+
@queue.expecting_reply_file?.should be_true
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should be able to return a list of reply files" do
|
70
|
+
Bankserv::Engine.reply_files.should == ["REPLY0412153000.txt"]
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should be able to return a list of output files" do
|
74
|
+
Bankserv::Engine.output_files.should == ["OUTPUT0412153500.txt"]
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should be able to process reply files" do
|
78
|
+
@queue.process_reply_files
|
79
|
+
Bankserv::Document.first.reply_status.should == "ACCEPTED"
|
80
|
+
@queue.expecting_reply_file?.should be_false
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should be able to process output files" do
|
84
|
+
@queue.process_output_files
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should be able to set the process to finished" do
|
88
|
+
@queue.finish!.should be_true
|
89
|
+
@queue.running?.should be_false
|
90
|
+
@queue.process.success.should be_true
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should not have any processes running" do
|
94
|
+
Bankserv::Engine.running?.should be_false
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
context "Processing an input document." do
|
100
|
+
|
101
|
+
before(:all) do
|
102
|
+
Bankserv::Document.delete_all
|
103
|
+
Bankserv::Set.delete_all
|
104
|
+
Bankserv::Record.delete_all
|
105
|
+
Bankserv::AccountHolderVerification.delete_all
|
106
|
+
Bankserv::Debit.delete_all
|
107
|
+
Bankserv::Credit.delete_all
|
108
|
+
|
109
|
+
tear_it_down
|
110
|
+
create(:configuration, client_code: "986", client_name: "TESTTEST", user_code: "9999", user_generation_number: 846, client_abbreviated_name: "TESTTEST")
|
111
|
+
|
112
|
+
t = Time.local(2008, 8, 8, 10, 5, 0)
|
113
|
+
Timecop.travel(t)
|
114
|
+
|
115
|
+
create_credit_request
|
116
|
+
|
117
|
+
Bankserv::Configuration.stub!(:live_env?).and_return(true)
|
118
|
+
Bankserv::InputDocument.stub!(:fetch_next_transmission_number).and_return("846")
|
119
|
+
Bankserv::Record.create! record_type:"standard_record", data: {user_sequence_number: 77}, set_id: 76876
|
120
|
+
|
121
|
+
Bankserv::Engine.output_directory = Dir.pwd + "/spec/examples/host2host"
|
122
|
+
Bankserv::Engine.input_directory = Dir.pwd + "/spec/examples/host2host"
|
123
|
+
Bankserv::Engine.archive_directory = Dir.pwd + "/spec/examples/host2host/archives"
|
124
|
+
|
125
|
+
@queue = Bankserv::Engine.new
|
126
|
+
@queue.start! # create a process
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should process the document" do
|
130
|
+
@queue.process_input_files
|
131
|
+
@document = Bankserv::Document.last
|
132
|
+
@document.processed.should be_true
|
133
|
+
@queue.expecting_reply_file?.should be_true
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should write a file to the input directory" do
|
137
|
+
(Dir.glob(Dir.pwd + "/spec/examples/host2host/INPUT*.txt").size == 1).should be_true
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|