fio_api 0.0.5 → 0.0.6
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 +4 -4
- data/.rubocop.yml +26 -0
- data/.travis.yml +7 -2
- data/Gemfile +9 -12
- data/README.rdoc +8 -3
- data/Rakefile +11 -13
- data/VERSION +1 -1
- data/fio_api.gemspec +57 -33
- data/lib/base/account.rb +2 -2
- data/lib/base/deserializers/import_response_deserializer.rb +51 -0
- data/lib/base/deserializers/list_response_deserializer.rb +47 -36
- data/lib/base/list.rb +9 -14
- data/lib/base/payment.rb +40 -0
- data/lib/base/payments/domestic.rb +13 -0
- data/lib/base/payments/status.rb +8 -0
- data/lib/base/payments/xml/item.rb +41 -0
- data/lib/base/payments/xml/root.rb +30 -0
- data/lib/base/request.rb +4 -54
- data/lib/base/transaction.rb +2 -2
- data/lib/base.rb +2 -6
- data/lib/fio_api.rb +16 -10
- data/lib/utils/hash.rb +2 -2
- data/spec/base/account_spec.rb +4 -8
- data/spec/base/deserializers/import_response_deserializer_spec.rb +41 -0
- data/spec/base/deserializers/list_response_deserializer_spec.rb +48 -59
- data/spec/base/list_spec.rb +36 -23
- data/spec/base/payment_spec.rb +38 -0
- data/spec/base/payments/domestic_spec.rb +14 -0
- data/spec/base/payments/status_spec.rb +13 -0
- data/spec/base/payments/xml/root_spec.rb +63 -0
- data/spec/base/request_spec.rb +2 -49
- data/spec/base/transaction_spec.rb +5 -9
- data/spec/fio_api_spec.rb +4 -7
- data/spec/fixtures/vcr_cassettes/by_date_range.yml +47 -0
- data/spec/fixtures/vcr_cassettes/by_listing_id_and_year.yml +49 -0
- data/spec/fixtures/vcr_cassettes/from_last_fetch.yml +44 -0
- data/spec/fixtures/vcr_cassettes/import.yml +53 -0
- data/spec/fixtures/vcr_cassettes/invalid_import.yml +51 -0
- data/spec/fixtures/vcr_cassettes/set_last_fetch_date.yml +44 -0
- data/spec/fixtures/vcr_cassettes/set_last_fetch_id.yml +47 -0
- data/spec/spec_helper.rb +7 -2
- data/spec/utils/hash_spec.rb +10 -15
- metadata +70 -24
- data/lib/base/deserializer.rb +0 -19
- data/spec/base/deserializer_spec.rb +0 -12
@@ -0,0 +1,30 @@
|
|
1
|
+
module FioAPI
|
2
|
+
module Payments
|
3
|
+
module Xml
|
4
|
+
class Root
|
5
|
+
XSI_OPTIONS = {
|
6
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
|
7
|
+
'xsi:noNamespaceSchemaLocation' => 'http://www.fio.cz/schema/importIB.xsd'
|
8
|
+
}.freeze
|
9
|
+
|
10
|
+
attr_reader :payments
|
11
|
+
|
12
|
+
def initialize(payments)
|
13
|
+
@payments = payments
|
14
|
+
end
|
15
|
+
|
16
|
+
def build
|
17
|
+
@build ||= Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
18
|
+
xml.Import(XSI_OPTIONS) do
|
19
|
+
xml.Orders do
|
20
|
+
payments.each do |payment|
|
21
|
+
::FioAPI::Payments::Xml::Item.new(xml, payment).build
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end.to_xml
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/base/request.rb
CHANGED
@@ -2,70 +2,20 @@ require 'httparty'
|
|
2
2
|
|
3
3
|
module FioAPI
|
4
4
|
class Request < FioAPI::Base
|
5
|
-
|
6
|
-
BASE_URI = "https://www.fio.cz/ib_api/rest/"
|
5
|
+
include HTTParty
|
7
6
|
|
8
|
-
|
7
|
+
base_uri 'https://www.fio.cz/ib_api/rest/'
|
9
8
|
|
9
|
+
class << self
|
10
10
|
# Reader for token
|
11
11
|
def token
|
12
12
|
@@token
|
13
13
|
end
|
14
14
|
|
15
15
|
# Setter for token
|
16
|
-
def token=
|
16
|
+
def token=(token)
|
17
17
|
@@token = token
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
21
|
-
attr_accessor :uri, :response_json, :deserializer
|
22
|
-
|
23
|
-
# Make request to uri
|
24
|
-
#
|
25
|
-
# == Returns:
|
26
|
-
# Request instance
|
27
|
-
#
|
28
|
-
def fetch
|
29
|
-
self.response_json = HTTParty.get(uri, format: :json)
|
30
|
-
self
|
31
|
-
end
|
32
|
-
|
33
|
-
# Set uri for request
|
34
|
-
#
|
35
|
-
# == Parameters:
|
36
|
-
# args::
|
37
|
-
# Parts of uri
|
38
|
-
#
|
39
|
-
# == Returns:
|
40
|
-
# Uri string
|
41
|
-
#
|
42
|
-
def set_uri(*args)
|
43
|
-
self.uri = construct_uri(*args)
|
44
|
-
end
|
45
|
-
|
46
|
-
# Reader for request response
|
47
|
-
#
|
48
|
-
# == Returns:
|
49
|
-
# Response as a JSON or a deserialilzed response. Depends if the deserializer is set
|
50
|
-
#
|
51
|
-
def response
|
52
|
-
@response ||= deserializer ? deserializer.deserialize(response_json) : response_json
|
53
|
-
end
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
# Uri constructor
|
58
|
-
#
|
59
|
-
# == Parameters:
|
60
|
-
# args::
|
61
|
-
# Parts of uri
|
62
|
-
#
|
63
|
-
# == Returns:
|
64
|
-
# Uri string
|
65
|
-
#
|
66
|
-
def construct_uri(*args)
|
67
|
-
url_parts = args.map(&:to_s).join("/")
|
68
|
-
URI::join(BASE_URI, url_parts).to_s
|
69
|
-
end
|
70
20
|
end
|
71
21
|
end
|
data/lib/base/transaction.rb
CHANGED
@@ -2,7 +2,7 @@ module FioAPI
|
|
2
2
|
# == Transaction class representing the Transaction entity
|
3
3
|
class Transaction < FioAPI::Base
|
4
4
|
attr_accessor :transaction_id, :date, :amount, :currency, :account, :account_name, :bank_code,
|
5
|
-
|
6
|
-
|
5
|
+
:bank_name, :ks, :vs, :ss, :user_identification, :message_for_recipient, :transaction_type,
|
6
|
+
:sender, :detail_info, :comment, :bic, :action_id
|
7
7
|
end
|
8
8
|
end
|
data/lib/base.rb
CHANGED
@@ -9,12 +9,8 @@ module FioAPI
|
|
9
9
|
# == Returns:
|
10
10
|
# New object with prefilled attributes
|
11
11
|
#
|
12
|
-
def initialize(*
|
13
|
-
if
|
14
|
-
h.first.each { |k,v| send("#{k}=",v) }
|
15
|
-
end
|
12
|
+
def initialize(*hash)
|
13
|
+
hash.first.each { |k, v| send("#{k}=", v) } if hash.length == 1 && hash.first.is_a?(Hash)
|
16
14
|
end
|
17
|
-
|
18
15
|
end
|
19
16
|
end
|
20
|
-
|
data/lib/fio_api.rb
CHANGED
@@ -1,16 +1,23 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
1
|
+
require 'utils/hash'
|
2
|
+
require 'tempfile'
|
3
|
+
require 'base'
|
4
|
+
require 'base/account'
|
5
|
+
require 'base/transaction'
|
6
|
+
require 'base/list'
|
7
|
+
require 'base/request'
|
8
|
+
require 'base/payment'
|
9
|
+
require 'base/payments/status'
|
10
|
+
require 'base/payments/domestic'
|
11
|
+
require 'base/payments/xml/root'
|
12
|
+
require 'base/payments/xml/item'
|
13
|
+
require 'base/deserializers/list_response_deserializer'
|
14
|
+
require 'base/deserializers/import_response_deserializer'
|
8
15
|
|
9
16
|
module FioAPI
|
10
17
|
# == Returns:
|
11
18
|
# A string with current version of gem
|
12
19
|
#
|
13
|
-
VERSION =
|
20
|
+
VERSION = '0.0.6'.freeze
|
14
21
|
|
15
22
|
# Set API token for requests
|
16
23
|
#
|
@@ -21,7 +28,7 @@ module FioAPI
|
|
21
28
|
# == Returns:
|
22
29
|
# Token
|
23
30
|
#
|
24
|
-
def self.token=
|
31
|
+
def self.token=(token)
|
25
32
|
FioAPI::Request.token = token
|
26
33
|
end
|
27
34
|
|
@@ -34,4 +41,3 @@ module FioAPI
|
|
34
41
|
FioAPI::Request.token
|
35
42
|
end
|
36
43
|
end
|
37
|
-
|
data/lib/utils/hash.rb
CHANGED
@@ -10,13 +10,13 @@ class Hash
|
|
10
10
|
#
|
11
11
|
def try_path(*args)
|
12
12
|
value = self
|
13
|
-
args.each{ |arg_name| value = value.nil? ? nil : value[arg_name] }
|
13
|
+
args.each { |arg_name| value = value.nil? ? nil : value[arg_name] }
|
14
14
|
value
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
class NilClass
|
19
|
-
def try_path(*
|
19
|
+
def try_path(*_args)
|
20
20
|
nil
|
21
21
|
end
|
22
22
|
end
|
data/spec/base/account_spec.rb
CHANGED
@@ -1,17 +1,13 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative '../spec_helper'
|
2
2
|
|
3
3
|
describe FioAPI::Account do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
[:account_id, :bank_id, :currency, :iban,:bic,:opening_balance,:closing_balance,
|
8
|
-
:date_start, :date_end, :year_list, :id_list, :id_from, :id_to, :id_last_download].each do |attr|
|
4
|
+
describe 'instance attributes' do
|
5
|
+
%i[account_id bank_id currency iban bic opening_balance closing_balance
|
6
|
+
date_start date_end year_list id_list id_from id_to id_last_download].each do |attr|
|
9
7
|
|
10
8
|
it "should respond to #{attr}" do
|
11
9
|
expect(FioAPI::Account.new).to respond_to(attr)
|
12
10
|
end
|
13
|
-
|
14
11
|
end
|
15
12
|
end
|
16
|
-
|
17
13
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
describe FioAPI::ImportResponseDeserializer do
|
4
|
+
describe 'instance attributes' do
|
5
|
+
it 'should respond to status' do
|
6
|
+
expect(FioAPI::ImportResponseDeserializer.new('{}', '')).to respond_to(:status)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'deserialization' do
|
11
|
+
before(:each) do
|
12
|
+
@deserializer = FioAPI::ImportResponseDeserializer.new('{}', '')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'deserialize valid payment status' do
|
16
|
+
status_json = {
|
17
|
+
'errorCode' => '0', 'idInstruction' => '153935923', 'status' => 'ok', 'sums' => {
|
18
|
+
'sum' => { 'sumCredit' => '0', 'sumDebet' => '100.0', 'id' => 'CZK' }
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
result = { error_code: 0, id_instruction: 153_935_923, sum_credit: 0.0, sum_debet: 100.0, error_message: '' }
|
23
|
+
deserialized = @deserializer.send(:deserialize_import, status_json)
|
24
|
+
result.each do |attr_name, value|
|
25
|
+
expect(deserialized.send(attr_name)).to eq(value)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'deserialize invalid payment status' do
|
30
|
+
status_json = {
|
31
|
+
'errorCode' => '11', 'status' => 'error', 'message' => 'Error message'
|
32
|
+
}
|
33
|
+
|
34
|
+
result = { error_code: 11, id_instruction: 0, sum_credit: 0.0, sum_debet: 0.0, error_message: 'Error message' }
|
35
|
+
deserialized = @deserializer.send(:deserialize_import, status_json)
|
36
|
+
result.each do |attr_name, value|
|
37
|
+
expect(deserialized.send(attr_name)).to eq(value)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,92 +1,81 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative '../../spec_helper'
|
2
2
|
|
3
3
|
describe FioAPI::ListResponseDeserializer do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
it "should respond to account" do
|
8
|
-
expect(FioAPI::ListResponseDeserializer.new).to respond_to(:account)
|
4
|
+
describe 'instance attributes' do
|
5
|
+
it 'should respond to account' do
|
6
|
+
expect(FioAPI::ListResponseDeserializer.new('{}', '')).to respond_to(:account)
|
9
7
|
end
|
10
8
|
|
11
|
-
it
|
12
|
-
expect(FioAPI::ListResponseDeserializer.new).to respond_to(:transactions)
|
9
|
+
it 'should respond to transactions' do
|
10
|
+
expect(FioAPI::ListResponseDeserializer.new('{}', '')).to respond_to(:transactions)
|
13
11
|
end
|
14
|
-
|
15
12
|
end
|
16
13
|
|
17
|
-
describe
|
14
|
+
describe 'deserialization' do
|
18
15
|
before(:each) do
|
19
|
-
@deserializer = FioAPI::ListResponseDeserializer.new
|
16
|
+
@deserializer = FioAPI::ListResponseDeserializer.new('{}', '')
|
20
17
|
end
|
21
18
|
|
22
|
-
it
|
23
|
-
account_json = {
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
}
|
19
|
+
it 'deserialize account info' do
|
20
|
+
account_json = { 'accountId' => '26457567988', 'bankId' => '2010', 'currency' => 'CZK',
|
21
|
+
'iban' => 'CZ03345356456702600147988', 'bic' => 'FIOBCZPPXXX', 'openingBalance' => 0.0, 'closingBalance' => 11_669.96,
|
22
|
+
'dateStart' => '2011-01-01+0100', 'dateEnd' => '2012-12-26+0100', 'yearList' => 2012, 'idList' => 353_434,
|
23
|
+
'idFrom' => 1_145_645_683_284, 'idTo' => 1_167_566_706, 'idLastDownload' => 234_234_234_234 }
|
28
24
|
|
29
|
-
result = { :
|
30
|
-
|
31
|
-
|
32
|
-
|
25
|
+
result = { account_id: '26457567988', bank_id: '2010', currency: 'CZK', iban: 'CZ03345356456702600147988',
|
26
|
+
bic: 'FIOBCZPPXXX', opening_balance: 0.0, closing_balance: 11_669.96, date_start: '2011-01-01+0100',
|
27
|
+
date_end: '2012-12-26+0100', year_list: 2012, id_list: 353_434, id_from: 1_145_645_683_284,
|
28
|
+
id_to: 1_167_566_706, id_last_download: 234_234_234_234 }
|
33
29
|
|
34
|
-
deserialized =
|
30
|
+
deserialized = @deserializer.send(:deserialize_account, account_json)
|
35
31
|
|
36
|
-
result.each do |attr_name,value|
|
32
|
+
result.each do |attr_name, value|
|
37
33
|
expect(deserialized.send(attr_name)).to eq(value)
|
38
34
|
end
|
39
35
|
end
|
40
36
|
|
41
|
-
|
42
|
-
|
43
|
-
it "deserialize transaction info" do
|
37
|
+
it 'deserialize transaction info' do
|
44
38
|
transaction_json = {
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
39
|
+
'column22' => { 'value' => 1_148_734_530, 'name' => 'ID pohybu', 'id' => 22 },
|
40
|
+
'column0' => { 'value' => 1_340_661_600_000, 'name' => 'Datum', 'id' => 0 },
|
41
|
+
'column1' => { 'value' => 1, 'name' => 'Objem', 'id' => 1 },
|
42
|
+
'column14' => { 'value' => 'CZK', 'name' => 'Mena', 'id' => 14 },
|
43
|
+
'column2' => { 'value' => '2900233333', 'name' => 'Protiucet', 'id' => 2 },
|
44
|
+
'column10' => { 'value' => 'Pavel, Novak', 'name' => 'Nazev protiuctu', 'id' => 10 },
|
45
|
+
'column3' => { 'value' => '2010', 'name' => 'Kod banky', 'id' => 3 },
|
46
|
+
'column12' => { 'value' => 'Fio banka, a.s.', 'name' => 'Nazev banky', 'id' => 12 },
|
47
|
+
'column4' => { 'value' => '0558', 'name' => 'KS', 'id' => 4 },
|
48
|
+
'column5' => { 'value' => '0558345345345', 'name' => 'VS', 'id' => 5 },
|
49
|
+
'column6' => { 'value' => '055234', 'name' => 'SS', 'id' => 6 },
|
50
|
+
'column7' => { 'value' => 'Prikaz', 'name' => 'Identifikace uzivatelem', 'id' => 7 },
|
51
|
+
'column16' => { 'value' => 'Prikaz pro tomase', 'name' => 'Zprava pro prijemce', 'id' => 16 },
|
52
|
+
'column8' => { 'value' => 'Prijem prevodem uvnitr banky', 'name' => 'Typ', 'id' => 8 },
|
53
|
+
'column9' => { 'value' => 'Robin Bortlik', 'name' => 'Odesilatel', 'id' => 9 },
|
54
|
+
'column18' => { 'value' => 'Detail info', 'name' => 'Detailni informace', 'id' => 18 },
|
55
|
+
'column25' => { 'value' => 'Text', 'name' => 'Komentar', 'id' => 25 },
|
56
|
+
'column26' => { 'value' => '345790', 'name' => 'BIC', 'id' => 26 },
|
57
|
+
'column17' => { 'value' => 2_105_685_816, 'name' => 'ID pokynu', 'id' => 17 }
|
64
58
|
}
|
65
59
|
|
66
|
-
result = {:
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
60
|
+
result = { date: 1_340_661_600_000, amount: 1, currency: 'CZK', account: '2900233333',
|
61
|
+
account_name: 'Pavel, Novak', bank_code: '2010', bank_name: 'Fio banka, a.s.',
|
62
|
+
ks: '0558', vs: '0558345345345', ss: '055234', user_identification: 'Prikaz',
|
63
|
+
message_for_recipient: 'Prikaz pro tomase', transaction_type: 'Prijem prevodem uvnitr banky',
|
64
|
+
sender: 'Robin Bortlik', detail_info: 'Detail info', comment: 'Text', bic: '345790',
|
65
|
+
action_id: 2_105_685_816 }
|
72
66
|
|
73
67
|
deserialized = @deserializer.send(:deserialize_transactions, [transaction_json])[0]
|
74
68
|
|
75
|
-
result.each do |attr_name,value|
|
69
|
+
result.each do |attr_name, value|
|
76
70
|
expect(deserialized.send(attr_name)).to eq(value)
|
77
71
|
end
|
78
72
|
end
|
79
73
|
|
80
|
-
it
|
81
|
-
@deserializer.deserialize(
|
74
|
+
it 'should return deserializer object with account and transactions' do
|
75
|
+
@deserializer.deserialize('accountStatement' => { 'transactionList' => { 'transaction' => [{}] } })
|
82
76
|
expect(@deserializer.account.class).to eq FioAPI::Account
|
83
77
|
expect(@deserializer.transactions.class).to eq Array
|
84
78
|
expect(@deserializer.transactions.first.class).to eq FioAPI::Transaction
|
85
79
|
end
|
86
80
|
end
|
87
81
|
end
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
data/spec/base/list_spec.rb
CHANGED
@@ -1,45 +1,58 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative '../spec_helper'
|
2
2
|
|
3
3
|
describe FioAPI::List do
|
4
4
|
before(:each) do
|
5
5
|
@list = FioAPI::List.new
|
6
|
-
allow(HTTParty).to receive(:get) { {response: "response"} }
|
7
6
|
end
|
8
7
|
|
9
|
-
it
|
10
|
-
date_from = Date.new(2011,1,1)
|
11
|
-
date_to = Date.new(2012,11,25)
|
8
|
+
it 'should set request with uri for date range' do
|
9
|
+
date_from = Date.new(2011, 1, 1)
|
10
|
+
date_to = Date.new(2012, 11, 25)
|
12
11
|
url = "https://www.fio.cz/ib_api/rest/periods/#{FioAPI.token}/#{date_from}/#{date_to}/transactions.json"
|
13
|
-
|
12
|
+
VCR.use_cassette 'by_date_range', erb: true do
|
13
|
+
list = @list.by_date_range(date_from, date_to)
|
14
|
+
expect(list.request.uri.to_s).to eq url
|
15
|
+
expect(list.transactions.length).to eq 1
|
16
|
+
end
|
14
17
|
end
|
15
18
|
|
16
|
-
it
|
19
|
+
it 'should set request with uri for listing_id and year' do
|
17
20
|
year = 2012
|
18
|
-
id =
|
21
|
+
id = '12345'
|
19
22
|
url = "https://www.fio.cz/ib_api/rest/by-id/#{FioAPI.token}/#{year}/#{id}/transactions.json"
|
20
|
-
|
23
|
+
VCR.use_cassette 'by_listing_id_and_year', erb: true do
|
24
|
+
list = @list.by_listing_id_and_year(id, year)
|
25
|
+
expect(list.request.uri.to_s).to eq url
|
26
|
+
expect(list.transactions.length).to eq 0
|
27
|
+
end
|
21
28
|
end
|
22
29
|
|
23
|
-
it
|
30
|
+
it 'should set request with uri from last fetch' do
|
24
31
|
url = "https://www.fio.cz/ib_api/rest/last/#{FioAPI.token}/transactions.json"
|
25
|
-
|
32
|
+
VCR.use_cassette 'from_last_fetch', erb: true do
|
33
|
+
list = @list.from_last_fetch
|
34
|
+
expect(list.request.uri.to_s).to eq url
|
35
|
+
expect(list.transactions.length).to eq 0
|
36
|
+
end
|
26
37
|
end
|
27
38
|
|
28
|
-
it
|
29
|
-
id =
|
39
|
+
it 'should set request with uri to set last fetch id' do
|
40
|
+
id = '12345'
|
30
41
|
url = "https://www.fio.cz/ib_api/rest/set-last-id/#{FioAPI.token}/#{id}/"
|
31
|
-
|
42
|
+
VCR.use_cassette 'set_last_fetch_id', erb: true do
|
43
|
+
list = @list.set_last_fetch_id(id)
|
44
|
+
expect(list.request.uri.to_s).to eq url
|
45
|
+
expect(list.transactions.length).to eq 0
|
46
|
+
end
|
32
47
|
end
|
33
48
|
|
34
|
-
it
|
35
|
-
date = Date.new(2012,11,25)
|
49
|
+
it 'should set request with uri to set last date' do
|
50
|
+
date = Date.new(2012, 11, 25)
|
36
51
|
url = "https://www.fio.cz/ib_api/rest/set-last-date/#{FioAPI.token}/#{date}/"
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
expect(@list.request).not_to be_nil
|
43
|
-
expect(@list.response).not_to be_nil
|
52
|
+
VCR.use_cassette 'set_last_fetch_date', erb: true do
|
53
|
+
list = @list.set_last_fetch_date(date)
|
54
|
+
expect(list.request.uri.to_s).to eq url
|
55
|
+
expect(list.transactions.length).to eq 0
|
56
|
+
end
|
44
57
|
end
|
45
58
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe FioAPI::Payment do
|
4
|
+
before(:each) do
|
5
|
+
@payment = FioAPI::Payments::Domestic.new(account_from: '11111111', currency: 'CZK', amount: amount, account_to: '22222222', bank_code: '3030', date: '2018-06-15')
|
6
|
+
@service = FioAPI::Payment.new [@payment]
|
7
|
+
end
|
8
|
+
|
9
|
+
context 'payment with valid data' do
|
10
|
+
let(:amount) { 100.0 }
|
11
|
+
it 'should make request' do
|
12
|
+
VCR.use_cassette 'import', erb: true do
|
13
|
+
expect(@service.import).to be_a HTTParty::Response
|
14
|
+
expect(@service.request).to be_a HTTParty::Response
|
15
|
+
expect(@service.response).to be_a FioAPI::ImportResponseDeserializer
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should build path' do
|
20
|
+
expect(@service.path).to eq "/import/?token=#{FioAPI.token}&type=xml"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'payment with invalid data' do
|
25
|
+
let(:amount) { '' }
|
26
|
+
it 'should make request' do
|
27
|
+
VCR.use_cassette 'invalid_import', erb: true do
|
28
|
+
expect(@service.import).to be_a HTTParty::Response
|
29
|
+
expect(@service.request).to be_a HTTParty::Response
|
30
|
+
expect(@service.response).to be_a FioAPI::ImportResponseDeserializer
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should build path' do
|
35
|
+
expect(@service.path).to eq "/import/?token=#{FioAPI.token}&type=xml"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
describe FioAPI::Payments::Domestic do
|
4
|
+
describe 'instance attributes' do
|
5
|
+
%i[
|
6
|
+
account_from currency amount account_to bank_code ks vs ss
|
7
|
+
date message_for_recipient comment
|
8
|
+
].each do |attr|
|
9
|
+
it "should respond to #{attr}" do
|
10
|
+
expect(FioAPI::Payments::Domestic.new).to respond_to(attr)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
describe FioAPI::Payments::Status do
|
4
|
+
describe 'instance attributes' do
|
5
|
+
%i[
|
6
|
+
error_code id_instruction error_message sum_credit sum_debet
|
7
|
+
].each do |attr|
|
8
|
+
it "should respond to #{attr}" do
|
9
|
+
expect(FioAPI::Payments::Status.new).to respond_to(attr)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
|
3
|
+
describe FioAPI::Payments::Xml::Root do
|
4
|
+
let(:payments) { [] }
|
5
|
+
let(:service) { FioAPI::Payments::Xml::Root.new(payments) }
|
6
|
+
|
7
|
+
context 'build xml without payments' do
|
8
|
+
it 'returns empty xml' do
|
9
|
+
expect(service.build).to eq <<-XML
|
10
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
11
|
+
<Import xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.fio.cz/schema/importIB.xsd">
|
12
|
+
<Orders/>
|
13
|
+
</Import>
|
14
|
+
XML
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'build xml with payments' do
|
19
|
+
let(:payments) do
|
20
|
+
[
|
21
|
+
FioAPI::Payments::Domestic.new(account_from: '11111111', currency: 'CZK', amount: 123.1, account_to: '22222222', bank_code: '3030', date: '2018-06-15'),
|
22
|
+
FioAPI::Payments::Domestic.new
|
23
|
+
]
|
24
|
+
end
|
25
|
+
it 'returns empty xml' do
|
26
|
+
expect(service.build).to eq <<-XML
|
27
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
28
|
+
<Import xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.fio.cz/schema/importIB.xsd">
|
29
|
+
<Orders>
|
30
|
+
<DomesticTransaction>
|
31
|
+
<accountFrom>11111111</accountFrom>
|
32
|
+
<currency>CZK</currency>
|
33
|
+
<amount>123.1</amount>
|
34
|
+
<accountTo>22222222</accountTo>
|
35
|
+
<bankCode>3030</bankCode>
|
36
|
+
<ks/>
|
37
|
+
<vs/>
|
38
|
+
<ss/>
|
39
|
+
<date>2018-06-15</date>
|
40
|
+
<messageForRecipient/>
|
41
|
+
<comment/>
|
42
|
+
<paymentType>431001</paymentType>
|
43
|
+
</DomesticTransaction>
|
44
|
+
<DomesticTransaction>
|
45
|
+
<accountFrom/>
|
46
|
+
<currency/>
|
47
|
+
<amount/>
|
48
|
+
<accountTo/>
|
49
|
+
<bankCode/>
|
50
|
+
<ks/>
|
51
|
+
<vs/>
|
52
|
+
<ss/>
|
53
|
+
<date/>
|
54
|
+
<messageForRecipient/>
|
55
|
+
<comment/>
|
56
|
+
<paymentType>431001</paymentType>
|
57
|
+
</DomesticTransaction>
|
58
|
+
</Orders>
|
59
|
+
</Import>
|
60
|
+
XML
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|