bankster-transaction 0.1.1 → 0.1.2
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.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 860a2733dc4a0ee55294c9654cc38deacc22fb53
|
|
4
|
+
data.tar.gz: 7ea23ca5d57b7ad1856c88725cbbca5df3a2cf69
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d41c7634a3a7167d90697e15518d4aa9b3e19a309ae40a21340094c1a25d4887d9579f8963a207e980c4edf2f9ec69056b5f5639ecf6fe87e070577c22e0c198
|
|
7
|
+
data.tar.gz: d0a79ee09f26cfdc3587dbb10abc2bb3517c21ada73efd0d6c3cf44ddbdcaac7ebe4b0c2f7293d174209717bd3a4df957ae2a7ab3e60b631918cae4dae314b6b
|
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
6
|
spec.name = 'bankster-transaction'
|
|
7
|
-
spec.version = '0.1.
|
|
7
|
+
spec.version = '0.1.2'
|
|
8
8
|
spec.authors = ['Roman Lehnert']
|
|
9
9
|
spec.email = ['roman.lehnert@googlemail.com']
|
|
10
10
|
|
|
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
spec.files = `git ls-files -z`.split("\x0")
|
|
24
|
+
spec.files = `git ls-files -z`.split("\x0")
|
|
25
25
|
spec.bindir = 'exe'
|
|
26
26
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
27
27
|
spec.require_paths = ['lib']
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
FactoryGirl.define do
|
|
2
|
+
factory :transaction, class: Bankster::Transaction do
|
|
3
|
+
skip_create
|
|
4
|
+
|
|
5
|
+
name 'Max Mustermann'
|
|
6
|
+
iban 'DE123'
|
|
7
|
+
bic 'ASD'
|
|
8
|
+
type :credit_tansfer
|
|
9
|
+
purpose 'my purpose'
|
|
10
|
+
amount Money.new(123, "EUR")
|
|
11
|
+
booking_date Date.today
|
|
12
|
+
valutation_date Date.today
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
factory :transaction_api_response, class: Hash do
|
|
16
|
+
skip_create
|
|
17
|
+
|
|
18
|
+
name 'Max Mustermann'
|
|
19
|
+
type 'credit_transfer'
|
|
20
|
+
purpose 'my purpose'
|
|
21
|
+
iban 'DE123'
|
|
22
|
+
bic 'ASD'
|
|
23
|
+
amount {{ 'cents' => "123", 'currency' => "EUR" }}
|
|
24
|
+
booking_date Date.today.iso8601
|
|
25
|
+
valutation_date Date.today.iso8601
|
|
26
|
+
|
|
27
|
+
initialize_with { attributes.stringify_keys }
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'transaction_api_response factory' do
|
|
4
|
+
subject { FactoryGirl.create(:transaction_api_response) }
|
|
5
|
+
|
|
6
|
+
it 'validates against the json schema' do
|
|
7
|
+
expect(subject.to_json).to match_json_schema(:transaction_schema, strict: true)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Bankster::Representers::TransactionRepresenter do
|
|
4
|
+
describe 'creation of json from multiple transactions' do
|
|
5
|
+
let(:transaction_1) { FactoryGirl.build(:transaction, amount: Money.eur(123)) }
|
|
6
|
+
let(:transaction_2) { FactoryGirl.build(:transaction, amount: Money.eur(123)) }
|
|
7
|
+
let(:transactions) { [transaction_1, transaction_2] }
|
|
8
|
+
subject { described_class.for_collection.prepare(transactions) }
|
|
9
|
+
|
|
10
|
+
it 'creates json that matches the schema' do
|
|
11
|
+
expect(subject.to_json).to match_json_schema(:transactions_schema, strict: true)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe 'creation of multiple bankster transactions from a collection api response' do
|
|
16
|
+
let(:transaction_1) { FactoryGirl.build(:transaction, amount: Money.eur(123)) }
|
|
17
|
+
let(:transaction_2) { FactoryGirl.build(:transaction, amount: Money.eur(345)) }
|
|
18
|
+
let(:transactions) { [transaction_1, transaction_2] }
|
|
19
|
+
let(:api_response) { described_class.for_collection.prepare(transactions).to_json }
|
|
20
|
+
|
|
21
|
+
it 'parses collections and returns transaction objects' do
|
|
22
|
+
parsed_transactions = [].extend(Bankster::Representers::TransactionRepresenter.for_collection).from_json(api_response)
|
|
23
|
+
expect(parsed_transactions.first).to be_a(Bankster::Transaction)
|
|
24
|
+
expect(parsed_transactions.last).to be_a(Bankster::Transaction)
|
|
25
|
+
expect(parsed_transactions.count).to eql(2)
|
|
26
|
+
expect(parsed_transactions.first.amount).to eql(transaction_1.amount)
|
|
27
|
+
expect(parsed_transactions.last.amount).to eql(transaction_2.amount)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe 'creation of json from a Bankster::Transaction' do
|
|
32
|
+
let(:transaction) { FactoryGirl.build(:transaction, amount: Money.eur(123)) }
|
|
33
|
+
subject { transaction.extend(described_class) }
|
|
34
|
+
|
|
35
|
+
it 'creates json that matches the schema' do
|
|
36
|
+
expect(subject.to_json).to match_json_schema(:transaction_schema, strict: true)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe 'attributes' do
|
|
40
|
+
let(:json) { JSON.parse(subject.to_json) }
|
|
41
|
+
|
|
42
|
+
it 'represents the amount as a hash with cents and currency' do
|
|
43
|
+
expect(json['amount']['cents']).to eql("123")
|
|
44
|
+
expect(json['amount']['currency']).to eql("EUR")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'represents the purpose' do
|
|
48
|
+
expect(json['purpose']).to eql(transaction.purpose)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'represents the iban' do
|
|
52
|
+
expect(json['iban']).to eql(transaction.iban)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'represents the bic' do
|
|
56
|
+
expect(json['bic']).to eql(transaction.bic)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'represents the name' do
|
|
60
|
+
expect(json['name']).to eql(transaction.name)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'represents the type' do
|
|
64
|
+
expect(json['type']).to eql(transaction.type.to_s)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'represents the booking date as a iso 8609 string' do
|
|
68
|
+
expect(json['booking_date']).to eql(Date.today.iso8601)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'represents the valutation date as a iso 8609 string' do
|
|
72
|
+
expect(json['valutation_date']).to eql(Date.today.iso8601)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe 'creation of a Bankster::Transaction from json' do
|
|
78
|
+
let(:api_response) { FactoryGirl.build(:transaction_api_response) }
|
|
79
|
+
let(:subject) { Bankster::Transaction.new.extend(described_class) }
|
|
80
|
+
|
|
81
|
+
before do
|
|
82
|
+
subject.from_json(api_response.to_json)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
describe 'attributes' do
|
|
86
|
+
it 'converts the money hash with cents and currency to a Money object' do
|
|
87
|
+
expect(subject.amount).to eql(
|
|
88
|
+
Money.new(
|
|
89
|
+
api_response['amount']['cents'],
|
|
90
|
+
api_response['amount']['currency']
|
|
91
|
+
)
|
|
92
|
+
)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it 'represents the purpose' do
|
|
96
|
+
expect(subject.purpose).to eql(api_response['purpose'])
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it 'represents the name' do
|
|
100
|
+
expect(subject.name).to eql(api_response['name'])
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it 'represents the iban' do
|
|
104
|
+
expect(subject.iban).to eql(api_response['iban'])
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it 'represents the bic' do
|
|
108
|
+
expect(subject.bic).to eql(api_response['bic'])
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'converts the type from a string to a symbol' do
|
|
112
|
+
expect(subject.type).to eql(api_response['type'].to_sym)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it 'converts the booking date from a iso 8609 string to a date object' do
|
|
116
|
+
expect(subject.booking_date).to eql(Date.parse(api_response['booking_date']))
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it 'converts the valutation date from a iso 8609 string to a date object' do
|
|
120
|
+
expect(subject.valutation_date).to eql(Date.parse(api_response['valutation_date']))
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
|
2
|
+
require 'bankster_shared'
|
|
3
|
+
require 'byebug'
|
|
4
|
+
require 'factory_girl'
|
|
5
|
+
require 'json-schema-rspec'
|
|
6
|
+
|
|
7
|
+
RSpec.configure do |config|
|
|
8
|
+
|
|
9
|
+
Dir[File.dirname(__FILE__) + '/../lib/schemas/*.json'].each do |file|
|
|
10
|
+
config.json_schemas[File.basename(file, ".json").to_sym] = file
|
|
11
|
+
end
|
|
12
|
+
config.include JSON::SchemaMatchers
|
|
13
|
+
|
|
14
|
+
config.include FactoryGirl::Syntax::Methods
|
|
15
|
+
FactoryGirl.find_definitions
|
|
16
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bankster-transaction
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Roman Lehnert
|
|
@@ -174,6 +174,10 @@ files:
|
|
|
174
174
|
- lib/representers/transactions_representer.rb
|
|
175
175
|
- lib/schemas/transaction_schema.json
|
|
176
176
|
- lib/schemas/transactions_schema.json
|
|
177
|
+
- spec/factories/transactions_factory.rb
|
|
178
|
+
- spec/factories/transactions_factory_spec.rb
|
|
179
|
+
- spec/representers/transaction_representer_spec.rb
|
|
180
|
+
- spec/spec_helper.rb
|
|
177
181
|
homepage: http://bankster.io/
|
|
178
182
|
licenses:
|
|
179
183
|
- MIT
|