bankserv 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -67,9 +67,9 @@ module Bankserv
67
67
  end
68
68
 
69
69
  def process_input_files
70
- Bankserv::Service.active.each do |bankserv_service|
70
+ input_services.each do |bankserv_service|
71
71
  begin
72
- next if self.expecting_reply_file? # TODO: expecting per service
72
+ next if self.expecting_reply_file?(bankserv_service)
73
73
 
74
74
  if document = Bankserv::InputDocument.generate!(bankserv_service)
75
75
  @logs[:input_files] << "Input Document created with id: #{document.id}" if document
@@ -85,6 +85,10 @@ module Bankserv
85
85
  end
86
86
  end
87
87
 
88
+ def input_services
89
+ Bankserv::Service.active.select(&:can_transmit?)
90
+ end
91
+
88
92
  def write_file!(document)
89
93
  begin
90
94
  transmission = Absa::H2h::Transmission::Document.build([document.to_hash])
@@ -113,8 +117,8 @@ module Bankserv
113
117
  FileUtils.mv(file, "#{Bankserv::Engine.archive_directory}/#{year}/#{month}/")
114
118
  end
115
119
 
116
- def expecting_reply_file?
117
- Bankserv::Document.where(type: 'input', reply_status: nil, processed: true).count > 0
120
+ def expecting_reply_file?(bankserv_service)
121
+ Bankserv::Document.where(type: 'input', reply_status: nil, processed: true, client_code: bankserv_service.client_code).count > 0
118
122
  end
119
123
 
120
124
  def finish!
@@ -50,6 +50,10 @@ module Bankserv
50
50
  def is_test_env?
51
51
  config[:transmission_status] == "T"
52
52
  end
53
+
54
+ def can_transmit?
55
+ false
56
+ end
53
57
 
54
58
  end
55
59
 
@@ -59,6 +63,10 @@ module Bankserv
59
63
  params.merge!(test: true) if is_test_env?
60
64
  Request.create!(params)
61
65
  end
66
+
67
+ def can_transmit?
68
+ true
69
+ end
62
70
  end
63
71
 
64
72
  class CreditService < Service
@@ -66,7 +74,11 @@ module Bankserv
66
74
  params.merge!(type: 'credit', service_id: id)
67
75
  params.merge!(test: true) if is_test_env?
68
76
  Request.create!(params)
69
- end
77
+ end
78
+
79
+ def can_transmit?
80
+ true
81
+ end
70
82
  end
71
83
 
72
84
  class AHVService < Service
@@ -74,6 +86,10 @@ module Bankserv
74
86
  params.merge!(type: 'ahv', service_id: id)
75
87
  params.merge!(test: true) if is_test_env?
76
88
  Request.create!(params)
89
+ end
90
+
91
+ def can_transmit?
92
+ true
77
93
  end
78
94
  end
79
95
 
@@ -9,7 +9,13 @@ class Bankserv::InputDocument < Bankserv::Document
9
9
 
10
10
  raise "Expected a document set" unless options[:type] == "document"
11
11
 
12
- document = new(type: 'input', transmission_number: options[:data][0][:data][:transmission_no], transmission_status: options[:data][0][:data][:rec_status])
12
+ document = new(
13
+ type: 'input',
14
+ transmission_number: options[:data][0][:data][:transmission_no],
15
+ transmission_status: options[:data][0][:data][:rec_status],
16
+ client_code: options[:data][0][:data][:client_code]
17
+ )
18
+
13
19
  document.set = Bankserv::Set.from_hash(options)
14
20
  document.set.document = document # whaaaaaa?
15
21
  document.save!
@@ -49,7 +55,14 @@ class Bankserv::InputDocument < Bankserv::Document
49
55
  raise "Transmission status not specified" if transmission_status.nil?
50
56
  options[:transmission_no] ||= bankserv_service.config[:transmission_number]
51
57
 
52
- document = new(transmission_status: transmission_status, rec_status: options[:rec_status], type: 'input', transmission_number: options[:transmission_no])
58
+ document = new(
59
+ transmission_status: transmission_status,
60
+ rec_status: options[:rec_status],
61
+ type: 'input',
62
+ transmission_number: options[:transmission_no],
63
+ client_code: bankserv_service.client_code
64
+ )
65
+
53
66
  document.set = Bankserv::Transmission::UserSet::Document.generate(options.merge(rec_status: document.rec_status))
54
67
  document.set.document = document # whaaaaaa?
55
68
 
@@ -1,3 +1,3 @@
1
1
  module Bankserv
2
- VERSION = "0.2.4"
2
+ VERSION = "0.2.5"
3
3
  end
