Skip to content

Commit c6c1fc0

Browse files
committed
WIP - id_field method
1 parent ecd3b70 commit c6c1fc0

File tree

5 files changed

+147
-33
lines changed

5 files changed

+147
-33
lines changed

lib/blnk/balance.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ module Blnk
44
# Balance representation
55
class Balance < Resourceable
66
def self.resource_name = :balances
7+
def self.id_field = :balance_id
78

8-
def persisted? = !balance_id.nil?
99
def body_data = { ledger_id:, currency: }
1010
end
1111
end

lib/blnk/ledger.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ module Blnk
44
# Ledger representation
55
class Ledger < Resourceable
66
def self.resource_name = :ledgers
7+
def self.id_field = :ledger_id
78

8-
def persisted? = !ledger_id.nil?
99
def body_data = { name:, meta_data: }
1010
end
1111
end

lib/blnk/resourceable.rb

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,47 +7,50 @@ class SearchResult < OpenStruct; end
77

88
include Client
99

10-
def self.resource_name = raise NotImplementedError
10+
class << self
11+
def resource_name = raise NotImplementedError
12+
def id_field = :id
1113

12-
def self.find(id)
13-
response = new.get_request(path: "/#{resource_name}/#{id}")
14-
return response unless response.status.success?
14+
def find(id)
15+
response = new.get_request(path: "/#{resource_name}/#{id}")
16+
return response unless response.status.success?
1517

16-
new response.parse
17-
end
18+
new response.parse
19+
end
1820

19-
def self.all
20-
response = new.get_request(path: "/#{resource_name}")
21-
return response unless response.status.success?
21+
def all
22+
response = new.get_request(path: "/#{resource_name}")
23+
return response unless response.status.success?
2224

23-
response.parse.map do |r|
24-
new r
25+
response.parse.map do |r|
26+
new r
27+
end
2528
end
26-
end
2729

28-
def self.create(*)
29-
response = new.post_request(
30-
path: "/#{resource_name}",
31-
body: new(*).body_data
32-
)
33-
return response unless response.status.success?
30+
def create(**args)
31+
response = new.post_request(
32+
path: "/#{resource_name}",
33+
body: args
34+
)
35+
return response unless response.status.success?
3436

35-
new(response.parse)
36-
end
37+
new(response.parse)
38+
end
3739

38-
def self.search(**args)
39-
response = new.post_request(
40-
path: "/search/#{resource_name}",
41-
body: args
42-
)
43-
return response unless response.status.success?
40+
def search(**args)
41+
response = new.post_request(
42+
path: "/search/#{resource_name}",
43+
body: args
44+
)
45+
return response unless response.status.success?
4446

45-
sr = SearchResult.new(response.parse)
46-
sr.resource_name = resource_name
47-
sr
47+
sr = SearchResult.new(response.parse)
48+
sr.resource_name = resource_name
49+
sr
50+
end
4851
end
4952

50-
def persisted? = raise NotImplementedError
53+
def persisted? = table[self.class.id_field]
5154
def body_data = raise NotImplementedError
5255
end
5356
end

lib/blnk/transaction.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ module Blnk
44
# Transaction representation
55
class Transaction < Resourceable
66
def self.resource_name = :transactions
7+
def self.id_field = :transaction_id
78

8-
def persisted? = !transaction_id.nil?
99
def body_data = {}
1010
end
1111
end

