tsubaiso-sdk 1.2.1 → 1.2.8

Sign up to get free protection for your applications and to get access to all the features.
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