tsubaiso-sdk 1.2.1 → 1.2.8

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.
Files changed (39) hide show
  1. checksums.yaml +5 -5
  2. data/Rakefile +4 -3
  3. data/lib/tsubaiso_api.rb +67 -0
  4. data/lib/tsubaiso_sdk.rb +1511 -384
  5. data/sample.rb +120 -33
  6. data/test/stubbings/stub_register.rb +196 -0
  7. data/test/test_tsubaiso_api.rb +149 -0
  8. data/test/tsubaiso_sdk/common_setup_and_teardown.rb +23 -0
  9. data/test/tsubaiso_sdk/test_ap_reason_masters.rb +26 -0
  10. data/test/tsubaiso_sdk/test_api_history.rb +27 -0
  11. data/test/tsubaiso_sdk/test_ar_reason_masters.rb +26 -0
  12. data/test/tsubaiso_sdk/test_bank_account.rb +34 -0
  13. data/test/tsubaiso_sdk/test_bank_account_master.rb +119 -0
  14. data/test/tsubaiso_sdk/test_bank_account_transaction.rb +61 -0
  15. data/test/tsubaiso_sdk/test_bank_reason_master.rb +90 -0
  16. data/test/tsubaiso_sdk/test_bonus.rb +26 -0
  17. data/test/tsubaiso_sdk/test_corporate_master.rb +27 -0
  18. data/test/tsubaiso_sdk/test_customer.rb +71 -0
  19. data/test/tsubaiso_sdk/test_dept.rb +66 -0
  20. data/test/tsubaiso_sdk/test_fixed_assets.rb +18 -0
  21. data/test/tsubaiso_sdk/test_journal.rb +53 -0
  22. data/test/tsubaiso_sdk/test_journal_distribution.rb +29 -0
  23. data/test/tsubaiso_sdk/test_manual_journal.rb +84 -0
  24. data/test/tsubaiso_sdk/test_payrolles.rb +26 -0
  25. data/test/tsubaiso_sdk/test_petty_cash_reason_master.rb +72 -0
  26. data/test/tsubaiso_sdk/test_physical_inventory_master.rb +84 -0
  27. data/test/tsubaiso_sdk/test_purchase.rb +120 -0
  28. data/test/tsubaiso_sdk/test_reimbursement_reason_master.rb +27 -0
  29. data/test/tsubaiso_sdk/test_reimbursements.rb +90 -0
  30. data/test/tsubaiso_sdk/test_reimbursements_transactions.rb +75 -0
  31. data/test/tsubaiso_sdk/test_sale.rb +125 -0
  32. data/test/tsubaiso_sdk/test_scheduled_dates.rb +16 -0
  33. data/test/tsubaiso_sdk/test_staff.rb +26 -0
  34. data/test/tsubaiso_sdk/test_staff_data.rb +71 -0
  35. data/test/tsubaiso_sdk/test_staff_datum_master.rb +37 -0
  36. data/test/tsubaiso_sdk/test_tag.rb +53 -0
  37. data/test/tsubaiso_sdk/test_tax_master.rb +25 -0
  38. metadata +37 -6
  39. data/test/test_tsubaiso_sdk.rb +0 -807
data/sample.rb CHANGED
@@ -1,42 +1,40 @@
1
-
2
- # -*- coding: utf-8 -*-
3
1
  $LOAD_PATH << 'lib/'
4
2
  require 'tsubaiso_sdk'
5
3
 
6
4
  class Sample
7
5
  def initialize(sample)
8
6
  @sample = sample
9
- api = TsubaisoSDK.new({ base_url: ENV["SDK_BASE_URL"], access_token: ENV["SDK_ACCESS_TOKEN"] })
7
+ api = TsubaisoSDK.new({ base_url: ENV['SDK_BASE_URL'], access_token: ENV['SDK_ACCESS_TOKEN'] })
10
8
  @sample.each do | line |
11
- if line[:action] == "List"
12
- if line[:module] == "Sales"
9
+ if line[:action] == 'List'
10
+ if line[:module] == 'Sales'
13
11
  res = api.list_sales(line[:year], line[:month])
14
12
  puts res[:json]
15
13
  end
16
- if line[:module] == "Purchases"
14
+ if line[:module] == 'Purchases'
17
15
  res = api.list_purchases(line[:year], line[:month])
18
16
  puts res[:json]
