bankserv 0.2.4 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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. "