@@ -22,23 +22,10 @@ class CreateBankservTables < ActiveRecord::Migration
22
22
  t.string :client_code
23
23
  t.text :config
24
24
  t.timestamps
25
- #
26
- # t.boolean :active, :default => false
27
- # t.string :client_code
28
- # t.string :client_name
29
- # t.string :client_abbreviated_name
30
- # t.string :user_code
31
- # t.string :department_code
32
- # t.integer :transmission_number
33
- # t.integer :user_generation_number
34
- # t.string :internal_branch_code
35
- # t.boolean :live_env, :default => false
36
- # t.timestamps
37
- # t.integer :eft_sequence_number
38
- # t.datetime :eft_sequence_number_updated_at #refactor later
39
25
  end
40
26
 
41
27
  create_table :bankserv_requests do |t|
28
+ t.integer :service_id
42
29
  t.string :type
43
30
  t.text :data
44
31
  t.boolean :processed, :default => false
@@ -98,6 +85,7 @@ class CreateBankservTables < ActiveRecord::Migration
98
85
  end
99
86
 
100
87
  create_table :bankserv_documents do |t|
88
+ t.string :client_code
101
89
  t.string :type
102
90
  t.references :set
103
91
  t.boolean :processed, :default => false
@@ -84,6 +84,7 @@ ActiveRecord::Schema.define do
84
84
  end
85
85
 
86
86
  create_table :bankserv_documents, :force => true do |t|
87
+ t.string :client_code
87
88
  t.string :type
88
89
  t.references :set
89
90
  t.boolean :processed, :default => false
@@ -40,10 +40,23 @@ describe Bankserv::Engine do
40
40
 
41
41
  end
42
42
 
43
+ it "should retrieve services which can transmit input documents" do
44
+ debit_service = Bankserv::DebitService.register(client_code: '10', client_name: "RCTEST", client_abbreviated_name: 'RCTEST', user_code: "9534", transmission_status: "L", transmission_number: "1")
45
+ credit_service = Bankserv::CreditService.register(client_code: '12345', client_name: "RCTEST", client_abbreviated_name: 'RCTEST', user_code: "9534", transmission_status: "L", transmission_number: "1")
46
+ ahv_service = Bankserv::AHVService.register(client_code: '12345', internal_branch_code: '632005', department_code: "506", client_name: "TESTTEST", client_abbreviated_name: 'TESTTEST', generation_number: 1, transmission_status: "L", transmission_number: "1")
47
+ statement_service = Bankserv::StatementService.register(client_code: '12346', client_name: "TESTTEST", client_abbreviated_name: 'TESTTEST', user_code: "9999", generation_number: 1, transmission_status: "L", transmission_number: "1")
48
+
49
+ input_services = Bankserv::Engine.new.input_services
50
+ input_services.include?(debit_service).should be_true
51
+ input_services.include?(credit_service).should be_true
52
+ input_services.include?(ahv_service).should be_true
53
+ input_services.include?(statement_service).should be_false
54
+ end
55
+
43
56
  context "Testing individual methods of engine" do
44
57
 
45
58
  before(:all) do
46
- Bankserv::DebitService.register(client_code: '12345', client_name: "RCTEST", client_abbreviated_name: 'RCTEST', user_code: "9534", transmission_status: "L", transmission_number: "1")
59
+ @debit_service = Bankserv::DebitService.register(client_code: '10', client_name: "RCTEST", client_abbreviated_name: 'RCTEST', user_code: "9534", transmission_status: "L", transmission_number: "1")
47
60
  t = Time.local(2012, 1, 23, 10, 5, 0)
48
61
  Timecop.travel(t)
49
62
  file_contents = File.open("./spec/examples/eft_input_with_2_sets.txt", "rb").read
@@ -67,7 +80,7 @@ describe Bankserv::Engine do
67
80
  end
68
81
 
69
82
  it "should be expecting a reply file" do
70
- @engine.expecting_reply_file?.should be_true
83
+ @engine.expecting_reply_file?(@debit_service).should be_true
71
84
  end
72
85
 
73
86
  it "should be able to return a list of reply files" do
@@ -81,7 +94,7 @@ describe Bankserv::Engine do
81
94
  it "should be able to process reply files" do
82
95
  @engine.process_reply_files
83
96
  Bankserv::Document.first.reply_status.should == "ACCEPTED"
84
- @engine.expecting_reply_file?.should be_false
97
+ @engine.expecting_reply_file?(@debit_service).should be_false
85
98
  end
86
99
 
87
100
  it "should be able to process output files" do
@@ -123,7 +136,7 @@ describe Bankserv::Engine do
123
136
  @engine.process_input_files
124
137
  @document = Bankserv::Document.last
125
138
  @document.processed.should be_true
