business-central 1.0.0

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