business-central 1.0.1 → 1.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.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +58 -15
  3. data/lib/business_central.rb +47 -2
  4. data/lib/business_central/client.rb +82 -39
  5. data/lib/business_central/exceptions.rb +30 -10
  6. data/lib/business_central/object/account.rb +4 -12
  7. data/lib/business_central/object/aged_account_payable.rb +4 -12
  8. data/lib/business_central/object/aged_account_receivable.rb +4 -12
  9. data/lib/business_central/object/argument_helper.rb +22 -0
  10. data/lib/business_central/object/attachment.rb +30 -0
  11. data/lib/business_central/object/balance_sheet.rb +4 -12
  12. data/lib/business_central/object/base.rb +100 -49
  13. data/lib/business_central/object/cash_flow_statement.rb +4 -12
  14. data/lib/business_central/object/company.rb +9 -2
  15. data/lib/business_central/object/company_information.rb +7 -15
  16. data/lib/business_central/object/country_region.rb +26 -0
  17. data/lib/business_central/object/currency.rb +29 -0
  18. data/lib/business_central/object/customer.rb +34 -0
  19. data/lib/business_central/object/customer_financial_detail.rb +13 -0
  20. data/lib/business_central/object/customer_payment.rb +43 -0
  21. data/lib/business_central/object/customer_payment_journal.rb +25 -0
  22. data/lib/business_central/object/customer_sale.rb +13 -0
  23. data/lib/business_central/object/default_dimension.rb +51 -0
  24. data/lib/business_central/object/dimension.rb +20 -0
  25. data/lib/business_central/object/dimension_line.rb +37 -0
  26. data/lib/business_central/object/dimension_value.rb +28 -0
  27. data/lib/business_central/object/employee.rb +21 -0
  28. data/lib/business_central/object/filter_query.rb +18 -0
  29. data/lib/business_central/object/general_ledger_entry.rb +13 -0
  30. data/lib/business_central/object/income_statement.rb +13 -0
  31. data/lib/business_central/object/irs1099_code.rb +16 -0
  32. data/lib/business_central/object/item.rb +16 -19
  33. data/lib/business_central/object/item_category.rb +16 -0
  34. data/lib/business_central/object/journal.rb +29 -0
  35. data/lib/business_central/object/journal_line.rb +48 -0
  36. data/lib/business_central/object/object_helper.rb +49 -0
  37. data/lib/business_central/object/payment_method.rb +16 -0
  38. data/lib/business_central/object/payment_term.rb +16 -0
  39. data/lib/business_central/object/picture.rb +53 -0
  40. data/lib/business_central/object/purchase_invoice.rb +8 -16
  41. data/lib/business_central/object/purchase_invoice_line.rb +14 -18
  42. data/lib/business_central/object/request.rb +61 -50
  43. data/lib/business_central/object/response.rb +31 -23
  44. data/lib/business_central/object/retained_earning_statement.rb +13 -0
  45. data/lib/business_central/object/sales_credit_memo.rb +20 -0
  46. data/lib/business_central/object/sales_credit_memo_line.rb +30 -0
  47. data/lib/business_central/object/sales_invoice.rb +62 -0
  48. data/lib/business_central/object/sales_invoice_line.rb +30 -0
  49. data/lib/business_central/object/sales_order.rb +20 -0
  50. data/lib/business_central/object/sales_order_line.rb +30 -0
  51. data/lib/business_central/object/sales_quote.rb +20 -0
  52. data/lib/business_central/object/sales_quote_line.rb +30 -0
  53. data/lib/business_central/object/shipment_method.rb +16 -0
  54. data/lib/business_central/object/subscription.rb +16 -0
  55. data/lib/business_central/object/tax_area.rb +16 -0
  56. data/lib/business_central/object/tax_group.rb +16 -0
  57. data/lib/business_central/object/time_registration_entry.rb +16 -0
  58. data/lib/business_central/object/trial_balance.rb +13 -0
  59. data/lib/business_central/object/units_of_measure.rb +16 -0
  60. data/lib/business_central/object/url_builder.rb +59 -0
  61. data/lib/business_central/object/url_helper.rb +44 -0
  62. data/lib/business_central/object/validation.rb +10 -7
  63. data/lib/business_central/object/vendor.rb +12 -15
  64. data/lib/business_central/object/vendor_purchase.rb +13 -0
  65. data/lib/business_central/version.rb +4 -2
  66. data/lib/business_central/web_service.rb +78 -0
  67. data/lib/core_ext/string.rb +18 -12
  68. data/test/business_central/client_test.rb +49 -7
  69. data/test/business_central/object/account_test.rb +6 -5
  70. data/test/business_central/object/aged_account_payable_test.rb +6 -5
  71. data/test/business_central/object/aged_account_receivable_test.rb +6 -5
  72. data/test/business_central/object/attachment_test.rb +117 -0
  73. data/test/business_central/object/balance_sheet_test.rb +6 -5
  74. data/test/business_central/object/base_test.rb +41 -0
  75. data/test/business_central/object/cash_flow_statement_test.rb +6 -5
  76. data/test/business_central/object/company_information_test.rb +9 -10
  77. data/test/business_central/object/company_test.rb +6 -5
  78. data/test/business_central/object/country_region_test.rb +129 -0
  79. data/test/business_central/object/currency_test.rb +150 -0
  80. data/test/business_central/object/customer_financial_detail_test.rb +68 -0
  81. data/test/business_central/object/customer_payment_journal_test.rb +134 -0
  82. data/test/business_central/object/customer_payment_test.rb +141 -0
  83. data/test/business_central/object/customer_sale_test.rb +72 -0
  84. data/test/business_central/object/customer_test.rb +168 -0
  85. data/test/business_central/object/default_dimension_test.rb +170 -0
  86. data/test/business_central/object/dimension_line_test.rb +165 -0
  87. data/test/business_central/object/dimension_test.rb +65 -0
  88. data/test/business_central/object/dimension_value_test.rb +68 -0
  89. data/test/business_central/object/employee_test.rb +141 -0
  90. data/test/business_central/object/filter_query_test.rb +36 -0
  91. data/test/business_central/object/general_ledger_entry_test.rb +82 -0
  92. data/test/business_central/object/income_statement_test.rb +82 -0
  93. data/test/business_central/object/irs1099_code_test.rb +124 -0
  94. data/test/business_central/object/item_category_test.rb +122 -0
  95. data/test/business_central/object/item_test.rb +16 -17
  96. data/test/business_central/object/journal_line_test.rb +152 -0
  97. data/test/business_central/object/journal_test.rb +144 -0
  98. data/test/business_central/object/payment_method_test.rb +134 -0
  99. data/test/business_central/object/payment_term_test.rb +134 -0
  100. data/test/business_central/object/picture_test.rb +74 -0
  101. data/test/business_central/object/purchase_invoice_line_test.rb +15 -15
  102. data/test/business_central/object/purchase_invoice_test.rb +15 -15
  103. data/test/business_central/object/request_test.rb +75 -12
  104. data/test/business_central/object/response_test.rb +34 -9
  105. data/test/business_central/object/retained_earning_statement_test.rb +52 -0
  106. data/test/business_central/object/sales_credit_memo_line_test.rb +134 -0
  107. data/test/business_central/object/sales_credit_memo_test.rb +146 -0
  108. data/test/business_central/object/sales_invoice_line_test.rb +164 -0
  109. data/test/business_central/object/sales_invoice_test.rb +156 -0
  110. data/test/business_central/object/sales_order_line_test.rb +134 -0
  111. data/test/business_central/object/sales_order_test.rb +146 -0
  112. data/test/business_central/object/sales_quote_line_test.rb +134 -0
  113. data/test/business_central/object/sales_quote_test.rb +146 -0
  114. data/test/business_central/object/shipment_method_test.rb +133 -0
  115. data/test/business_central/object/subscription_test.rb +126 -0
  116. data/test/business_central/object/tax_area_test.rb +126 -0
  117. data/test/business_central/object/tax_group_test.rb +126 -0
  118. data/test/business_central/object/time_registration_entry_test.rb +126 -0
  119. data/test/business_central/object/trial_balance_test.rb +82 -0
  120. data/test/business_central/object/units_of_measure_test.rb +126 -0
  121. data/test/business_central/object/validation_test.rb +5 -4
  122. data/test/business_central/object/vendor_purchase_test.rb +82 -0
  123. data/test/business_central/object/vendor_test.rb +16 -16
  124. data/test/business_central/web_service_test.rb +100 -0
  125. data/test/business_central_test.rb +3 -1
  126. data/test/test_helper.rb +16 -6
  127. metadata +188 -37
  128. data/lib/business_central/object/helper.rb +0 -15
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+ # rake test TEST=test/business_central/object/general_ledger_entry_test.rb
5
+
6
+ class BusinessCentral::Object::GeneralLedgerEntryTest < Minitest::Test
7
+ def setup
8
+ @company_id = '123456'
9
+ @client = BusinessCentral::Client.new
10
+ @general_ledger_entry = @client.general_ledger_entry(company_id: @company_id)
11
+ end
12
+
13
+ def test_find_all
14
+ stub_request(:get, /generalLedgerEntries/)
15
+ .to_return(
16
+ status: 200,
17
+ body: {
18
+ 'value': [
19
+ {
20
+ id: 1,
21
+ number: '1009'
22
+ }
23
+ ]
24
+ }.to_json
25
+ )
26
+
27
+ response = @general_ledger_entry.find_all
28
+ assert_equal response.first[:number], '1009'
29
+ end
30
+
31
+ def test_find_by_id
32
+ test_id = '09876'
33
+ stub_request(:get, /generalLedgerEntries\(#{test_id}\)/)
34
+ .to_return(
35
+ status: 200,
36
+ body: {
37
+ id: test_id,
38
+ number: '1010'
39
+ }.to_json
40
+ )
41
+
42
+ response = @general_ledger_entry.find_by_id(test_id)
43
+ assert_equal response[:number], '1010'
44
+ end
45
+
46
+ def test_where
47
+ test_filter = "number eq '1020'"
48
+ stub_request(:get, /generalLedgerEntries\?\$filter=#{test_filter}/)
49
+ .to_return(
50
+ status: 200,
51
+ body: {
52
+ 'value': [
53
+ {
54
+ id: '345',
55
+ number: '1011'
56
+ }
57
+ ]
58
+ }.to_json
59
+ )
60
+
61
+ response = @general_ledger_entry.where(test_filter)
62
+ assert_equal response.first[:number], '1011'
63
+ end
64
+
65
+ def test_create
66
+ assert_raises BusinessCentral::NoSupportedMethod do
67
+ @general_ledger_entry.create({})
68
+ end
69
+ end
70
+
71
+ def test_update
72
+ assert_raises BusinessCentral::NoSupportedMethod do
73
+ @general_ledger_entry.update('123', {})
74
+ end
75
+ end
76
+
77
+ def test_delete
78
+ assert_raises BusinessCentral::NoSupportedMethod do
79
+ @general_ledger_entry.destroy('123')
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+ # rake test TEST=test/business_central/object/income_statement_test.rb
5
+
6
+ class BusinessCentral::Object::IncomeStatementTest < Minitest::Test
7
+ def setup
8
+ @company_id = '123456'
9
+ @client = BusinessCentral::Client.new
10
+ @income_statement = @client.income_statement(company_id: @company_id)
11
+ end
12
+
13
+ def test_find_all
14
+ stub_request(:get, /incomeStatement/)
15
+ .to_return(
16
+ status: 200,
17
+ body: {
18
+ 'value': [
19
+ {
20
+ id: 1,
21
+ lineNumber: '1009'
22
+ }
23
+ ]
24
+ }.to_json
25
+ )
26
+
27
+ response = @income_statement.find_all
28
+ assert_equal response.first[:line_number], '1009'
29
+ end
30
+
31
+ def test_find_by_id
32
+ test_id = '09876'
33
+ stub_request(:get, /incomeStatement\(#{test_id}\)/)
34
+ .to_return(
35
+ status: 200,
36
+ body: {
37
+ id: test_id,
38
+ lineNumber: '1010'
39
+ }.to_json
40
+ )
41
+
42
+ response = @income_statement.find_by_id(test_id)
43
+ assert_equal response[:line_number], '1010'
44
+ end
45
+
46
+ def test_where
47
+ test_filter = "number eq '1020'"
48
+ stub_request(:get, /incomeStatement\?\$filter=#{test_filter}/)
49
+ .to_return(
50
+ status: 200,
51
+ body: {
52
+ 'value': [
53
+ {
54
+ id: '345',
55
+ lineNumber: '1011'
56
+ }
57
+ ]
58
+ }.to_json
59
+ )
60
+
61
+ response = @income_statement.where(test_filter)
62
+ assert_equal response.first[:line_number], '1011'
63
+ end
64
+
65
+ def test_create
66
+ assert_raises BusinessCentral::NoSupportedMethod do
67
+ @income_statement.create({})
68
+ end
69
+ end
70
+
71
+ def test_update
72
+ assert_raises BusinessCentral::NoSupportedMethod do
73
+ @income_statement.update('123', {})
74
+ end
75
+ end
76
+
77
+ def test_delete
78
+ assert_raises BusinessCentral::NoSupportedMethod do
79
+ @income_statement.destroy('123')
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,124 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+ # rake test TEST=test/business_central/object/irs1099_code_test.rb
5
+
6
+ class BusinessCentral::Object::Irs1099CodeTest < Minitest::Test
7
+ def setup
8
+ @company_id = '123456'
9
+ @client = BusinessCentral::Client.new
10
+ @irs1099_code = @client.irs1099_code(company_id: @company_id)
11
+ end
12
+
13
+ def test_find_all
14
+ stub_request(:get, /irs1099Codes/)
15
+ .to_return(
16
+ status: 200,
17
+ body: {
18
+ 'value': [
19
+ {
20
+ id: 1,
21
+ displayName: 'code1'
22
+ }
23
+ ]
24
+ }.to_json
25
+ )
26
+
27
+ response = @irs1099_code.find_all
28
+ assert_equal response.first[:display_name], 'code1'
29
+ end
30
+
31
+ def test_find_by_id
32
+ test_id = '2'
33
+ stub_request(:get, /irs1099Codes\(#{test_id}\)/)
34
+ .to_return(
35
+ status: 200,
36
+ body: {
37
+ id: test_id,
38
+ displayName: 'code2'
39
+ }.to_json
40
+ )
41
+
42
+ response = @irs1099_code.find_by_id(test_id)
43
+ assert_equal response[:display_name], 'code2'
44
+ end
45
+
46
+ def test_where
47
+ test_filter = "displayName eq 'customer3'"
48
+ stub_request(:get, /irs1099Codes\?\$filter=#{test_filter}/)
49
+ .to_return(
50
+ status: 200,
51
+ body: {
52
+ 'value': [
53
+ {
54
+ id: 3,
55
+ displayName: 'code3'
56
+ }
57
+ ]
58
+ }.to_json
59
+ )
60
+
61
+ response = @irs1099_code.where(test_filter)
62
+ assert_equal response.first[:display_name], 'code3'
63
+ end
64
+
65
+ def test_create
66
+ stub_request(:post, /irs1099Codes/)
67
+ .to_return(
68
+ status: 200,
69
+ body: {
70
+ displayName: 'code4'
71
+ }.to_json
72
+ )
73
+
74
+ response = @irs1099_code.create(
75
+ display_name: 'code4'
76
+ )
77
+ assert_equal response[:display_name], 'code4'
78
+ end
79
+
80
+ def test_update
81
+ test_id = '2'
82
+ stub_request(:get, /irs1099Codes\(#{test_id}\)/)
83
+ .to_return(
84
+ status: 200,
85
+ body: {
86
+ etag: '3333',
87
+ id: test_id,
88
+ displayName: 'code5'
89
+ }.to_json
90
+ )
91
+
92
+ stub_request(:patch, /irs1099Codes\(#{test_id}\)/)
93
+ .to_return(
94
+ status: 200,
95
+ body: {
96
+ etag: '4444',
97
+ displayName: 'code6'
98
+ }.to_json
99
+ )
100
+
101
+ response = @irs1099_code.update(
102
+ test_id,
103
+ display_name: 'code6'
104
+ )
105
+ assert_equal response[:display_name], 'code6'
106
+ end
107
+
108
+ def test_delete
109
+ test_id = '33333'
110
+ stub_request(:get, /irs1099Codes\(#{test_id}\)/)
111
+ .to_return(
112
+ status: 200,
113
+ body: {
114
+ etag: '5555',
115
+ displayName: 'code7'
116
+ }.to_json
117
+ )
118
+
119
+ stub_request(:delete, /irs1099Codes\(#{test_id}\)/)
120
+ .to_return(status: 204)
121
+
122
+ assert @irs1099_code.destroy(test_id)
123
+ end
124
+ end
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+ # rake test TEST=test/business_central/object/item_category_test.rb
5
+
6
+ class BusinessCentral::Object::ItemCategoryTest < Minitest::Test
7
+ def setup
8
+ @company_id = '123456'
9
+ @client = BusinessCentral::Client.new
10
+ @item_category = @client.item_category(company_id: @company_id)
11
+ end
12
+
13
+ def test_find_all
14
+ stub_request(:get, /itemCategories/)
15
+ .to_return(
16
+ status: 200,
17
+ body: {
18
+ 'value': [
19
+ {
20
+ code: '123',
21
+ displayName: 'item_category1'
22
+ }
23
+ ]
24
+ }.to_json
25
+ )
26
+
27
+ response = @item_category.find_all
28
+ assert_equal response.first[:display_name], 'item_category1'
29
+ end
30
+
31
+ def test_find_by_id
32
+ test_item_category_id = '345'
33
+ stub_request(:get, /itemCategories\(#{test_item_category_id}\)/)
34
+ .to_return(
35
+ status: 200,
36
+ body: {
37
+ id: test_item_category_id,
38
+ displayName: 'item_category2'
39
+ }.to_json
40
+ )
41
+
42
+ response = @item_category.find_by_id(test_item_category_id)
43
+ assert_equal response[:display_name], 'item_category2'
44
+ end
45
+
46
+ def test_where
47
+ test_filter = "displayName eq 'item_category3'"
48
+ stub_request(:get, /itemCategories\?\$filter=#{test_filter}/)
49
+ .to_return(
50
+ status: 200,
51
+ body: {
52
+ 'value': [
53
+ {
54
+ code: '678',
55
+ displayName: 'item_category3'
56
+ }
57
+ ]
58
+ }.to_json
59
+ )
60
+
61
+ response = @item_category.where(test_filter)
62
+ assert_equal response.first[:display_name], 'item_category3'
63
+ end
64
+
65
+ def test_create
66
+ stub_request(:post, /itemCategories/)
67
+ .to_return(
68
+ status: 200,
69
+ body: {
70
+ displayName: 'item_category4'
71
+ }.to_json
72
+ )
73
+
74
+ response = @item_category.create(
75
+ display_name: 'item_category4'
76
+ )
77
+ assert_equal response[:display_name], 'item_category4'
78
+ end
79
+
80
+ def test_update
81
+ test_item_category_id = '011123'
82
+ stub_request(:get, /itemCategories\(#{test_item_category_id}\)/)
83
+ .to_return(
84
+ status: 200,
85
+ body: {
86
+ etag: '112',
87
+ displayName: 'item_category5'
88
+ }.to_json
89
+ )
90
+
91
+ stub_request(:patch, /itemCategories\(#{test_item_category_id}\)/)
92
+ .to_return(
93
+ status: 200,
94
+ body: {
95
+ displayName: 'item_category6'
96
+ }.to_json
97
+ )
98
+
99
+ response = @item_category.update(
100
+ test_item_category_id,
101
+ display_name: 'item_category6'
102
+ )
103
+ assert_equal response[:display_name], 'item_category6'
104
+ end
105
+
106
+ def test_delete
107
+ test_item_category_id = '0111245'
108
+ stub_request(:get, /itemCategories\(#{test_item_category_id}\)/)
109
+ .to_return(
110
+ status: 200,
111
+ body: {
112
+ etag: '113',
113
+ displayName: 'item_category7'
114
+ }.to_json
115
+ )
116
+
117
+ stub_request(:delete, /itemCategories\(#{test_item_category_id}\)/)
118
+ .to_return(status: 204)
119
+
120
+ assert @item_category.destroy(test_item_category_id)
121
+ end
122
+ end
@@ -1,4 +1,6 @@
1
- require "test_helper"
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
2
4
  # rake test TEST=test/business_central/object/item_test.rb
3
5
 
4
6
  class BusinessCentral::Object::ItemTest < Minitest::Test
@@ -11,14 +13,14 @@ class BusinessCentral::Object::ItemTest < Minitest::Test
11
13
  def test_find_all
12
14
  stub_request(:get, /items/)
13
15
  .to_return(
14
- status: 200,
16
+ status: 200,
15
17
  body: {
16
18
  'value': [
17
19
  {
18
20
  displayName: 'item1'
19
21
  }
20
22
  ]
21
- }.to_json,
23
+ }.to_json
22
24
  )
23
25
 
24
26
  response = @item.find_all
@@ -29,7 +31,7 @@ class BusinessCentral::Object::ItemTest < Minitest::Test
29
31
  test_item_id = '09876'
30
32
  stub_request(:get, /items\(#{test_item_id}\)/)
31
33
  .to_return(
32
- status: 200,
34
+ status: 200,
33
35
  body: {
34
36
  displayName: 'item2'
35
37
  }.to_json
@@ -43,7 +45,7 @@ class BusinessCentral::Object::ItemTest < Minitest::Test
43
45
  test_filter = "displayName eq 'item3'"
44
46
  stub_request(:get, /items\?\$filter=#{test_filter}/)
45
47
  .to_return(
46
- status: 200,
48
+ status: 200,
47
49
  body: {
48
50
  'value': [
49
51
  {
@@ -60,25 +62,24 @@ class BusinessCentral::Object::ItemTest < Minitest::Test
60
62
  def test_create
61
63
  stub_request(:post, /items/)
62
64
  .to_return(
63
- status: 200,
65
+ status: 200,
64
66
  body: {
65
67
  displayName: 'item4'
66
68
  }.to_json
67
69
  )
68
70
 
69
- response = @item.create({
71
+ response = @item.create(
70
72
  display_name: 'item4',
71
73
  type: 'Inventory'
72
- })
74
+ )
73
75
  assert_equal response[:display_name], 'item4'
74
76
  end
75
77
 
76
-
77
78
  def test_update
78
79
  test_item_id = '011123'
79
80
  stub_request(:get, /items\(#{test_item_id}\)/)
80
81
  .to_return(
81
- status: 200,
82
+ status: 200,
82
83
  body: {
83
84
  etag: '112',
84
85
  displayName: 'item5'
@@ -87,7 +88,7 @@ class BusinessCentral::Object::ItemTest < Minitest::Test
87
88
 
88
89
  stub_request(:patch, /items\(#{test_item_id}\)/)
89
90
  .to_return(
90
- status: 200,
91
+ status: 200,
91
92
  body: {
92
93
  displayName: 'item6'
93
94
  }.to_json
@@ -95,10 +96,8 @@ class BusinessCentral::Object::ItemTest < Minitest::Test
95
96
 
96
97
  response = @item.update(
97
98
  test_item_id,
98
- {
99
- display_name: 'item6',
100
- type: 'Inventory'
101
- }
99
+ display_name: 'item6',
100
+ type: 'Inventory'
102
101
  )
103
102
  assert_equal response[:display_name], 'item6'
104
103
  end
@@ -107,7 +106,7 @@ class BusinessCentral::Object::ItemTest < Minitest::Test
107
106
  test_item_id = '0111245'
108
107
  stub_request(:get, /items\(#{test_item_id}\)/)
109
108
  .to_return(
110
- status: 200,
109
+ status: 200,
111
110
  body: {
112
111
  etag: '113',
113
112
  displayName: 'item7'
@@ -119,4 +118,4 @@ class BusinessCentral::Object::ItemTest < Minitest::Test
119
118
 
120
119
  assert @item.destroy(test_item_id)
121
120
  end
122
- end
121
+ end