126
- @engine.expecting_reply_file?.should be_true
139
+ @engine.expecting_reply_file?(@service).should be_true
127
140
  end
128
141
 
129
142
  it "should write a file to the input directory" do
@@ -142,44 +155,33 @@ describe Bankserv::Engine do
142
155
  @debit_service = Bankserv::DebitService.register(client_code: '12346', client_name: "TESTTEST", client_abbreviated_name: 'TESTTEST', user_code: "9999", generation_number: 1, transmission_status: "L", transmission_number: "1")
143
156
  @credit_service = Bankserv::CreditService.register(client_code: '12347', client_name: "TESTTEST", client_abbreviated_name: 'TESTTEST', user_code: "9999", generation_number: 1, transmission_status: "L", transmission_number: "1")
144
157
  Bankserv::EngineConfiguration.create!(interval_in_minutes: 15, input_directory: @tmpdir, output_directory: @tmpdir, archive_directory: @tmpdir)
145
- end
146
-
147
- it "should process ahv requests" do
158
+
159
+ # test that engine can process different service types at once (generate 3 files with one run)
148
160
  Bankserv::AccountHolderVerification.should_receive(:generate_reference_number).exactly(8).times.and_return("AHV67","AHV68","AHV69","AHV70","AHV71","AHV72","AHV73","AHV74")
149
161
  create_ahv_requests_scenario(@ahv_service)
162
+ create_debit_requests_scenario(@debit_service)
163
+ create_credit_requests_scenario(@credit_service)
164
+
150
165
  e = Bankserv::Engine.new
151
- e.should_receive(:generate_input_file_name).and_return("harry.txt")
166
+ e.should_receive(:generate_input_file_name).and_return("harry.txt", "sally.txt", "molly.txt")
152
167
  e.process!
153
-
168
+ end
169
+
170
+ it "should process ahv requests" do
154
171
  expected_string = File.open("./spec/examples/INPUT.120410144410.txt", "rb").read
155
172
  got_string = File.open(@tmpdir + '/harry.txt', "rb").read
156
-
157
173
  got_string.should == expected_string
158
174
  end
159
175
 
160
176
  it "should process debit requests" do
161
- create_debit_requests_scenario(@debit_service)
162
-
163
- e = Bankserv::Engine.new
164
- e.should_receive(:generate_input_file_name).and_return("sally.txt")
165
- e.process!
166
-
167
177
  expected_string = File.open("./spec/examples/INPUT.120411110604.txt", "rb").read
168
178
  got_string = File.open(@tmpdir + '/sally.txt', "rb").read
169
-
170
179
  got_string.should == expected_string
171
180
  end
172
181
 
173
182
  it "should process credit requests" do
174
- create_credit_requests_scenario(@credit_service)
175
-
176
- e = Bankserv::Engine.new
177
- e.should_receive(:generate_input_file_name).and_return("molly.txt")
178
- e.process!
179
-
180
183
  expected_string = File.open("./spec/examples/INPUT.120411124123.txt", "rb").read
181
184
  got_string = File.open(@tmpdir + '/molly.txt', "rb").read
182
-
183
185
  got_string.should == expected_string
184
186
  end
185
187
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bankserv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2012-04-16 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
17
- requirement: &70253469356280 !ruby/object:Gem::Requirement
17
+ requirement: &70306756830520 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70253469356280
25
+ version_requirements: *70306756830520
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: activerecord
28
- requirement: &70253469355680 !ruby/object:Gem::Requirement
28
+ requirement: &70306756829960 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '3.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70253469355680
36
+ version_requirements: *70306756829960
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: i18n
39
- requirement: &70253469347540 !ruby/object:Gem::Requirement
39
+ requirement: &70306756829340 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *70253469347540
47
+ version_requirements: *70306756829340
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: absa-h2h
50
- requirement: &70253469346880 !ruby/object:Gem::Requirement
50
+ requirement: &70306756828780 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 0.1.1
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *70253469346880
58
+ version_requirements: *70306756828780
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: absa-esd
61
- requirement: &70253469346260 !ruby/object:Gem::Requirement
61
+ requirement: &70306756828140 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 0.0.2
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *70253469346260
69
+ version_requirements: *70306756828140
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: combustion
72
- requirement: &70253469345680 !ruby/object:Gem::Requirement
72
+ requirement: &70306756827560 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -77,7 +77,7 @@ dependencies:
77
77
  version: 0.3.1
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *70253469345680
80
+ version_requirements: *70306756827560
81
81
  description: ! "This engine allows users to inject requests into a queue to be processed.
82
82
  \n \n The queue handles bank account validations, credit payments,
83
83
  debit orders\n and collecting bank statements. "