test/blnk/test_transaction.rb

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# frozen_string_literal: true
2+
3+
require 'test_helper'
4+
5+
def stub_find_transaction_request_with_error
6+
stub_request(:get, %r{/transactions/(.*)})
7+
.to_return_json(body: { error: 'balance with ID \'transaction_id\' not found' }, status: 400)
8+
end
9+
10+
def transaction_response_body # rubocop:disable Metrics/MethodLength
11+
{
12+
precise_amount: 7500,
13+
amount: 75,
14+
rate: 0,
15+
precision: 100,
16+
transaction_id: 'txn_bb8e13c5-1d16-4e94-add7-efd377fd551a',
17+
parent_transaction: '',
18+
source: 'bln_216507cb-2fb1-4238-a184-805c455f8fe2',
19+
destination: 'bln_469f93bc-40e9-4e0e-b6ab-d11c3638c15d',
20+
reference: 'ref_005',
21+
currency: 'BRLX',
22+
description: 'For fees',
23+
status: 'QUEUED',
24+
hash: '74a2fecf01e73a31c005ce3bd840d285edce87e3bdb3e0ed99e0af124a6165f8',
25+
allow_overdraft: true,
26+
inflight: false,
27+
created_at: '2024-06-27T20:23:17.737289826Z',
28+
scheduled_for: '0001-01-01T00:00:00Z',
29+
inflight_expiry_date: '0001-01-01T00:00:00Z'
30+
}
31+
end
32+
33+
def stub_find_transaction_request_with_success
34+
stub_request(:get, %r{/transactions/(.*)})
35+
.to_return_json(body: transaction_response_body, status: 200)
36+
end
37+
38+
def stub_create_transaction_request_with_success
39+
stub_request(:post, %r{/transactions})
40+
.to_return_json(body: transaction_response_body, status: 200)
41+
end
42+
43+
def stub_create_transaction_request_with_error
44+
stub_request(:post, %r{/transactions})
45+
.to_return_json(body: { error: 'missing transaction_id' }, status: 400)
46+
end
47+
48+
# NOTE: This route does not exists, at least for now
49+
def stub_all_transaction_request_with_error
50+
stub_request(:get, %r{/transactions})
51+
.to_return_json(body: { error: 'internal_server_error' }, status: 500)
52+
end
53+
54+
def stub_all_transaction_request_with_success
55+
stub_request(:get, %r{/transactions})
56+
.to_return_json(body: [transaction_response_body], status: 200)
57+
end
58+
59+
class TestTransaction < Minitest::Test
60+
def test_that_transaction_not_found
61+
stub_find_transaction_request_with_error
62+
find = Blnk::Transaction.find 'transaction_id'
63+
64+
assert find.status.bad_request?
65+
end
66+
67+
def test_that_transaction_find_success
68+
stub_find_transaction_request_with_success
69+
find = Blnk::Transaction.find 'transaction_id'
70+
71+
assert find.is_a?(Blnk::Transaction)
72+
assert find.transaction_id.eql?(transaction_response_body[:transaction_id])
73+
end
74+
75+
# NOTE: /transactions route does not exist, at moment
76+
# def test_that_transaction_all_error
77+
# stub_all_transaction_request_with_error
78+
79+
# all = Blnk::Transaction.all
80+
81+
# assert !all.status.success?
82+
# end
83+
84+
# def test_that_transaction_all_success
85+
# stub_all_transaction_request_with_success
86+
87+
# all = Blnk::Transaction.all
88+
89+
# assert all.is_a?(Array)
90+
# assert all.first.is_a?(Blnk::Transaction)
91+
# assert all.first.transaction_id.eql?(transaction_response_body[:transaction_id])
92+
# end
93+
94+
def test_that_transaction_create_errosr
95+
stub_create_transaction_request_with_error
96+
97+
create = Blnk::Transaction.create
98+
99+
assert create.status.bad_request?
100+
end
101+
102+
def test_that_transaction_create_success
103+
stub_create_transaction_request_with_success
104+
105+
create = Blnk::Transaction.create(ledger_id: 'ledger_id', currency: 'USD')
106+
107+
assert create.is_a?(Blnk::Transaction)
108+
assert create.transaction_id.eql?(transaction_response_body[:transaction_id])
109+
assert create.name.eql?(transaction_response_body[:name])
110+
end
111+
end

0 commit comments

Comments
 (0)