business-central 1.0.0

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 (32) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +120 -0
  4. data/lib/business_central.rb +22 -0
  5. data/lib/business_central/client.rb +94 -0
  6. data/lib/business_central/exceptions.rb +55 -0
  7. data/lib/business_central/object/account.rb +11 -0
  8. data/lib/business_central/object/base.rb +105 -0
  9. data/lib/business_central/object/company.rb +11 -0
  10. data/lib/business_central/object/helper.rb +15 -0
  11. data/lib/business_central/object/item.rb +50 -0
  12. data/lib/business_central/object/purchase_invoice.rb +77 -0
  13. data/lib/business_central/object/purchase_invoice_line.rb +41 -0
  14. data/lib/business_central/object/request.rb +80 -0
  15. data/lib/business_central/object/response.rb +60 -0
  16. data/lib/business_central/object/validation.rb +54 -0
  17. data/lib/business_central/object/vendor.rb +45 -0
  18. data/lib/business_central/version.rb +3 -0
  19. data/lib/core_ext/string.rb +25 -0
  20. data/test/business_central/client_test.rb +77 -0
  21. data/test/business_central/object/account_test.rb +48 -0
  22. data/test/business_central/object/company_test.rb +47 -0
  23. data/test/business_central/object/item_test.rb +128 -0
  24. data/test/business_central/object/purchase_invoice_line_test.rb +129 -0
  25. data/test/business_central/object/purchase_invoice_test.rb +125 -0
  26. data/test/business_central/object/request_test.rb +82 -0
  27. data/test/business_central/object/response_test.rb +26 -0
  28. data/test/business_central/object/validation_test.rb +61 -0
  29. data/test/business_central/object/vendor_test.rb +125 -0
  30. data/test/business_central_test.rb +7 -0
  31. data/test/test_helper.rb +11 -0
  32. metadata +190 -0