19
17
  end
20
18
  end
21
- if line[:action] == "Show"
22
- if line[:module] == "Sales"
19
+ if line[:action] == 'Show'
20
+ if line[:module] == 'Sales'
23
21
  res = api.show_sale(line[:voucher])
24
22
  puts res[:json]
25
23
  end
26
- if line[:module] == "Purchases"
24
+ if line[:module] == 'Purchases'
27
25
  res = api.show_purchase(line[:voucher])
28
26
  puts res[:json]
29
27
  end
30
28
  end
31
- if line[:action] == "Create"
32
- if line[:module] == "Sales"
29
+ if line[:action] == 'Create'
30
+ if line[:module] == 'Sales'
33
31
  res = api.create_sale(line)
34
32
  if res[:status].to_i == 422
35
33
  puts res[:json]
36
34
  exit
37
35
  end
38
36
  end
39
- if line[:module] == "Purchases"
37
+ if line[:module] == 'Purchases'
40
38
  res = api.create_purchase(line)
41
39
  if res[:status].to_i == 422
42
40
  puts res[:json]
@@ -44,11 +42,11 @@ class Sample
44
42
  end
45
43
  end
46
44
  end
47
- if line[:action] == "Destroy"
48
- if line[:module] == "Sales"
45
+ if line[:action] == 'Destroy'
46
+ if line[:module] == 'Sales'
49
47
  res = api.destroy_sale(line[:voucher])
50
48
  end
51
- if line[:module] == "Purchases"
49
+ if line[:module] == 'Purchases'
52
50
  res = api.destroy_purchase(line[:voucher])
53
51
  end
54
52
  end
@@ -56,21 +54,110 @@ class Sample
56
54
  end
57
55
  end
58
56
 
