artemis_api 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.txt +7 -0
- data/README.md +12 -0
- data/artemis_api.gemspec +1 -0
- data/lib/artemis_api/client.rb +40 -27
- data/lib/artemis_api/version.rb +1 -1
- data/test/artemis_api_test.rb +7 -0
- data/test/batch_test.rb +58 -0
- data/test/client_test.rb +25 -0
- data/test/completion_test.rb +24 -0
- data/test/discard_test.rb +85 -0
- data/test/facility_test.rb +42 -0
- data/test/harvest_test.rb +33 -0
- data/test/harvest_unit_test.rb +25 -0
- data/test/item_test.rb +38 -0
- data/test/organization_test.rb +39 -0
- data/test/seeding_unit_test.rb +24 -0
- data/test/subscription_test.rb +63 -0
- data/test/test_helper.rb +26 -0
- data/test/user_test.rb +66 -0
- data/test/zone_test.rb +34 -0
- metadata +17 -3
- data/artemis_api-0.1.0.gem +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77fb353bfa893d3ff210292444e20d71aa7dd5cf
|
4
|
+
data.tar.gz: 8aaa44cae9c5eec62ff7dfd524e5576ba7d79ce9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea1ad95a03f6f486bc66c629300f4726b912ce7213f54e7d26c2231a30a197688dac2dd93f08038b6d950b9e753f501e4b9f3225e8d1457900f63ad928393b10
|
7
|
+
data.tar.gz: 9d9b6ba166a362890551ae8c8b0d3f489d5b71c32e47f9851175f519ce216fec3702f703401a924673b4d97b32abd1698f816ff44f56b6d7b121e107d755b264
|
data/History.txt
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# coding: UTF-8
|
2
2
|
|
3
|
+
=== 0.2.1 / 2019-10-28
|
4
|
+
|
5
|
+
* Minor updates to documentation
|
6
|
+
* Fix errors with gem installation
|
7
|
+
* Don't try to delete a record if it doesn't exist
|
8
|
+
* Using URI module to generate API urls
|
9
|
+
|
3
10
|
=== 0.2.0 / 2019-10-24
|
4
11
|
|
5
12
|
* Added the ability to delete Subscriptions
|
data/README.md
CHANGED
@@ -6,6 +6,12 @@ This is a simple API wrapper for the [Artemis](https://artemisag.com/) API.
|
|
6
6
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
|
+
```ruby
|
10
|
+
gem 'artemis_api'
|
11
|
+
```
|
12
|
+
|
13
|
+
If you want to ensure the most up to date version, you can also use the gem straight from the repository:
|
14
|
+
|
9
15
|
```ruby
|
10
16
|
gem 'artemis_api', :git => 'https://github.com/artemis-ag/artemis_api'
|
11
17
|
```
|
@@ -168,6 +174,12 @@ ArtemisApi::Subscription.create(facility_id: 2,
|
|
168
174
|
facility.create_subscription(subject: 'completions', destination: 'https://test-app-url.artemisag.io/v1/webhook')
|
169
175
|
```
|
170
176
|
|
177
|
+
You can also delete one of your own Subscriptions. Trying to delete a Subscription that isn't associated with your user account will fail.
|
178
|
+
|
179
|
+
```ruby
|
180
|
+
ArtemisApi::Subscription.delete(id: 1, facility_id: 2, client: client)
|
181
|
+
```
|
182
|
+
|
171
183
|
## Development
|
172
184
|
|
173
185
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/artemis_api.gemspec
CHANGED
data/lib/artemis_api/client.rb
CHANGED
@@ -27,12 +27,16 @@ module ArtemisApi
|
|
27
27
|
if !obj || force
|
28
28
|
refresh if @oauth_token.expired?
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
30
|
+
path = if facility_id
|
31
|
+
"/api/v3/facilities/#{facility_id}/#{type}/#{id}"
|
32
|
+
else
|
33
|
+
"/api/v3/#{type}/#{id}"
|
34
|
+
end
|
35
|
+
|
36
|
+
query = {}
|
37
|
+
query[:include] = include if include
|
38
|
+
|
39
|
+
url = build_url(path: path, query: URI.encode_www_form(query))
|
36
40
|
|
37
41
|
response = @oauth_token.get(url)
|
38
42
|
obj = process_response(response, type) if response.status == 200
|
@@ -44,19 +48,19 @@ module ArtemisApi
|
|
44
48
|
records = []
|
45
49
|
refresh if @oauth_token.expired?
|
46
50
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
if
|
57
|
-
|
58
|
-
|
59
|
-
|
51
|
+
path = if facility_id && batch_id
|
52
|
+
"/api/v3/facilities/#{facility_id}/batches/#{batch_id}/#{type}"
|
53
|
+
elsif facility_id && batch_id.nil?
|
54
|
+
"/api/v3/facilities/#{facility_id}/#{type}"
|
55
|
+
else
|
56
|
+
"/api/v3/#{type}"
|
57
|
+
end
|
58
|
+
|
59
|
+
query = {}
|
60
|
+
query[:include] = include if include
|
61
|
+
format_filters(filters, query) if filters
|
62
|
+
|
63
|
+
url = build_url(path: path, query: URI.encode_www_form(query))
|
60
64
|
|
61
65
|
response = @oauth_token.get(url)
|
62
66
|
if response.status == 200
|
@@ -65,13 +69,26 @@ module ArtemisApi
|
|
65
69
|
records
|
66
70
|
end
|
67
71
|
|
72
|
+
def build_url(path:, query: nil)
|
73
|
+
uri = URI::Generic.build(path: path, query: query)
|
74
|
+
@options[:base_uri] + uri.to_s
|
75
|
+
end
|
76
|
+
|
68
77
|
def store_record(type, id, data)
|
69
78
|
@objects[type] ||= {}
|
70
79
|
@objects[type][id.to_i] = ArtemisApi::Model.instance_for(type, data, self)
|
71
80
|
end
|
72
81
|
|
73
82
|
def get_record(type, id)
|
74
|
-
@objects
|
83
|
+
@objects.dig(type, id.to_i)
|
84
|
+
end
|
85
|
+
|
86
|
+
def remove_record(type, id)
|
87
|
+
@objects[type].delete(id.to_i) if record_stored?(type, id)
|
88
|
+
end
|
89
|
+
|
90
|
+
def record_stored?(type, id)
|
91
|
+
get_record(type, id).present?
|
75
92
|
end
|
76
93
|
|
77
94
|
def remove_record(type, id)
|
@@ -129,18 +146,14 @@ module ArtemisApi
|
|
129
146
|
end
|
130
147
|
end
|
131
148
|
|
132
|
-
def format_filters(filter_hash)
|
133
|
-
filter_string = ''
|
149
|
+
def format_filters(filter_hash, query_hash)
|
134
150
|
filter_hash.each do |k, v|
|
135
151
|
if v.kind_of?(Array)
|
136
|
-
|
137
|
-
filter_string += "filter[#{k}][]=#{item}&"
|
138
|
-
end
|
152
|
+
query_hash[:"filter[#{k}][]"] = v
|
139
153
|
else
|
140
|
-
|
154
|
+
query_hash[:"filter[#{k}]"] = v
|
141
155
|
end
|
142
156
|
end
|
143
|
-
filter_string
|
144
157
|
end
|
145
158
|
end
|
146
159
|
end
|
data/lib/artemis_api/version.rb
CHANGED
data/test/batch_test.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class BatchTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
get_client
|
6
|
+
get_facility
|
7
|
+
|
8
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/batches")
|
9
|
+
.to_return(body: {data: [{id: '1', type: 'batches', attributes: {id: 1, arbitrary_id: 'Jun16-Gem-Let'}}, {id: '2', type: 'batches', attributes: {id: 2, name: 'Jun19-Bok-Cho'}}]}.to_json)
|
10
|
+
|
11
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/batches/2")
|
12
|
+
.to_return(body: {data: {id: '2', type: 'batches', attributes: {id: 2, arbitrary_id: 'Jun19-Bok-Cho'}}}.to_json)
|
13
|
+
|
14
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/batches/2?include=zone")
|
15
|
+
.to_return(body: {data:
|
16
|
+
{id: '2',
|
17
|
+
type: 'batches',
|
18
|
+
attributes: {id: 2, arbitrary_id: 'Jun19-Bok-Cho'},
|
19
|
+
relationships: {zone: {data: {id: 1, type: 'zones'}}}
|
20
|
+
},
|
21
|
+
included: [{id: '1', type: 'zones', attributes: {id: 1, name: 'Germination'}}]}.to_json)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_finding_all_batches
|
25
|
+
batches = ArtemisApi::Batch.find_all(facility_id: @facility.id, client: @client)
|
26
|
+
assert_equal 2, batches.count
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_finding_all_batches_through_facility
|
30
|
+
batches = @facility.batches
|
31
|
+
assert_equal 2, batches.count
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_finding_a_specific_batch
|
35
|
+
batch = ArtemisApi::Batch.find(id: 2, facility_id: @facility.id, client: @client)
|
36
|
+
assert_equal 'Jun19-Bok-Cho', batch.arbitrary_id
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_finding_a_specific_batch_through_facility
|
40
|
+
batch = @facility.batch(2)
|
41
|
+
assert_equal 'Jun19-Bok-Cho', batch.arbitrary_id
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_finding_a_batch_with_zone_included
|
45
|
+
batch = ArtemisApi::Batch.find(id: 2, facility_id: @facility.id, client: @client, include: "zone")
|
46
|
+
assert_equal 'Jun19-Bok-Cho', batch.arbitrary_id
|
47
|
+
assert_equal @client.objects['zones'].count, 1
|
48
|
+
|
49
|
+
zone = ArtemisApi::Zone.find(id: 1, facility_id: @facility.id, client: @client)
|
50
|
+
assert_equal zone.name, 'Germination'
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_related_to_one_zone
|
54
|
+
batch = ArtemisApi::Batch.find(id: 2, facility_id: @facility.id, client: @client, include: "zone")
|
55
|
+
zone = batch.zone
|
56
|
+
assert_equal zone.name, 'Germination'
|
57
|
+
end
|
58
|
+
end
|
data/test/client_test.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class ClientTest < Minitest::Test
|
4
|
+
def stub_user
|
5
|
+
stub_request(:get, "http://localhost:3000/api/v3/user")
|
6
|
+
.to_return(body: {data: {id: '41', type: 'users', attributes: {id: 41, full_name: 'Jamey Hampton', email: 'jhampton@artemisag.com'}}}.to_json)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_creating_a_client_instance
|
10
|
+
get_client
|
11
|
+
|
12
|
+
assert_equal '12345', @client.oauth_client.id
|
13
|
+
assert_equal 'ya29', @client.oauth_token.token
|
14
|
+
assert_equal @expires_at.to_i, @client.oauth_token.expires_at
|
15
|
+
assert_equal false, @client.oauth_token.expired?
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_current_user
|
19
|
+
get_client
|
20
|
+
stub_user
|
21
|
+
|
22
|
+
user = @client.current_user
|
23
|
+
assert_equal user.class, ArtemisApi::User
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class CompletionTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
get_client
|
6
|
+
get_facility
|
7
|
+
|
8
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/completions")
|
9
|
+
.to_return(body: {data: [{id: '1', type: 'completions', attributes: {id: 1, action_type: 'start'}}, {id: '2', type: 'completions', attributes: {id: 2, action_type: 'move'}}]}.to_json)
|
10
|
+
|
11
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/completions/2")
|
12
|
+
.to_return(body: {data: {id: '2', type: 'completions', attributes: {id: 2, action_type: 'move'}}}.to_json)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_finding_all_completions
|
16
|
+
completions = ArtemisApi::Completion.find_all(facility_id: @facility.id, client: @client)
|
17
|
+
assert_equal 2, completions.count
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_finding_a_specific_completion
|
21
|
+
completion = ArtemisApi::Completion.find(id: 2, facility_id: @facility.id, client: @client)
|
22
|
+
assert_equal 'move', completion.action_type
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class DiscardTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
get_client
|
6
|
+
get_facility
|
7
|
+
|
8
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/2/discards/2")
|
9
|
+
.to_return(body: {
|
10
|
+
data: {
|
11
|
+
id: '2',
|
12
|
+
type: 'discards',
|
13
|
+
attributes: {
|
14
|
+
id: 2,
|
15
|
+
quantity: 20,
|
16
|
+
reason_type: 'disease',
|
17
|
+
reason_description: ''
|
18
|
+
},
|
19
|
+
relationships: {
|
20
|
+
batch: {
|
21
|
+
meta: {
|
22
|
+
included: false
|
23
|
+
}
|
24
|
+
},
|
25
|
+
completion: {
|
26
|
+
meta: {
|
27
|
+
included: false
|
28
|
+
}
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}.to_json)
|
33
|
+
|
34
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/2/discards/2?include=batch")
|
35
|
+
.to_return(body: {
|
36
|
+
data: {
|
37
|
+
id: '2',
|
38
|
+
type: 'discards',
|
39
|
+
attributes: {
|
40
|
+
id: 2,
|
41
|
+
quantity: 20,
|
42
|
+
reason_type: 'disease',
|
43
|
+
reason_description: ''
|
44
|
+
},
|
45
|
+
relationships: {
|
46
|
+
batch: {
|
47
|
+
data: {
|
48
|
+
id: '156',
|
49
|
+
type: 'batches'
|
50
|
+
}
|
51
|
+
},
|
52
|
+
completion: {
|
53
|
+
meta: {
|
54
|
+
included: false
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}.to_json)
|
60
|
+
|
61
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/discards")
|
62
|
+
.to_return(body: {data: [{id: '1', type: 'discards', attributes: {id: 1, reason_type: 'disease', quantity: 20}}, {id: '2', type: 'discards', attributes: {id: 2, reason_type: 'pests', quantity: 5}}]}.to_json)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_finding_a_specific_discard
|
66
|
+
discard = ArtemisApi::Discard.find(id: 2, facility_id: @facility.id, client: @client)
|
67
|
+
assert_equal 20, discard.quantity
|
68
|
+
assert_equal 'disease', discard.reason_type
|
69
|
+
assert_equal false, discard.relationships['batch']['meta']['included']
|
70
|
+
assert discard.relationships['batch']['data'].nil?
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_finding_a_specific_discard_with_batch_included
|
74
|
+
discard = ArtemisApi::Discard.find(id: 2, facility_id: @facility.id, client: @client, include: 'batch')
|
75
|
+
assert_equal 20, discard.quantity
|
76
|
+
assert_equal 'disease', discard.reason_type
|
77
|
+
assert_equal '156', discard.relationships['batch']['data']['id']
|
78
|
+
assert discard.relationships['batch']['meta'].nil?
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_finding_all_discards
|
82
|
+
discards = ArtemisApi::Discard.find_all(facility_id: @facility.id, client: @client)
|
83
|
+
assert_equal 2, discards.count
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class FacilityTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
get_client
|
6
|
+
|
7
|
+
stub_request(:get, 'http://localhost:3000/api/v3/facilities')
|
8
|
+
.to_return(body: {data: [{id: '1', type: 'facilities', attributes: {id: 1, name: 'Sky Fresh'}}, {id: '2', type: 'facilities', attributes: {id: 2, name: 'Rare Dankness'}}]}.to_json)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_finding_all_facilities
|
12
|
+
facilities = ArtemisApi::Facility.find_all(client: @client)
|
13
|
+
assert_equal 2, facilities.count
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_finding_all_facilities_through_client
|
17
|
+
facilities = @client.facilities
|
18
|
+
assert_equal 2, facilities.count
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_finding_a_specific_facility
|
22
|
+
stub_request(:get, 'http://localhost:3000/api/v3/facilities/2')
|
23
|
+
.to_return(body: {data: {id: '2', type: 'facilities', attributes: {id: 2, name: 'Rare Dankness'}}}.to_json)
|
24
|
+
|
25
|
+
facility = ArtemisApi::Facility.find(id: 2, client: @client)
|
26
|
+
assert_equal 'Rare Dankness', facility.name
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_finding_a_specific_facility_through_client
|
30
|
+
stub_request(:get, 'http://localhost:3000/api/v3/facilities/2')
|
31
|
+
.to_return(body: {data: {id: '2', type: 'facilities', attributes: {id: 2, name: 'Rare Dankness'}}}.to_json)
|
32
|
+
|
33
|
+
facility = @client.facility(2)
|
34
|
+
assert_equal 'Rare Dankness', facility.name
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_finding_a_specific_facility_thats_already_in_memory
|
38
|
+
ArtemisApi::Facility.find_all(client: @client)
|
39
|
+
facility = ArtemisApi::Facility.find(id: 2, client: @client)
|
40
|
+
assert_equal 'Rare Dankness', facility.name
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class HarvestTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
get_client
|
6
|
+
get_facility
|
7
|
+
|
8
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/harvests")
|
9
|
+
.to_return(body: {data: [{id: '1', type: 'harvests', attributes: {id: 1, quantity: 4, harvest_type: 'complete'}}, {id: '2', type: 'harvests', attributes: {id: 2, quantity: 1, harvest_type: 'partial'}}]}.to_json)
|
10
|
+
|
11
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/harvests/2")
|
12
|
+
.to_return(body: {data: {id: '2', type: 'harvests', attributes: {id: 2, quantity: 1, harvest_type: 'partial'}}}.to_json)
|
13
|
+
|
14
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/harvests?filter[crop_batch_ids][]=2&filter[crop_batch_ids][]=3")
|
15
|
+
.to_return(body: {data: [{id: '1', type: 'harvests', attributes: {id: 1, quantity: 4, harvest_type: 'complete'}}]}.to_json)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_finding_all_harvests
|
19
|
+
harvests = ArtemisApi::Harvest.find_all(facility_id: @facility.id, client: @client)
|
20
|
+
assert_equal 2, harvests.count
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_finding_a_specific_harvest
|
24
|
+
harvest = ArtemisApi::Harvest.find(id: 2, facility_id: @facility.id, client: @client)
|
25
|
+
assert_equal 'partial', harvest.harvest_type
|
26
|
+
assert_equal 1, harvest.quantity
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_filtering_harvest_by_crop_batch_ids
|
30
|
+
harvests = ArtemisApi::Harvest.find_all(facility_id: @facility.id, client: @client, filters: {crop_batch_ids: [2, 3]})
|
31
|
+
assert_equal 1, harvests.count
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class HarvestUnitTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
get_client
|
6
|
+
get_facility
|
7
|
+
|
8
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/harvest_units")
|
9
|
+
.to_return(body: {data: [{id: '1', type: 'harvest_units', attributes: {id: 1, name: 'pound', weight: 1}}, {id: '2', type: 'harvest_units', attributes: {id: 2, name: 'kilogram', weight: 2.2}}]}.to_json)
|
10
|
+
|
11
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/harvest_units/2")
|
12
|
+
.to_return(body: {data: {id: '2', type: 'harvest_units', attributes: {id: 2, name: 'kilogram', weight: 2.2}}}.to_json)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_finding_all_harvest_units
|
16
|
+
harvest_units = ArtemisApi::HarvestUnit.find_all(facility_id: @facility.id, client: @client)
|
17
|
+
assert_equal 2, harvest_units.count
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_finding_a_specific_harvest_unit
|
21
|
+
harvest_unit = ArtemisApi::HarvestUnit.find(id: 2, facility_id: @facility.id, client: @client)
|
22
|
+
assert_equal 'kilogram', harvest_unit.name
|
23
|
+
assert_equal 2.2, harvest_unit.weight
|
24
|
+
end
|
25
|
+
end
|
data/test/item_test.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class ItemTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
get_client
|
6
|
+
|
7
|
+
stub_request(:get, 'http://localhost:3000/api/v3/facilities/2')
|
8
|
+
.to_return(body: {data: {id: '2', type: 'facilities', attributes: {id: 2, name: 'Rare Dankness'}}}.to_json)
|
9
|
+
@facility = ArtemisApi::Facility.find(id: 2, client: @client)
|
10
|
+
|
11
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/batches/2")
|
12
|
+
.to_return(body: {data: {id: '2', type: 'batches', attributes: {id: 2, arbitrary_id: 'Jun19-Bok-Cho'}, relationships: {seeding_unit: {data: {id: '3479', type: 'seeding_units'}}}}}.to_json)
|
13
|
+
@batch = ArtemisApi::Batch.find(id: 2, facility_id: @facility.id, client: @client)
|
14
|
+
|
15
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/batches/2/items")
|
16
|
+
.to_return(body: {data: [{id: '326515', type: 'items', attributes: {id: 326515, status: 'active'}, relationships: {barcode: {data: {id: '1A4FF0200000022000000207', type: 'barcodes'}}}}]}.to_json)
|
17
|
+
|
18
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/batches/2/items?filter[seeding_unit_id]=100")
|
19
|
+
.to_return(body: {data: [{id: '326515', type: 'items', attributes: {id: 326515, status: 'active'}, relationships: {barcode: {data: {id: '1A4FF0200000022000000207', type: 'barcodes'}}, seeding_unit: {data: {id: '100', type: 'seeding_units'}}}}]}.to_json)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_finding_all_items_of_facility_and_batch
|
23
|
+
items = ArtemisApi::Item.find_all(facility_id: @facility.id, batch_id: @batch.id, client: @client)
|
24
|
+
assert_equal 1, items.count
|
25
|
+
assert_equal 326_515, items.first.id
|
26
|
+
assert_equal '1A4FF0200000022000000207', items.first.relationships.dig('barcode', 'data', 'id')
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_finding_all_items_with_seeding_unit
|
30
|
+
seeding_unit_id = 100
|
31
|
+
items = ArtemisApi::Item.find_all(facility_id: @facility.id,
|
32
|
+
batch_id: @batch.id,
|
33
|
+
client: @client,
|
34
|
+
filters: {seeding_unit_id: seeding_unit_id})
|
35
|
+
assert_equal 1, items.count
|
36
|
+
assert_equal seeding_unit_id.to_s, items.first.relationships.dig('seeding_unit', 'data', 'id')
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class OrganizationTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
get_client
|
6
|
+
|
7
|
+
stub_request(:get, 'http://localhost:3000/api/v3/organizations')
|
8
|
+
.to_return(body: {data: [{id: '1', type: 'organizations', attributes: {id: 1, name: 'Sky Fresh'}}, {id: '2', type: 'organizations', attributes: {id: 2, name: 'Rare Dankness'}}]}.to_json)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_finding_all_organizations
|
12
|
+
organizations = ArtemisApi::Organization.find_all(client: @client)
|
13
|
+
assert_equal 2, organizations.count
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_finding_a_specific_organization
|
17
|
+
stub_request(:get, 'http://localhost:3000/api/v3/organizations/2')
|
18
|
+
.to_return(body: {data: {id: '2', type: 'organizations', attributes: {id: 2, name: 'Rare Dankness'}}}.to_json)
|
19
|
+
|
20
|
+
org = ArtemisApi::Organization.find(id: 2, client: @client)
|
21
|
+
assert_equal 'Rare Dankness', org.name
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_finding_a_specific_org_thats_already_in_memory
|
25
|
+
ArtemisApi::Organization.find_all(client: @client)
|
26
|
+
org = ArtemisApi::Organization.find(id: 2, client: @client)
|
27
|
+
assert_equal 'Rare Dankness', org.name
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_getting_orgs_with_facilities_included
|
31
|
+
stub_request(:get, 'http://localhost:3000/api/v3/organizations/2?include=facilities')
|
32
|
+
.to_return(body: {data: {id: '2', type: 'organizations', attributes: {id: 2, name: 'Rare Dankness'}}, included: [{id: 1, type: "facilities", attributes: {id: 1, name: 'Sky Fresh'}}]}.to_json)
|
33
|
+
|
34
|
+
org = ArtemisApi::Organization.find(id: 2, client: @client, include: 'facilities')
|
35
|
+
facility = ArtemisApi::Facility.find(id: 1, client: @client)
|
36
|
+
assert_equal 'Rare Dankness', org.name
|
37
|
+
assert_equal 'Sky Fresh', facility.name
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class SeedingUnitTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
get_client
|
6
|
+
get_facility
|
7
|
+
|
8
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/seeding_units")
|
9
|
+
.to_return(body: {data: [{id: '1', type: 'seeding_units', attributes: {id: 1, name: 'board'}}, {id: '2', type: 'seeding_units', attributes: {id: 2, name: 'raft'}}]}.to_json)
|
10
|
+
|
11
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/seeding_units/2")
|
12
|
+
.to_return(body: {data: {id: '2', type: 'seeding_units', attributes: {id: 2, name: 'raft'}}}.to_json)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_finding_all_seeding_units
|
16
|
+
seeding_units = ArtemisApi::SeedingUnit.find_all(facility_id: @facility.id, client: @client)
|
17
|
+
assert_equal 2, seeding_units.count
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_finding_a_specific_seeding_unit
|
21
|
+
seeding_unit = ArtemisApi::SeedingUnit.find(id: 2, facility_id: @facility.id, client: @client)
|
22
|
+
assert_equal 'raft', seeding_unit.name
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class SubscriptionTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
get_client
|
6
|
+
get_facility
|
7
|
+
|
8
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/subscriptions")
|
9
|
+
.to_return(body: {data: [{id: '1', type: 'subscriptions', attributes: {id: 1, subject: 'completions', destination: 'http://localhost:8080/a/fake/url'}}, {id: '2', type: 'subscriptions', attributes: {id: 2, subject: 'batches', destination: 'http://localhost:8080/another/fake/url'}}]}.to_json)
|
10
|
+
|
11
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/subscriptions/2")
|
12
|
+
.to_return(body: {data: {id: '2', type: 'subscriptions', attributes: {id: 2, subject: 'batches', destination: 'http://localhost:8080/another/fake/url'}}}.to_json)
|
13
|
+
|
14
|
+
stub_request(:post, "http://localhost:3000/api/v3/facilities/#{@facility.id}/subscriptions")
|
15
|
+
.with(body: {"subscription"=>{"destination"=>"http://localhost:8080/a/fake/url", "subject"=>"completions"}})
|
16
|
+
.to_return(status: 200, body: {data: {id: '3', type: 'subscriptions', attributes: {id: 3, subject: 'completions', destination: 'http://localhost:8080/a/fake/url'}}}.to_json)
|
17
|
+
|
18
|
+
stub_request(:delete, "http://localhost:3000/api/v3/facilities/#{@facility.id}/subscriptions/2")
|
19
|
+
.to_return(status: 204, body: {}.to_json)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_finding_all_subscriptions
|
23
|
+
subscriptions = ArtemisApi::Subscription.find_all(facility_id: @facility.id, client: @client)
|
24
|
+
assert_equal 2, subscriptions.count
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_finding_all_subscriptions_through_facility
|
28
|
+
subscriptions = @facility.subscriptions
|
29
|
+
assert_equal 2, subscriptions.count
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_finding_a_specific_subscription
|
33
|
+
subscription = ArtemisApi::Subscription.find(id: 2, facility_id: @facility.id, client: @client)
|
34
|
+
assert_equal 'batches', subscription.subject
|
35
|
+
assert_equal 'http://localhost:8080/another/fake/url', subscription.destination
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_finding_a_specific_subscription_through_facility
|
39
|
+
subscription = @facility.subscription(2)
|
40
|
+
assert_equal 'batches', subscription.subject
|
41
|
+
assert_equal 'http://localhost:8080/another/fake/url', subscription.destination
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_creating_a_new_subscription
|
45
|
+
subscription = ArtemisApi::Subscription.create(facility_id: @facility.id,
|
46
|
+
subject: 'completions',
|
47
|
+
destination: 'http://localhost:8080/a/fake/url',
|
48
|
+
client: @client)
|
49
|
+
assert_equal 'completions', subscription.subject
|
50
|
+
assert_equal 'http://localhost:8080/a/fake/url', subscription.destination
|
51
|
+
assert_equal 1, @client.objects['subscriptions'].count
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_deleting_a_subscription
|
55
|
+
# find the subscription first to ensure it's in the objects hash
|
56
|
+
subscription = ArtemisApi::Subscription.find(id: 2, facility_id: @facility.id, client: @client)
|
57
|
+
assert_equal 1, @client.objects['subscriptions'].count
|
58
|
+
|
59
|
+
# then delete it and ensure it has been removed from the objects hash
|
60
|
+
result = ArtemisApi::Subscription.delete(id: 2, facility_id: @facility.id, client: @client)
|
61
|
+
assert_equal 0, @client.objects['subscriptions'].count
|
62
|
+
end
|
63
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
|
2
|
+
require "artemis_api"
|
3
|
+
|
4
|
+
require "minitest/autorun"
|
5
|
+
require "webmock/minitest"
|
6
|
+
require "active_support"
|
7
|
+
require "active_support/core_ext/numeric"
|
8
|
+
require 'active_support/testing/assertions'
|
9
|
+
include ActiveSupport::Testing::Assertions
|
10
|
+
|
11
|
+
def get_client
|
12
|
+
options = {app_id: '12345',
|
13
|
+
app_secret: '67890',
|
14
|
+
base_uri: 'http://localhost:3000'}
|
15
|
+
@expires_at = 1.days.from_now
|
16
|
+
@client = ArtemisApi::Client.new(access_token: 'ya29',
|
17
|
+
refresh_token: 'eyJh',
|
18
|
+
expires_at: @expires_at,
|
19
|
+
options: options)
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_facility
|
23
|
+
stub_request(:get, 'http://localhost:3000/api/v3/facilities/2')
|
24
|
+
.to_return(body: {data: {id: '2', type: 'facilities', attributes: {id: 2, name: 'Rare Dankness'}}}.to_json)
|
25
|
+
@facility = ArtemisApi::Facility.find(id: 2, client: @client)
|
26
|
+
end
|
data/test/user_test.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class UserTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
get_client
|
6
|
+
get_facility
|
7
|
+
|
8
|
+
stub_request(:get, "http://localhost:3000/api/v3/user")
|
9
|
+
.to_return(body: {data: {id: '41', type: 'users', attributes: {id: 41, full_name: 'Jamey Hampton', email: 'jhampton@artemisag.com'}}}.to_json)
|
10
|
+
|
11
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/users")
|
12
|
+
.to_return(body: {data: [{id: '41', type: 'users', attributes: {id: 41, full_name: 'Jamey Hampton', email: 'jhampton@artemisag.com'}}, {id: '42', type: 'users', attributes: {id: 42, full_name: 'Developer', email: 'developer@artemisag.com'}}]}.to_json)
|
13
|
+
|
14
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/users/42")
|
15
|
+
.to_return(body: {data: {id: '42', type: 'users', attributes: {id: 42, full_name: 'Developer', email: 'developer@artemisag.com'}}}.to_json)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_getting_current_user
|
19
|
+
user = ArtemisApi::User.get_current(client: @client)
|
20
|
+
assert_equal user.id, 41
|
21
|
+
assert_equal user.full_name, 'Jamey Hampton'
|
22
|
+
assert_equal user.email, 'jhampton@artemisag.com'
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_finding_all_users
|
26
|
+
users = ArtemisApi::User.find_all(facility_id: @facility.id, client: @client)
|
27
|
+
assert_equal 2, users.count
|
28
|
+
assert_equal 2, @client.objects['users'].count
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_finding_all_users_through_facility
|
32
|
+
users = @facility.users
|
33
|
+
assert_equal 2, users.count
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_finding_a_specific_user
|
37
|
+
user = ArtemisApi::User.find(id: 42, facility_id: @facility.id, client: @client)
|
38
|
+
assert_equal user.full_name, 'Developer'
|
39
|
+
assert_equal user.email, 'developer@artemisag.com'
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_finding_a_specific_user_through_facility
|
43
|
+
user = @facility.user(42)
|
44
|
+
assert_equal user.full_name, 'Developer'
|
45
|
+
assert_equal user.email, 'developer@artemisag.com'
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_finding_a_user_with_included_organizations
|
49
|
+
stub_request(:get, 'http://localhost:3000/api/v3/facilities/2/users/42?include=organizations')
|
50
|
+
.to_return(body: {data:
|
51
|
+
{id: '42',
|
52
|
+
type: 'users',
|
53
|
+
attributes: {id: 42, full_name: 'Developer', email: 'developer@artemisag.com'}},
|
54
|
+
included: [{id: '1', type: 'organizations', attributes: {id: 1, name: 'Vegetable Sky'}}]}.to_json)
|
55
|
+
|
56
|
+
user = ArtemisApi::User.find(id: 42, facility_id: @facility.id, client: @client, include: "organizations")
|
57
|
+
assert_equal user.full_name, 'Developer'
|
58
|
+
assert_equal user.email, 'developer@artemisag.com'
|
59
|
+
assert_equal @client.objects['organizations'].count, 1
|
60
|
+
|
61
|
+
# Since the organization has already been included and stored in the client objects array,
|
62
|
+
# this call doesn't actually hit the API and consdoesn't need to be stubbed.
|
63
|
+
organization = ArtemisApi::Organization.find(id: 1, client: @client)
|
64
|
+
assert_equal organization.name, 'Vegetable Sky'
|
65
|
+
end
|
66
|
+
end
|
data/test/zone_test.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class ZoneTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
get_client
|
6
|
+
get_facility
|
7
|
+
|
8
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/zones")
|
9
|
+
.to_return(body: {data: [{id: '1', type: 'zones', attributes: {id: 1, name: 'Germination'}}, {id: '2', type: 'zones', attributes: {id: 2, name: 'Propagation'}}]}.to_json)
|
10
|
+
|
11
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/zones/2")
|
12
|
+
.to_return(body: {data: {id: '2', type: 'zones', attributes: {id: 2, name: 'Propagation'}}}.to_json)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_finding_all_zones
|
16
|
+
zones = ArtemisApi::Zone.find_all(facility_id: @facility.id, client: @client)
|
17
|
+
assert_equal 2, zones.count
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_finding_all_zones_through_facility
|
21
|
+
zones = @facility.zones
|
22
|
+
assert_equal 2, zones.count
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_finding_a_specific_zone
|
26
|
+
zone = ArtemisApi::Zone.find(id: 2, facility_id: @facility.id, client: @client)
|
27
|
+
assert_equal 'Propagation', zone.name
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_finding_a_specific_zone_through_facility
|
31
|
+
zone = @facility.zone(2)
|
32
|
+
assert_equal 'Propagation', zone.name
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: artemis_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamey Hampton
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -110,7 +110,6 @@ files:
|
|
110
110
|
- LICENSE.txt
|
111
111
|
- README.md
|
112
112
|
- Rakefile
|
113
|
-
- artemis_api-0.1.0.gem
|
114
113
|
- artemis_api.gemspec
|
115
114
|
- bin/console
|
116
115
|
- bin/setup
|
@@ -130,6 +129,21 @@ files:
|
|
130
129
|
- lib/artemis_api/user.rb
|
131
130
|
- lib/artemis_api/version.rb
|
132
131
|
- lib/artemis_api/zone.rb
|
132
|
+
- test/artemis_api_test.rb
|
133
|
+
- test/batch_test.rb
|
134
|
+
- test/client_test.rb
|
135
|
+
- test/completion_test.rb
|
136
|
+
- test/discard_test.rb
|
137
|
+
- test/facility_test.rb
|
138
|
+
- test/harvest_test.rb
|
139
|
+
- test/harvest_unit_test.rb
|
140
|
+
- test/item_test.rb
|
141
|
+
- test/organization_test.rb
|
142
|
+
- test/seeding_unit_test.rb
|
143
|
+
- test/subscription_test.rb
|
144
|
+
- test/test_helper.rb
|
145
|
+
- test/user_test.rb
|
146
|
+
- test/zone_test.rb
|
133
147
|
homepage: https://github.com/artemis-ag/artemis_api/
|
134
148
|
licenses:
|
135
149
|
- MIT
|
data/artemis_api-0.1.0.gem
DELETED
Binary file
|