@@ -0,0 +1,82 @@
1
+ require "test_helper"
2
+ # rake test TEST=test/business_central/object/request_test.rb
3
+
4
+ class BusinessCentral::Object::RequestTest < Minitest::Test
5
+ def setup
6
+ @url = BusinessCentral::Client::DEFAULT_URL
7
+ @client = BusinessCentral::Client.new
8
+ @client.authorize_from_token(
9
+ token: '123',
10
+ refresh_token: '456',
11
+ expires_at: Time.now + 3600,
12
+ expires_in: 3600
13
+ )
14
+ end
15
+
16
+ def test_get_request
17
+ stub_request(:get, @url)
18
+ .to_return(
19
+ status: 200,
20
+ body: {
21
+ 'value': [
22
+ {
23
+ displayName: 'value1'
24
+ }
25
+ ]
26
+ }.to_json,
27
+ )
28
+
29
+ response = BusinessCentral::Object::Request.get(@client, @url)
30
+
31
+ assert_equal 'value1', response.first[:display_name]
32
+ end
33
+
34
+ def test_post_request
35
+ stub_request(:post, @url)
36
+ .to_return(
37
+ status: 200,
38
+ body: {
39
+ 'value': [
40
+ {
41
+ displayName: 'value2'
42
+ }
43
+ ]
44
+ }.to_json,
45
+ )
46
+
47
+ response = BusinessCentral::Object::Request.post(@client, @url, { display_name: 'value2' })
48
+
49
+ assert_equal 'value2', response.first[:display_name]
50
+ end
51
+
52
+ def test_patch_request
53
+ stub_request(:patch, @url)
54
+ .to_return(
55
+ status: 200,
56
+ body: {
57
+ 'value': [
58
+ {
59
+ displayName: 'value3'
60
+ }
61
+ ]
62
+ }.to_json,
63
+ )
64
+
65
+ response = BusinessCentral::Object::Request.patch(@client, @url, '1', { display_name: 'value3' })
66
+
67
+ assert_equal 'value3', response.first[:display_name]
68
+ end
69
+
70
+ def test_delete_request
71
+ stub_request(:delete, @url)
72
+ .to_return(status: 204)
73
+
74
+ assert BusinessCentral::Object::Request.delete(@client, @url, '1')
75
+ end
76
+
77
+ def test_request_convert_parameters
78
+ param = { new_key: 'value' }
79
+ request = JSON.parse(BusinessCentral::Object::Request.convert(param))
80
+ assert request.has_key?("newKey")
81
+ end
82
+ end
@@ -0,0 +1,26 @@
1
+ require "test_helper"
2
+ # rake test TEST=test/business_central/object/response_test.rb
3
+
4
+ class BusinessCentral::Object::ResponseTest < Minitest::Test
5
+ def test_process_response
6
+ params = '{"newKey": "value"}'
7
+ request = BusinessCentral::Object::Response.new(params).results
8
+ assert request.has_key?(:new_key)
9
+ end
10
+
11
+ def test_success
12
+ assert BusinessCentral::Object::Response.success?(200)
13
+ end
14
+
15
+ def test_created_success
16
+ assert BusinessCentral::Object::Response.success?(201)
17
+ end
18
+
19
+ def test_unauthorized
20
+ assert BusinessCentral::Object::Response.unauthorized?(401)
21
+ end
22
+
23
+ def test_no_response
24
+ BusinessCentral::Object::Response.new("").results
25
+ end
26
+ end
@@ -0,0 +1,61 @@
1
+ require "test_helper"
2
+ # rake test TEST=test/business_central/object/validation_test.rb
3
+
4
+ class BusinessCentral::Object::ValidationTest < Minitest::Test
5
+ def test_validation_required
6
+ validation_rules = {
7
+ name: {
8
+ required: true
9
+ }
10
+ }
11
+ object_params = {
12
+ name: ''
13
+ }
14
+ assert_raises BusinessCentral::InvalidObjectException do
15
+ BusinessCentral::Object::Validation.new(validation_rules, object_params).valid?
16
+ end
17
+ end
18
+
19
+ def test_validation_maximum_length
20
+ validation_rules = {
21
+ name: {
22
+ maximum_length: 5
23
+ }
24
+ }
25
+ object_params = {
26
+ name: '123456'
27
+ }
28
+ assert_raises BusinessCentral::InvalidObjectException do
29
+ BusinessCentral::Object::Validation.new(validation_rules, object_params).valid?
30
+ end
31
+ end
32
+
33
+ def test_validation_inclusive_value
34
+ validation_rules = {
35
+ type: {
36
+ inclusion_of: ['1', '2', '3']
37
+ }
38
+ }
39
+ object_params = {
40
+ type: '4'
41
+ }
42
+ assert_raises BusinessCentral::InvalidObjectException do
43
+ BusinessCentral::Object::Validation.new(validation_rules, object_params).valid?
44
+ end
45
+ end
46
+
47
+ def test_validation_date
48
+ validation_rules = {
49
+ date_due: {
50
+ date: true
51
+ }
52
+ }
53
+ object_params = {
54
+ date_due: ''
55
+ }
56
+ assert_raises BusinessCentral::InvalidObjectException do
57
+ BusinessCentral::Object::Validation.new(validation_rules, object_params).valid?
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,125 @@
1
+ require "test_helper"
2
+ # rake test TEST=test/business_central/object/vendor_test.rb
3
+
4
+ class BusinessCentral::Object::VendorTest < Minitest::Test
5
+ def setup
6
+ @company_id = '123456'
7
+ @client = BusinessCentral::Client.new
8
+ @client.authorize_from_token(
9
+ token: '123',
10
+ refresh_token: '456',
11
+ expires_at: Time.now + 3600,
12
+ expires_in: 3600
13
+ )
14
+ @vendor = @client.vendor(company_id: @company_id)
15
+ end
16
+
17
+ def test_find_all
18
+ stub_request(:get, /\/vendors/)
19
+ .to_return(
20
+ status: 200,
21
+ body: {
22
+ 'value': [
23
+ {
24
+ displayName: 'vendor1'
25
+ }
26
+ ]
27
+ }.to_json,
28
+ )
29
+
30
+ response = @vendor.find_all
31
+ assert_equal response.first[:display_name], 'vendor1'
32
+ end
33
+
34
+ def test_find_by_id
35
+ test_vendor_id = '09876'
36
+ stub_request(:get, /vendors\(#{test_vendor_id}\)/)
37
+ .to_return(
38
+ status: 200,
39
+ body: {
40
+ displayName: 'vendor2'
41
+ }.to_json
42
+ )
43
+
44
+ response = @vendor.find_by_id(test_vendor_id)
45
+ assert_equal response[:display_name], 'vendor2'
46
+ end
47
+
48
+ def test_where
49
+ test_filter = "displayName eq 'vendor3'"
50
+ stub_request(:get, /vendors\?\$filter=#{test_filter}/)
51
+ .to_return(
52
+ status: 200,
53
+ body: {
54
+ 'value': [
55
+ {
56
+ displayName: 'vendor3'
57
+ }
58
+ ]
59
+ }.to_json
60
+ )
61
+
62
+ response = @vendor.where(test_filter)
63
+ assert_equal response.first[:display_name], 'vendor3'
64
+ end
65
+
66
+ def test_create
67
+ stub_request(:post, /vendors/)
68
+ .to_return(
69
+ status: 200,
70
+ body: {
71
+ displayName: 'vendor4'
72
+ }.to_json
73
+ )
74
+
75
+ response = @vendor.create({
76
+ display_name: 'vendor4'
77
+ })
78
+ assert_equal response[:display_name], 'vendor4'
79
+ end
80
+
81
+ def test_update
82
+ test_vendor_id = '011123'
83
+ stub_request(:get, /vendors\(#{test_vendor_id}\)/)
84
+ .to_return(
85
+ status: 200,
86
+ body: {
87
+ etag: '112',
88
+ displayName: 'vendor5'
89
+ }.to_json
90
+ )
91
+
92
+ stub_request(:patch, /vendors\(#{test_vendor_id}\)/)
93
+ .to_return(
94
+ status: 200,
95
+ body: {
96
+ displayName: 'vendor6'
97
+ }.to_json
98
+ )
99
+
100
+ response = @vendor.update(
101
+ test_vendor_id,
102
+ {
103
+ display_name: 'vendor6'
104
+ }
105
+ )
106
+ assert_equal response[:display_name], 'vendor6'
107
+ end
108
+
109
+ def test_delete
110
+ test_vendor_id = '0111245'
111
+ stub_request(:get, /vendors\(#{test_vendor_id}\)/)
112
+ .to_return(
113
+ status: 200,
114
+ body: {
115
+ etag: '113',
116
+ displayName: 'vendor7'
117
+ }.to_json
118
+ )
119
+
120
+ stub_request(:delete, /vendors\(#{test_vendor_id}\)/)
121
+ .to_return(status: 204)
122
+
123
+ assert @vendor.destroy(test_vendor_id)
124
+ end
125
+ end
@@ -0,0 +1,7 @@
1
+ require "test_helper"
2
+
3
+ class BusinessCentralTest < Minitest::Test
4
+ def test_version_number_exists
5
+ refute_nil BusinessCentral::VERSION
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
2
+ require "business_central"
3
+
4
+ require "minitest/autorun"
5
+ require "minitest/pride"
6
+ require "minitest/mock"
7
+
8
+ require "byebug"
9
+ require 'webmock/minitest'
10
+
11
+ WebMock.disable_net_connect!(allow_localhost: true)
metadata ADDED
@@ -0,0 +1,190 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: business-central
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jarrad Muir
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-12-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.7'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 3.7.6
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '3.7'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 3.7.6
75
+ - !ruby/object:Gem::Dependency
76
+ name: byebug
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '11.0'
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 11.0.1
85
+ type: :development
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '11.0'
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 11.0.1
95
+ - !ruby/object:Gem::Dependency
96
+ name: oauth2
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '1.4'
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: 1.4.2
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '1.4'
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: 1.4.2
115
+ description:
116
+ email:
117
+ - jarrads@live.com
118
+ executables: []
119
+ extensions: []
120
+ extra_rdoc_files: []
121
+ files:
122
+ - LICENSE.txt
123
+ - README.md
124
+ - lib/business_central.rb
125
+ - lib/business_central/client.rb
126
+ - lib/business_central/exceptions.rb
127
+ - lib/business_central/object/account.rb
128
+ - lib/business_central/object/base.rb
129
+ - lib/business_central/object/company.rb
130
+ - lib/business_central/object/helper.rb
131
+ - lib/business_central/object/item.rb
132
+ - lib/business_central/object/purchase_invoice.rb
133
+ - lib/business_central/object/purchase_invoice_line.rb
134
+ - lib/business_central/object/request.rb
135
+ - lib/business_central/object/response.rb
136
+ - lib/business_central/object/validation.rb
137
+ - lib/business_central/object/vendor.rb
138
+ - lib/business_central/version.rb
139
+ - lib/core_ext/string.rb
140
+ - test/business_central/client_test.rb
141
+ - test/business_central/object/account_test.rb
142
+ - test/business_central/object/company_test.rb
143
+ - test/business_central/object/item_test.rb
144
+ - test/business_central/object/purchase_invoice_line_test.rb
145
+ - test/business_central/object/purchase_invoice_test.rb
146
+ - test/business_central/object/request_test.rb
147
+ - test/business_central/object/response_test.rb
148
+ - test/business_central/object/validation_test.rb
149
+ - test/business_central/object/vendor_test.rb
150
+ - test/business_central_test.rb
151
+ - test/test_helper.rb
152
+ homepage: https://github.com/JDrizzy/business-central
153
+ licenses:
154
+ - MIT
155
+ metadata:
156
+ source_code_uri: https://github.com/JDrizzy/business-central
157
+ changelog_uri: https://github.com/JDrizzy/business-central/releases
158
+ post_install_message:
159
+ rdoc_options: []
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ requirements: []
173
+ rubyforge_project:
174
+ rubygems_version: 2.7.6
175
+ signing_key:
176
+ specification_version: 4
177
+ summary: Integration library for Microsoft Dynamic365 business central
178
+ test_files:
179
+ - test/business_central/client_test.rb
180
+ - test/business_central/object/account_test.rb
181
+ - test/business_central/object/company_test.rb
182
+ - test/business_central/object/item_test.rb
183
+ - test/business_central/object/purchase_invoice_line_test.rb
184
+ - test/business_central/object/purchase_invoice_test.rb
185
+ - test/business_central/object/request_test.rb
186
+ - test/business_central/object/response_test.rb
187
+ - test/business_central/object/validation_test.rb
188
+ - test/business_central/object/vendor_test.rb
189
+ - test/business_central_test.rb
190
+ - test/test_helper.rb