59
- Sample.new([
60
- { action: "Create", module: "Sales", price: 10000, year: 2015, month: 8, realization_timestamp: "2015-08-01", customer_master_code: "101", dept_code: "SETSURITSU", reason_master_code: "SALES", dc: 'd', memo: "", tax_code: 1007, scheduled_memo: "This is a scheduled memo.", scheduled_receive_timestamp: "2015-09-25" },
61
- { action: "Create", module: "Purchases", price: 5000, year: 2015, month: 8, accrual_timestamp: "2015-08-01", customer_master_code: "102", dept_code: "SETSURITSU", reason_master_code: "BUYING_IN", dc: 'c', memo: "", tax_code: 1007, port_type: 1 },
62
- { action: "Create", module: "Sales", price: 95000, year: 2015, month: 9, realization_timestamp: "2015-09-25", customer_master_code: "102", dept_code: "SETSURITSU", reason_master_code: "OTHERS_INCREASE", dc: 'd', memo: "決算会社/マーチャントの相殺", tax_code: 0 },
63
- { action: "Create", module: "Sales", price: 10000, year: 2015, month: 9, realization_timestamp: "2015-09-25", customer_master_code: "101", dept_code: "SETSURITSU", reason_master_code: "OTHERS_DECREASE", dc: 'c', memo: "決算会社/マーチャントの相殺", tax_code: 0 },
64
- { action: "Create", module: "Sales", price: 5000, year: 2015, month: 9, realization_timestamp: "2015-09-25", customer_master_code: "102", dept_code: "SETSURITSU", reason_master_code: "OTHERS_INCREASE", dc: 'c', memo: "決算会社/決済会社の相殺", tax_code: 0 },
65
- { action: "Create", module: "Purchases", price: 5000, year: 2015, month: 9, accrual_timestamp: "2015-09-25", customer_master_code: "102", dept_code: "SETSURITSU", reason_master_code: "OTHERS_DECREASE", dc: 'd', memo: "決算会社/決済会社の相殺", tax_code: 0, port_type: 1 },
66
- { action: "Create", module: "Purchases", price: 90000, year: 2015, month: 9, accrual_timestamp: "2015-09-30", customer_master_code: "101", dept_code: "SETSURITSU", reason_master_code: "OTHERS_INCREASE", dc: 'c', memo: "売掛金/未払金振替", tax_code: 0, port_type: 1 },
67
- { action: "Create", module: "Sales", price: 90000, year: 2015, month: 9, realization_timestamp: "2015-09-30", customer_master_code: "102", dept_code: "SETSURITSU", reason_master_code: "OTHERS_INCREASE", dc: 'd', memo: "売掛金/未払い金振替", tax_code: 0 },
68
- { action: "Show", module: "Sales", voucher: "AR834"},
69
- { action: "Show", module: "Purchases", voucher: "AP622"},
70
- { action: "Destroy", module: "Sales", voucher: "AR839"},
71
- { action: "Destroy", module: "Purchases", voucher: "AP625"},
72
- { action: "List", module: "Sales", year: 2015, month: 9},
73
- { action: "List", module: "Purchases", year: 2015, month: 9}
74
- ])
75
-
76
-
57
+ Sample.new([{ action: 'Create',
58
+ module: 'Sales',
59
+ price: 10_000,
60
+ year: 2015,
61
+ month: 8,
62
+ realization_timestamp: '2015-08-01',
63
+ customer_master_code: '101',
64
+ dept_code: 'SETSURITSU',
65
+ reason_master_code: 'SALES',
66
+ dc: 'd',
67
+ memo: '',
68
+ tax_code: 1007,
69
+ scheduled_memo: 'This is a scheduled memo.',
70
+ scheduled_receive_timestamp: '2015-09-25' },
71
+ { action: 'Create',
72
+ module: 'Purchases',
73
+ price: 5000,
74
+ year: 2015,
75
+ month: 8,
76
+ accrual_timestamp: '2015-08-01',
77
+ customer_master_code: '102',
78
+ dept_code: 'SETSURITSU',
79
+ reason_master_code: 'BUYING_IN',
80
+ dc: 'c',
81
+ memo: '',
82
+ tax_code: 1007,
83
+ port_type: 1 },
84
+ { action: 'Create',
85
+ module: 'Sales',
86
+ price: 95_000,
87
+ year: 2015,
88
+ month: 9,
89
+ realization_timestamp: '2015-09-25',
90
+ customer_master_code: '102',
91
+ dept_code: 'SETSURITSU',
92
+ reason_master_code: 'OTHERS_INCREASE',
93
+ dc: 'd',
94
+ memo: '決算会社/マーチャントの相殺',
95
+ tax_code: 0 },
96
+ { action: 'Create',
97
+ module: 'Sales',
98
+ price: 10_000,
99
+ year: 2015,
100
+ month: 9,
101
+ realization_timestamp: '2015-09-25',
102
+ customer_master_code: '101',
103
+ dept_code: 'SETSURITSU',
104
+ reason_master_code: 'OTHERS_DECREASE',
105
+ dc: 'c',
106
+ memo: '決算会社/マーチャントの相殺',
107
+ tax_code: 0 },
108
+ { action: 'Create',
109
+ module: 'Sales',
110
+ price: 5000,
111
+ year: 2015,
112
+ month: 9,
113
+ realization_timestamp: '2015-09-25',
114
+ customer_master_code: '102',
115
+ dept_code: 'SETSURITSU',
116
+ reason_master_code: 'OTHERS_INCREASE',
117
+ dc: 'c',
118
+ memo: '決算会社/決済会社の相殺',
119
+ tax_code: 0 },
120
+ { action: 'Create',
121
+ module: 'Purchases',
122
+ price: 5000,
123
+ year: 2015,
124
+ month: 9,
125
+ accrual_timestamp: '2015-09-25',
126
+ customer_master_code: '102',
127
+ dept_code: 'SETSURITSU',
128
+ reason_master_code: 'OTHERS_DECREASE',
129
+ dc: 'd',
130
+ memo: '決算会社/決済会社の相殺',
131
+ tax_code: 0,
132
+ port_type: 1 },
133
+ { action: 'Create',
134
+ module: 'Purchases',
135
+ price: 90_000,
136
+ year: 2015,
137
+ month: 9,
138
+ accrual_timestamp: '2015-09-30',
139
+ customer_master_code: '101',
140
+ dept_code: 'SETSURITSU',
141
+ reason_master_code: 'OTHERS_INCREASE',
142
+ dc: 'c',
143
+ memo: '売掛金/未払金振替',
144
+ tax_code: 0,
145
+ port_type: 1 },
146
+ { action: 'Create',
147
+ module: 'Sales',
148
+ price: 90_000,
149
+ year: 2015,
150
+ month: 9,
151
+ realization_timestamp: '2015-09-30',
152
+ customer_master_code: '102',
153
+ dept_code: 'SETSURITSU',
154
+ reason_master_code: 'OTHERS_INCREASE',
155
+ dc: 'd',
156
+ memo: '売掛金/未払い金振替',
157
+ tax_code: 0 },
158
+ { action: 'Show', module: 'Sales', voucher: 'AR834' },
159
+ { action: 'Show', module: 'Purchases', voucher: 'AP622' },
160
+ { action: 'Destroy', module: 'Sales', voucher: 'AR839' },
161
+ { action: 'Destroy', module: 'Purchases', voucher: 'AP625' },
162
+ { action: 'List', module: 'Sales', year: 2015, month: 9 },
163
+ { action: 'List', module: 'Purchases', year: 2015, month: 9 }])
@@ -0,0 +1,196 @@
1
+ require "json"
2
+ require 'webmock'
3
+ require 'active_support'
4
+ require_relative '../../lib/tsubaiso_sdk.rb'
5
+
6
+ include WebMock::API
7
+
8
+ class StubRegister
9
+ include TsubaisoSDK::UrlBuilder
10
+
11
+ def initialize(resource, root_url, token)
12
+ @common_request_headers = {
13
+ 'Accept'=>'*/*',
14
+ 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
15
+ 'Content-Type'=>'application/json',
16
+ 'User-Agent'=>'Ruby'
17
+ }
18
+ @root_url = root_url
19
+ @common_request_headers.merge!( {"Access-Token" => token} )
20
+ @created_records = []
21
+
22
+ stub_create(resource)
23
+ stub_destroy(resource)
24
+ stub_list(resource)
25
+ resource == 'api_histories' ? stub_index(resource) : stub_show(resource)
26
+ stub_balance(resource)
27
+ stub_update(resource)
28
+ stub_find_or_create(resource)
29
+ stub_calc(resource)
30
+ end
31
+
32
+ private
33
+
34
+ def load_json(resource, method, req_or_res = 'request')
35
+ path = "test/stubbings/fixtures/#{resource}_#{method}_#{req_or_res}.json"
36
+ return nil unless File.exist?(path)
37
+ JSON.load(File.read(path))
38
+ end
39
+
40
+ def add_attrs(record, index, resource)
41
+ return_params = record ? record.dup : {}
42
+
43
+ new_attributes = load_json(resource, 'create' ,'response')
44
+ return_params.deep_merge!(new_attributes) if new_attributes
45
+
46
+ return_params.merge!({
47
+ :id => index.to_s,
48
+ :created_at => Time.now.to_s,
49
+ :updated_at => Time.now.to_s
50
+ })
51
+
52
+ return_params['tag_list'] = record['tag_list'].split(',') if record['tag_list']&.kind_of?(String)
53
+ return_params
54
+ end
55
+
56
+ def stub_calc(resource)
57
+ return unless load_json(resource, 'calc')
58
+ stub_requests(:get, url(@root_url, resource, 'calc'), {'scheduled_date': '2019-01-10'}, load_json(resource, 'calc'))
59
+ end
60
+
61
+ def stub_balance(resource)
62
+ if load_json(resource, 'balance')
63
+ expect_param = load_json(resource, 'balance')
64
+ return_body = load_json(resource, 'balance', 'response')
65
+ stub_requests(:get, url(@root_url, resource, 'balance'), return_body, expect_param)
66
+ stub_requests(:get, url(@root_url, resource, 'balance'), return_body, expect_param.merge({customer_master_id: 101})) { |record| record['customer_master_code'] == '101'}
67
+ end
68
+ end
69
+
70
+ def stub_find_or_create(resource)
71
+ # NOTE: This stub support ar_receipts, ap_payments
72
+ if load_json(resource, 'find_or_create')
73
+ expected_param = load_json(resource, 'find_or_create')
74
+ return_body = add_attrs(expected_param, 99, resource)
75
+ stub_requests(:post, url(@root_url, resource, 'find_or_create'), return_body, expected_param)
76
+ @created_records << return_body
77
+ end
78
+ end
79
+
80
+ def stub_update(resource)
81
+ if load_json(resource, 'update')
82
+ param = load_json(resource, 'update')
83
+ stub_requests(:post, url(@root_url, resource, 'update') + '/0', @created_records[0].merge(param), param)
84
+ end
85
+ end
86
+
87
+ def stub_show(resource)
88
+ @created_records.each do |record|
89
+ stub_requests(:get, url(@root_url, resource, "show") + '/' + record[:id], record) unless resource == 'journals' || resource == 'corporate_masters'
90
+
91
+ case resource
92
+ when 'customer_masters', 'staff_datum_masters'
93
+ # NOTE: Serch by Code (support customer_master_show & staff_datum_master_show & corporate_masters)
94
+ stub_requests(:get, url(@root_url, resource, 'show'), record, { code: record['code'] })
95
+ when 'staff_data'
96
+ # NOTE: Serch by code and staff_id (support staff_data)
97
+ expected_body = {
98
+ staff_id: record['staff_id'],
99
+ code: record['code'],
100
+ time: record['start_timestamp']
101
+ }
102
+ stub_requests(:get, url(@root_url, resource, 'show'), record, expected_body)
103
+ when 'corporate_masters'
104
+ stub_requests(:get, url(@root_url, resource, 'show') + '/' + record[:id], record, { ccode: record['corporate_code'] })
105
+ stub_requests(:get, url(@root_url, resource, 'show') + '/' + record[:id], record, { ccode: nil })
106
+ stub_requests(:get, url(@root_url, resource, 'show'), record, { ccode: record['corporate_code'] })
107
+ when 'journals'
108
+ stub_requests(:get, url(@root_url, resource, 'show') + '/' + record[:id], { 'record': record })
109
+ end
110
+ end
111
+ end
112
+
113
+ def stub_requests(http_method, url, created_records, expected_body = {}, &condition)
114
+ response_body = condition ? created_records.select(&condition) : created_records
115
+
116
+ stub_request(http_method, url)
117
+ .with(
118
+ { headers: @common_request_headers }.merge({ body: expected_body.merge(format: 'json') })
119
+ )
120
+ .to_return(
121
+ { status: 200 }.merge( { body: response_body.to_json } )
122
+ )
123
+ end
124
+
125
+ def stub_index(resource)
126
+ # NOTE: for api_history
127
+ stub_requests(:get, url(@root_url, resource, 'index'), load_json(resource, 'index', 'response'))
128
+ end
129
+
130
+ def stub_list(resource)
131
+ if @created_records.size == 0
132
+ # This conditions is for modules which support only list & show.
133
+ load_json(resource,'list','response')&.each_with_index do |record, i|
134
+ @created_records << add_attrs(record, i, resource)
135
+ end
136
+ end
137
+
138
+ case resource
139
+ when 'bank_accounts'
140
+ stub_requests(:get, url(@root_url, resource, 'list', 2016, 8), @created_records)
141
+ when 'manual_journals'
142
+ stub_requests(:get, url(@root_url, resource, 'list', 2016, 4), @created_records)
143
+ when 'payrolls'
144
+ stub_requests(:get, url(@root_url, resource, 'list', 2017, 2), @created_records)
145
+ when 'ar'
146
+ stub_requests(:get, url(@root_url, resource, 'list', 2016, 8), @created_records){ |record| record['realization_timestamp'] =~ /2016-08-\d{2}/}
147
+ when 'ap_payments'
148
+ stub_requests(:get, url(@root_url, resource, 'list', 2016, 8), @created_records){ |record| record['accrual_timestamp'] =~ /2016-08-\d{2}/}
149
+ when 'staff_data'
150
+ stub_requests(:get, url(@root_url, resource, 'list'), @created_records, { staff_id: 300 })
151
+ when 'bank_account_transactions'
152
+ stub_requests(:get, url(@root_url, resource, 'list'), @created_records, { bank_account_id: 0})
153
+ when 'reimbursements'
154
+ stub_requests(:get, url(@root_url, resource, 'list'), @created_records, { year: 2016, month: 3})
155
+ when 'api_histories'
156
+ stub_requests(:get, url(@root_url, resource, 'list'), @created_records, { year: 2019, month: 12}){ |record| record['access_timestamp'] =~ /2019\/12\/\d{2}/}
157
+ when 'reimbursement_transactions'
158
+ stub_requests(:get, url(@root_url, resource, 'list'), @created_records, { id: 300 }) { |record| record['reimbursement_id'] == 300 }
159
+ when 'tags'
160
+ stub_requests(:get, url(@root_url, resource, 'list'), @created_records.group_by{ |record| record['tag_group_code'] })
161
+ when 'bonuses'
162
+ stub_requests(:get, url(@root_url, resource, 'list'), @created_records, { target_year: 2016, bonus_no: 1 })
163
+ when 'journals'
164
+ stub_requests(:get, url(@root_url, resource, 'list'), {'records': @created_records}, { 'start_date': '2019-12-01', 'finish_date': '2019-12-31'} )
165
+ stub_requests(:get, url(@root_url, resource, 'list'), {'records': @created_records}, { 'price_min': 10800, 'price_max': 10800} )
166
+ stub_requests(:get, url(@root_url, resource, 'list'), {'records': @created_records}, { 'dept_code': 'SETSURITSU' } )
167
+ else
168
+ stub_requests(:get, url(@root_url, resource, 'list'), @created_records)
169
+ end
170
+ end
171
+
172
+ def stub_destroy(resource)
173
+ @created_records.each_with_index do |record, index|
174
+ stub_request(:post, url(@root_url, resource, 'destroy') + "/" + record[:id])
175
+ .with(
176
+ headers: @common_request_headers
177
+ )
178
+ .to_return(
179
+ status: 204
180
+ )
181
+ end
182
+ end
183
+
184
+ def stub_create(resource)
185
+ load_json(resource, 'create')&.each_with_index do |record, i|
186
+ if resource == 'journal_distributions'
187
+ return_body = add_attrs({}, i, resource)
188
+ else
189
+ return_body = add_attrs(record, i, resource)
190
+ end
191
+ stub_requests(:post, url(@root_url, resource, 'create'), return_body, record)
192
+ @created_records << return_body
193
+ end
194
+ end
195
+ end
196
+
@@ -0,0 +1,149 @@
1
+ require 'minitest/autorun'
2
+ require 'time'
3
+ require './lib/tsubaiso_api'
4
+
5
+ class TsubaisoAPITest < Minitest::Test
6
+ def setup
7
+ @api = TsubaisoAPI.new({ base_url: ENV['SDK_BASE_URL'], access_token: ENV['SDK_ACCESS_TOKEN'] })
8
+
9
+ @customer_1000 = {
10
+ name: 'テスト株式会社',
11
+ name_kana: 'テストカブシキガイシャ',
12
+ code: '10000',
13
+ tax_type_for_remittance_charge: '3',
14
+ used_in_ar: 1,
15
+ used_in_ap: 1,
16
+ is_valid: 1
17
+ }
18
+
19
+ @sale_201608 = {
20
+ price_including_tax: 10_800,
21
+ realization_timestamp: '2016-08-01',
22
+ customer_master_code: '101',
23
+ dept_code: 'SETSURITSU',
24
+ reason_master_code: 'SALES',
25
+ dc: 'd',
26
+ memo: 'irfan test',
27
+ tax_code: 1007,
28
+ scheduled_memo: 'This is a scheduled memo.',
29
+ scheduled_receive_timestamp: '2016-09-25',
30
+ data_partner: { link_url: 'www.example.com/1', id_code: '1' }
31
+ }
32
+
33
+ @sale_201702 = {
34
+ price_including_tax: 10_800,
35
+ realization_timestamp: '2017-02-28',
36
+ customer_master_code: '105',
37
+ reason_master_code: 'SALES',
38
+ dc: 'd',
39
+ memo: '',
40
+ tax_code: 18,
41
+ scheduled_memo: 'This is a scheduled memo.',
42
+ scheduled_receive_timestamp: '2017-03-25',
43
+ data_partner: { link_url: 'www.example.com/8', id_code: '8' }
44
+ }
45
+
46
+ @reimbursement_1 = {
47
+ applicant: 'Matsuno',
48
+ application_term: '2016-03-01',
49
+ staff_code: 'EP2000',
50
+ memo: 'aaaaaaaa'
51
+ }
52
+
53
+ @reimbursement_tx_1 = {
54
+ transaction_timestamp: '2016-03-01',
55
+ price_value: 10_000,
56
+ dc: 'c',
57
+ reason_code: 'SUPPLIES',
58
+ brief: 'everyting going well',
59
+ memo: 'easy',
60
+ data_partner: { link_url: 'www.example.com/5', id_code: '5' }
61
+ }
62
+ end
63
+
64
+ def test_list
65
+ cm = @api.create('customer_masters', @customer_1000)
66
+ assert_equal 200, cm[:status].to_i
67
+ assert @customer_1000[:code], cm[:json]['code']
68
+
69
+ list_customers = @api.list('customer_masters')
70
+ assert_equal 200, list_customers[:status].to_i
71
+
72
+ assert(list_customers[:json]&.any? { |x| x['code'] == @customer_1000[:code] })
73
+ ensure
74
+ @api.destroy('customer_masters', id: cm[:json]['id']) if cm[:json]['id']
75
+ end
76
+
77
+ def test_show
78
+ ar = @api.create('ar_receipts', @sale_201608)
79
+ assert 200, ar[:status].to_i
80
+ assert @sale_201608[:customer_master_code], ar[:json]['customer_master_code']
81
+
82
+ show_ar = @api.show('ar_receipts', id: ar[:json]['id'])
83
+ assert successful?(show_ar[:status])
84
+ assert_equal show_ar[:json], ar[:json]
85
+ ensure
86
+ @api.destroy('ar_receipts', id: ar[:json]['id']) if ar[:json]['id']
87
+ end
88
+
89
+ def test_create_and_destroy
90
+ ar = @api.create('ar_receipts', @sale_201608)
91
+ assert successful?(ar[:status])
92
+ assert @sale_201608[:customer_master_code], ar[:json]['customer_master_code']
93
+
94
+ cm = @api.create('customer_masters', @customer_1000)
95
+ assert successful?(cm[:status])
96
+ assert @customer_1000[:code], cm[:json]['code']
97
+
98
+ reim = @api.create('reimbursements', @reimbursement_1)
99
+ assert successful?(reim[:status])
100
+ assert @reimbursement_1[:staff_code], reim[:json]['staff_code']
101
+
102
+ reim_tx = @api.create('reimbursement_transactions', @reimbursement_tx_1)
103
+ assert successful?(reim[:status])
104
+ assert @reimbursement_tx_1[:reason_code], reim_tx[:json]['reason_code']
105
+ ensure
106
+ @api.destroy('ar_receipts', id: ar[:json]['id']) if ar[:json]['id']
107
+ @api.destroy('customer_masters', id: cm[:json]['id']) if cm[:json]['id']
108
+ @api.destroy('reimbursements', id: reim[:json]['id']) if reim[:json]['id']
109
+ @api.destroy('reimbursement_transactions', id: reim_tx[:json]['id']) if reim_tx[:json]['id']
110
+ end
111
+
112
+ def test_get_and_post
113
+ time = Time.mktime(@sale_201702[:realization_timestamp])
114
+ balance_before = @api.get('ar_receipts/balance', { year: time.year, month: time.month })
115
+ assert successful?(balance_before[:status])
116
+ assert balance_before[:json].count > 0
117
+
118
+ ar1 = @api.post('ar_receipts/create', @sale_201702)
119
+ assert successful?(ar1[:status])
120
+ assert_equal @sale_201702[:scheduled_memo], ar1[:json]['scheduled_memo']
121
+
122
+ cm = @api.post('customer_masters/create', @customer_1000)
123
+ assert successful?(cm[:status])
124
+ assert_equal @customer_1000[:code], cm[:json]['code']
125
+
126
+ balance_after = @api.get('ar_receipts/balance', { year: time.year, month: time.month })
127
+ assert successful?(balance_after[:status])
128
+ assert balance_after[:json].count > 0
129
+ ensure
130
+ @api.destroy('ar_receipts', id: ar1[:json]['id']) if ar1[:json]['id']
131
+ @api.destroy('customer_masters', id: cm[:json]['id']) if cm[:json]['id']
132
+ end
133
+
134
+ def test_update
135
+ cm = @api.create('customer_masters', @customer_1000)
136
+ cm_updated = @api.update('customer_masters', { id: cm[:json]['id'], name: 'TEST_NEW_UPDATED' })
137
+ assert successful?(cm_updated[:status])
138
+ assert cm_updated[:json]['name'] == 'TEST_NEW_UPDATED'
139
+ assert cm_updated[:json]['id'] == cm[:json]['id']
140
+ ensure
141
+ @api.destroy('customer_masters', id: cm[:json]['id']) if cm[:json]['id']
142
+ end
143
+
144
+ private
145
+
146
+ def successful?(status)
147
+ status.to_i == 200
148
+ end
149
+ end