MuranoCLI 3.0.2 → 3.0.4
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +30 -59
- data/Gemfile +9 -3
- data/MuranoCLI.gemspec +11 -4
- data/bin/murano +2 -90
- data/lib/MrMurano.rb +5 -1
- data/lib/MrMurano/{spec_commander.rb → Commander-Entry.rb} +1 -2
- data/lib/MrMurano/Solution.rb +12 -15
- data/lib/MrMurano/SolutionId.rb +1 -5
- data/lib/MrMurano/SyncAllowed.rb +2 -2
- data/lib/MrMurano/SyncUpDown.rb +6 -3
- data/lib/MrMurano/progress.rb +11 -2
- data/lib/MrMurano/verbosing.rb +3 -2
- data/lib/MrMurano/version.rb +2 -2
- data/spec/Account-Passwords_spec.rb +34 -48
- data/spec/Account_spec.rb +58 -63
- data/spec/Business_spec.rb +151 -139
- data/spec/ConfigFile_spec.rb +15 -11
- data/spec/ConfigMigrate_spec.rb +23 -12
- data/spec/Config_spec.rb +57 -54
- data/spec/Content_spec.rb +233 -201
- data/spec/GatewayBase_spec.rb +35 -27
- data/spec/GatewayDevice_spec.rb +149 -149
- data/spec/GatewayResource_spec.rb +115 -102
- data/spec/GatewaySettings_spec.rb +69 -62
- data/spec/Http_spec.rb +66 -56
- data/spec/MakePretties_spec.rb +82 -73
- data/spec/Mock_spec.rb +38 -29
- data/spec/ProjectFile_spec.rb +118 -106
- data/spec/Setting_spec.rb +24 -15
- data/spec/Solution-ServiceConfig_spec.rb +168 -140
- data/spec/Solution-ServiceEventHandler_spec.rb +186 -188
- data/spec/Solution-ServiceModules_spec.rb +314 -232
- data/spec/Solution-UsersRoles_spec.rb +136 -86
- data/spec/Solution_spec.rb +78 -50
- data/spec/SyncRoot_spec.rb +26 -24
- data/spec/SyncUpDown_spec.rb +268 -249
- data/spec/Verbosing_spec.rb +95 -93
- data/spec/Webservice-Cors_spec.rb +141 -95
- data/spec/Webservice-Endpoint_spec.rb +382 -346
- data/spec/Webservice-File_spec.rb +148 -109
- data/spec/Webservice-Setting_spec.rb +47 -41
- data/spec/cmd_business_spec.rb +17 -17
- data/spec/cmd_common.rb +27 -7
- data/spec/cmd_config_spec.rb +31 -20
- data/spec/cmd_content_spec.rb +80 -68
- data/spec/cmd_cors_spec.rb +11 -5
- data/spec/cmd_device_spec.rb +16 -14
- data/spec/cmd_domain_spec.rb +10 -8
- data/spec/cmd_exchange_spec.rb +3 -3
- data/spec/cmd_init_spec.rb +100 -101
- data/spec/cmd_keystore_spec.rb +17 -12
- data/spec/cmd_link_spec.rb +22 -37
- data/spec/cmd_password_spec.rb +11 -7
- data/spec/cmd_setting_application_spec.rb +47 -33
- data/spec/cmd_setting_product_spec.rb +32 -27
- data/spec/cmd_status_spec.rb +125 -114
- data/spec/cmd_syncdown_spec.rb +70 -65
- data/spec/cmd_syncup_spec.rb +19 -15
- data/spec/cmd_usage_spec.rb +14 -10
- metadata +29 -15
@@ -1,3 +1,10 @@
|
|
1
|
+
# Last Modified: 2017.09.12 /coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
# Copyright © 2016-2017 Exosite LLC.
|
5
|
+
# License: MIT. See LICENSE.txt.
|
6
|
+
# vim:tw=0:ts=2:sw=2:et:ai
|
7
|
+
|
1
8
|
require 'fileutils'
|
2
9
|
require 'MrMurano/version'
|
3
10
|
require 'MrMurano/Gateway'
|
@@ -6,7 +13,7 @@ require 'MrMurano/SyncRoot'
|
|
6
13
|
require '_workspace'
|
7
14
|
|
8
15
|
RSpec.describe MrMurano::Gateway::Resources do
|
9
|
-
include_context
|
16
|
+
include_context 'WORKSPACE'
|
10
17
|
before(:example) do
|
11
18
|
MrMurano::SyncRoot.instance.reset
|
12
19
|
$cfg = MrMurano::Config.new
|
@@ -17,87 +24,89 @@ RSpec.describe MrMurano::Gateway::Resources do
|
|
17
24
|
$project.load
|
18
25
|
|
19
26
|
@gw = MrMurano::Gateway::Resources.new
|
20
|
-
allow(@gw).to receive(:token).and_return(
|
27
|
+
allow(@gw).to receive(:token).and_return('TTTTTTTTTT')
|
21
28
|
end
|
22
29
|
|
23
|
-
it
|
30
|
+
it 'initializes' do
|
24
31
|
uri = @gw.endpoint('/')
|
25
|
-
expect(uri.to_s).to eq(
|
32
|
+
expect(uri.to_s).to eq('https://bizapi.hosted.exosite.io/api:1/service/XYZ/device2/')
|
26
33
|
end
|
27
34
|
|
28
|
-
it
|
35
|
+
it 'lists' do
|
29
36
|
resources = [
|
30
|
-
{:
|
31
|
-
{:
|
32
|
-
{:
|
37
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'bob' },
|
38
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'fuzz' },
|
39
|
+
{ format: 'string', unit: 'bits', settable: true, alias: 'gruble' },
|
33
40
|
]
|
34
|
-
body = { :
|
35
|
-
:
|
36
|
-
:
|
37
|
-
:
|
38
|
-
}}
|
39
|
-
stub_request(:get, 'https://bizapi.hosted.exosite.io/api:1/service/XYZ/device2')
|
40
|
-
to_return(:body
|
41
|
+
body = { resources: {
|
42
|
+
bob: { format: 'string', unit: 'c', settable: true },
|
43
|
+
fuzz: { format: 'string', unit: 'c', settable: true },
|
44
|
+
gruble: { format: 'string', unit: 'bits', settable: true },
|
45
|
+
}, }
|
46
|
+
stub_request(:get, 'https://bizapi.hosted.exosite.io/api:1/service/XYZ/device2')
|
47
|
+
.to_return(body: body.to_json)
|
41
48
|
|
42
49
|
ret = @gw.list
|
43
50
|
expect(ret).to eq(resources)
|
44
51
|
end
|
45
52
|
|
46
|
-
it
|
53
|
+
it 'uploads all' do
|
47
54
|
res_before = [
|
48
|
-
{:
|
49
|
-
{:
|
50
|
-
{:
|
55
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'bob' },
|
56
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'fuzz' },
|
57
|
+
{ format: 'string', unit: 'bits', settable: true, alias: 'gruble' },
|
51
58
|
]
|
52
59
|
res_after = {
|
53
|
-
:
|
54
|
-
:
|
55
|
-
:
|
60
|
+
bob: { format: 'string', unit: 'c', settable: true },
|
61
|
+
fuzz: { format: 'string', unit: 'c', settable: true },
|
62
|
+
gruble: { format: 'string', unit: 'bits', settable: true },
|
56
63
|
}
|
57
|
-
stub_request(:patch, 'https://bizapi.hosted.exosite.io/api:1/service/XYZ/device2')
|
58
|
-
with(:
|
64
|
+
stub_request(:patch, 'https://bizapi.hosted.exosite.io/api:1/service/XYZ/device2')
|
65
|
+
.with(body: { resources: res_after }.to_json)
|
59
66
|
|
60
67
|
ret = @gw.upload_all(res_before)
|
61
68
|
expect(ret).to eq({})
|
62
69
|
end
|
63
70
|
|
64
|
-
context
|
71
|
+
context 'compares' do
|
65
72
|
before(:example) do
|
66
|
-
@
|
67
|
-
@
|
73
|
+
@i_a = { format: 'string', unit: 'c', settable: true, alias: 'bob' }
|
74
|
+
@i_b = { format: 'string', unit: 'c', settable: true, alias: 'bob' }
|
68
75
|
end
|
69
|
-
it
|
70
|
-
ret = @gw.docmp(@
|
76
|
+
it 'Are equal' do
|
77
|
+
ret = @gw.docmp(@i_a, @i_b)
|
71
78
|
expect(ret).to eq(false)
|
72
79
|
end
|
73
80
|
end
|
74
81
|
|
75
|
-
context
|
76
|
-
it
|
82
|
+
context 'Lookup functions' do
|
83
|
+
it 'local path is into' do
|
77
84
|
ret = @gw.tolocalpath('bob', 'rich')
|
78
85
|
expect(ret).to eq('bob')
|
79
86
|
end
|
80
87
|
|
81
|
-
it
|
82
|
-
ret = @gw.synckey(
|
83
|
-
expect(ret).to eq(
|
88
|
+
it 'gets synckey' do
|
89
|
+
ret = @gw.synckey(alias: 'bob')
|
90
|
+
expect(ret).to eq('bob')
|
84
91
|
end
|
85
92
|
end
|
86
93
|
|
87
|
-
context
|
88
|
-
it
|
94
|
+
context 'local items' do
|
95
|
+
it 'succeeds' do
|
89
96
|
resfile = Pathname.new('resources.yaml')
|
90
97
|
src = File.join(@testdir, 'spec', 'fixtures', 'gateway_resource_files', 'resources.yaml')
|
91
98
|
FileUtils.copy(src, resfile.to_path)
|
92
99
|
ret = @gw.localitems(resfile)
|
93
|
-
expect(ret).to eq(
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
100
|
+
expect(ret).to eq(
|
101
|
+
[
|
102
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'bob' },
|
103
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'fuzz' },
|
104
|
+
{ format: 'string', unit: 'bits', settable: true, alias: 'gruble' },
|
105
|
+
]
|
106
|
+
)
|
98
107
|
end
|
99
108
|
|
100
|
-
it
|
109
|
+
it 'missing file' do
|
101
110
|
resfile = Pathname.new('resources.yaml')
|
102
111
|
saved = $stderr
|
103
112
|
$stderr = StringIO.new
|
@@ -123,9 +132,9 @@ RSpec.describe MrMurano::Gateway::Resources do
|
|
123
132
|
src = File.join(@testdir, 'spec', 'fixtures', 'gateway_resource_files', 'resources.notyaml')
|
124
133
|
FileUtils.copy(src, resfile.to_path)
|
125
134
|
#expect{ @gw.localitems(resfile) }.to raise_error(JSON::Schema::ValidationError)
|
126
|
-
expect
|
135
|
+
expect do
|
127
136
|
@gw.localitems(resfile)
|
128
|
-
|
137
|
+
end.to raise_error(SystemExit).and output("\e[31mThere is an error in the config file, resources.yaml\e[0m\n\e[31m\"The property '#/' of type Array did not match the following type: object\"\e[0m\n").to_stderr
|
129
138
|
end
|
130
139
|
|
131
140
|
it "isn't valid" do
|
@@ -133,58 +142,63 @@ RSpec.describe MrMurano::Gateway::Resources do
|
|
133
142
|
src = File.join(@testdir, 'spec', 'fixtures', 'gateway_resource_files', 'resources.notyaml')
|
134
143
|
FileUtils.copy(src, resfile.to_path)
|
135
144
|
#expect{ @gw.localitems(resfile) }.to raise_error(JSON::Schema::ValidationError)
|
136
|
-
expect
|
145
|
+
expect do
|
137
146
|
@gw.localitems(resfile)
|
138
|
-
|
147
|
+
end.to raise_error(SystemExit).and output("\e[31mThere is an error in the config file, resources.yaml\e[0m\n\e[31m\"The property '#/' of type Array did not match the following type: object\"\e[0m\n").to_stderr
|
139
148
|
end
|
140
149
|
end
|
141
150
|
|
142
|
-
context
|
151
|
+
context 'syncup' do
|
143
152
|
before(:example) do
|
144
|
-
expect(@gw).to receive(:list).once.and_return(
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
153
|
+
expect(@gw).to receive(:list).once.and_return(
|
154
|
+
[
|
155
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'bob' },
|
156
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'fuzz' },
|
157
|
+
{ format: 'string', unit: 'bits', settable: true, alias: 'gruble' },
|
158
|
+
]
|
159
|
+
)
|
149
160
|
end
|
150
|
-
it
|
151
|
-
expect(@gw).to receive(:upload_all).with(
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
161
|
+
it 'removes keys' do
|
162
|
+
expect(@gw).to receive(:upload_all).with(
|
163
|
+
[
|
164
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'bob' },
|
165
|
+
{ format: 'string', unit: 'bits', settable: true, alias: 'gruble' },
|
166
|
+
]
|
167
|
+
)
|
156
168
|
@gw.syncup_before
|
157
169
|
@gw.remove('fuzz')
|
158
170
|
@gw.syncup_after
|
159
171
|
end
|
160
172
|
|
161
|
-
it
|
162
|
-
expect(@gw).to receive(:upload_all).with(
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
173
|
+
it 'adds keys' do
|
174
|
+
expect(@gw).to receive(:upload_all).with(
|
175
|
+
[
|
176
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'bob' },
|
177
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'fuzz' },
|
178
|
+
{ format: 'string', unit: 'bits', settable: true, alias: 'gruble' },
|
179
|
+
{ format: 'number', unit: 'bibs', settable: false, alias: 'greeble' },
|
180
|
+
]
|
181
|
+
)
|
169
182
|
@gw.syncup_before
|
170
|
-
@gw.upload(nil, {:
|
183
|
+
@gw.upload(nil, { format: 'number', unit: 'bibs', settable: false, alias: 'greeble' }, nil)
|
171
184
|
@gw.syncup_after
|
172
185
|
end
|
173
186
|
|
174
|
-
it
|
175
|
-
expect(@gw).to receive(:upload_all).with(
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
187
|
+
it 'replaces keys' do
|
188
|
+
expect(@gw).to receive(:upload_all).with(
|
189
|
+
[
|
190
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'bob' },
|
191
|
+
{ format: 'string', unit: 'bits', settable: true, alias: 'gruble' },
|
192
|
+
{ format: 'number', unit: 'bibs', settable: false, alias: 'fuzz' },
|
193
|
+
]
|
194
|
+
)
|
181
195
|
@gw.syncup_before
|
182
|
-
@gw.upload(nil, {:
|
196
|
+
@gw.upload(nil, { format: 'number', unit: 'bibs', settable: false, alias: 'fuzz' }, nil)
|
183
197
|
@gw.syncup_after
|
184
198
|
end
|
185
199
|
end
|
186
200
|
|
187
|
-
context
|
201
|
+
context 'syncdown' do
|
188
202
|
before(:example) do
|
189
203
|
# 2017-07-05: [lb] not sure what I had to add this just now;
|
190
204
|
# this test had been working fine... I added a check for
|
@@ -201,66 +215,65 @@ RSpec.describe MrMurano::Gateway::Resources do
|
|
201
215
|
|
202
216
|
expect(@gw).to receive(:locallist).once.and_return(
|
203
217
|
[
|
204
|
-
{:
|
205
|
-
{:
|
206
|
-
{:
|
218
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'bob' },
|
219
|
+
{ format: 'string', unit: 'c', settable: true, alias: 'fuzz' },
|
220
|
+
{ format: 'string', unit: 'bits', settable: true, alias: 'gruble' },
|
207
221
|
],
|
208
222
|
# 2017-07-05: [lb] also had to remove this check.
|
209
223
|
# locallist returns a single array, not two of them!
|
210
224
|
#[],
|
211
225
|
)
|
212
226
|
|
213
|
-
@io = instance_double(
|
227
|
+
@io = instance_double('IO')
|
214
228
|
@p = instance_double('Pathname')
|
215
229
|
expect(@p).to receive(:dirname).and_return(resfile.dirname)
|
216
230
|
expect(@p).to receive(:extname).and_return(resfile.extname)
|
217
231
|
expect(@p).to receive(:open).and_yield(@io)
|
218
232
|
end
|
219
|
-
it
|
233
|
+
it 'removes keys' do
|
220
234
|
expect(@io).to receive(:write) do |args|
|
221
235
|
fy = YAML.load(args)
|
222
|
-
expect(fy).to eq(
|
223
|
-
'bob'=>{'format'=>
|
224
|
-
'gruble'=>{'format'=>
|
225
|
-
|
236
|
+
expect(fy).to eq(
|
237
|
+
'bob' => { 'format' => 'string', 'unit' => 'c', 'settable' => true },
|
238
|
+
'gruble' => { 'format' => 'string', 'unit' => 'bits', 'settable' => true }
|
239
|
+
)
|
226
240
|
end
|
227
241
|
|
228
242
|
@gw.syncdown_before
|
229
|
-
@gw.removelocal(@p,
|
243
|
+
@gw.removelocal(@p, alias: 'fuzz')
|
230
244
|
@gw.syncdown_after(@p)
|
231
245
|
end
|
232
246
|
|
233
|
-
it
|
247
|
+
it 'adds keys' do
|
234
248
|
expect(@io).to receive(:write) do |args|
|
235
249
|
fy = YAML.load(args)
|
236
|
-
expect(fy).to eq(
|
237
|
-
'bob'=>{'format'=>
|
238
|
-
'gruble'=>{'format'=>
|
239
|
-
'fuzz'=>{'format'=>
|
240
|
-
'greeble'=>{'format'=>
|
241
|
-
|
250
|
+
expect(fy).to eq(
|
251
|
+
'bob' => { 'format' => 'string', 'unit' => 'c', 'settable' => true },
|
252
|
+
'gruble' => { 'format' => 'string', 'unit' => 'bits', 'settable' => true },
|
253
|
+
'fuzz' => { 'format' => 'string', 'unit' => 'c', 'settable' => true },
|
254
|
+
'greeble' => { 'format' => 'number', 'unit' => 'bibs', 'settable' => false }
|
255
|
+
)
|
242
256
|
end
|
243
257
|
|
244
258
|
@gw.syncdown_before
|
245
|
-
@gw.download(@p,
|
259
|
+
@gw.download(@p, format: 'number', unit: 'bibs', settable: false, alias: 'greeble')
|
246
260
|
@gw.syncdown_after(@p)
|
247
261
|
end
|
248
262
|
|
249
|
-
it
|
263
|
+
it 'replaces keys' do
|
250
264
|
expect(@io).to receive(:write) do |args|
|
251
265
|
fy = YAML.load(args)
|
252
|
-
expect(fy).to eq(
|
253
|
-
'bob'=>{'format'=>
|
254
|
-
'gruble'=>{'format'=>
|
255
|
-
'fuzz'=>{'format'=>
|
256
|
-
|
266
|
+
expect(fy).to eq(
|
267
|
+
'bob' => { 'format' => 'string', 'unit' => 'c', 'settable' => true },
|
268
|
+
'gruble' => { 'format' => 'string', 'unit' => 'bits', 'settable' => true },
|
269
|
+
'fuzz' => { 'format' => 'number', 'unit' => 'bibs', 'settable' => false }
|
270
|
+
)
|
257
271
|
end
|
258
272
|
|
259
273
|
@gw.syncdown_before
|
260
|
-
@gw.download(@p,
|
274
|
+
@gw.download(@p, format: 'number', unit: 'bibs', settable: false, alias: 'fuzz')
|
261
275
|
@gw.syncdown_after(@p)
|
262
276
|
end
|
263
277
|
end
|
264
278
|
end
|
265
279
|
|
266
|
-
# vim: set ai et sw=2 ts=2 :
|
@@ -1,3 +1,10 @@
|
|
1
|
+
# Last Modified: 2017.09.12 /coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
# Copyright © 2016-2017 Exosite LLC.
|
5
|
+
# License: MIT. See LICENSE.txt.
|
6
|
+
# vim:tw=0:ts=2:sw=2:et:ai
|
7
|
+
|
1
8
|
require 'fileutils'
|
2
9
|
require 'MrMurano/version'
|
3
10
|
require 'MrMurano/Gateway'
|
@@ -5,7 +12,7 @@ require 'MrMurano/SyncRoot'
|
|
5
12
|
require '_workspace'
|
6
13
|
|
7
14
|
RSpec.describe MrMurano::Gateway::Settings do
|
8
|
-
include_context
|
15
|
+
include_context 'WORKSPACE'
|
9
16
|
before(:example) do
|
10
17
|
MrMurano::SyncRoot.instance.reset
|
11
18
|
$cfg = MrMurano::Config.new
|
@@ -14,107 +21,107 @@ RSpec.describe MrMurano::Gateway::Settings do
|
|
14
21
|
$cfg['product.id'] = 'XYZ'
|
15
22
|
|
16
23
|
@gw = MrMurano::Gateway::Settings.new
|
17
|
-
allow(@gw).to receive(:token).and_return(
|
24
|
+
allow(@gw).to receive(:token).and_return('TTTTTTTTTT')
|
18
25
|
|
19
26
|
@infoblob = {
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
24
|
-
:
|
25
|
-
|
26
|
-
:
|
27
|
-
|
28
|
-
:
|
29
|
-
:
|
30
|
-
:
|
31
|
-
:
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
}
|
27
|
+
name: 'XXXXXXXX',
|
28
|
+
protocol: { name: 'onep', devmode: false },
|
29
|
+
description: 'XXXXXXXX',
|
30
|
+
identity_format: {
|
31
|
+
prefix: '', type: 'opaque', options: { casing: 'mixed', length: 0 },
|
32
|
+
},
|
33
|
+
fqdn: 'XXXXXXXX.m2.exosite-staging.io',
|
34
|
+
provisioning: {
|
35
|
+
auth_type: 'token',
|
36
|
+
enabled: true,
|
37
|
+
generate_identity: true,
|
38
|
+
presenter_identity: true,
|
39
|
+
ip_whitelisting: { enabled: false, allowed: [] },
|
40
|
+
},
|
41
|
+
resources: {
|
42
|
+
bob: { format: 'string', unit: 'c', settable: true },
|
43
|
+
fuzz: { format: 'string', unit: 'c', settable: true },
|
44
|
+
gruble: { format: 'string', unit: 'bits', settable: true },
|
45
|
+
},
|
37
46
|
}
|
38
47
|
end
|
39
48
|
|
40
|
-
it
|
49
|
+
it 'initializes' do
|
41
50
|
uri = @gw.endpoint('/')
|
42
|
-
expect(uri.to_s).to eq(
|
51
|
+
expect(uri.to_s).to eq('https://bizapi.hosted.exosite.io/api:1/service/XYZ/device2/')
|
43
52
|
end
|
44
53
|
|
45
|
-
context
|
46
|
-
context
|
47
|
-
it
|
48
|
-
stub_request(:get,
|
49
|
-
with(:
|
50
|
-
to_return(:
|
54
|
+
context 'protocol' do
|
55
|
+
context 'reads' do
|
56
|
+
it 'data' do
|
57
|
+
stub_request(:get, 'https://bizapi.hosted.exosite.io/api:1/service/XYZ/device2')
|
58
|
+
.with(headers: { 'Authorization' => 'token TTTTTTTTTT', 'Content-Type' => 'application/json' })
|
59
|
+
.to_return(status: 200, body: @infoblob.to_json, headers: {})
|
51
60
|
|
52
61
|
ret = @gw.protocol
|
53
62
|
expect(ret).to eq(@infoblob[:protocol])
|
54
63
|
end
|
55
64
|
|
56
|
-
it
|
57
|
-
stub_request(:get,
|
58
|
-
with(:
|
59
|
-
to_return(:
|
65
|
+
it 'returns empty if not Hash' do
|
66
|
+
stub_request(:get, 'https://bizapi.hosted.exosite.io/api:1/service/XYZ/device2')
|
67
|
+
.with(headers: { 'Authorization' => 'token TTTTTTTTTT', 'Content-Type' => 'application/json' })
|
68
|
+
.to_return(status: 200, body: ['bob'].to_json, headers: {})
|
60
69
|
|
61
70
|
ret = @gw.protocol
|
62
71
|
expect(ret).to eq({})
|
63
72
|
end
|
64
73
|
|
65
|
-
it
|
74
|
+
it 'returns empty if missing protocol' do
|
66
75
|
foo = @infoblob.dup
|
67
76
|
foo.delete :protocol
|
68
|
-
stub_request(:get,
|
69
|
-
with(:
|
70
|
-
to_return(:
|
77
|
+
stub_request(:get, 'https://bizapi.hosted.exosite.io/api:1/service/XYZ/device2')
|
78
|
+
.with(headers: { 'Authorization' => 'token TTTTTTTTTT', 'Content-Type' => 'application/json' })
|
79
|
+
.to_return(status: 200, body: foo.to_json, headers: {})
|
71
80
|
|
72
81
|
ret = @gw.protocol
|
73
82
|
expect(ret).to eq({})
|
74
83
|
end
|
75
84
|
|
76
|
-
it
|
85
|
+
it 'returns empty if protocol not Hash' do
|
77
86
|
foo = @infoblob.dup
|
78
|
-
foo[:protocol] =
|
79
|
-
stub_request(:get,
|
80
|
-
with(:
|
81
|
-
to_return(:
|
87
|
+
foo[:protocol] = 'bob'
|
88
|
+
stub_request(:get, 'https://bizapi.hosted.exosite.io/api:1/service/XYZ/device2')
|
89
|
+
.with(headers: { 'Authorization' => 'token TTTTTTTTTT', 'Content-Type' => 'application/json' })
|
90
|
+
.to_return(status: 200, body: foo.to_json, headers: {})
|
82
91
|
|
83
92
|
ret = @gw.protocol
|
84
93
|
expect(ret).to eq({})
|
85
94
|
end
|
86
95
|
end
|
87
|
-
context
|
88
|
-
it
|
89
|
-
newvalues = {:
|
90
|
-
stub_request(:patch,
|
91
|
-
with(:
|
92
|
-
|
93
|
-
|
94
|
-
to_return(:
|
95
|
-
|
96
|
-
ret = @gw.protocol=(newvalues)
|
96
|
+
context 'writes' do
|
97
|
+
it 'data' do
|
98
|
+
newvalues = { name: 'twelve', devmode: true }
|
99
|
+
stub_request(:patch, 'https://bizapi.hosted.exosite.io/api:1/service/XYZ/device2')
|
100
|
+
.with(headers: { 'Authorization' => 'token TTTTTTTTTT',
|
101
|
+
'Content-Type' => 'application/json', },
|
102
|
+
body: { protocol: newvalues }.to_json)
|
103
|
+
.to_return(status: 200, headers: {})
|
104
|
+
|
105
|
+
ret = @gw.protocol = (newvalues)
|
97
106
|
expect(ret).to eq(newvalues)
|
98
107
|
end
|
99
108
|
|
100
|
-
it
|
101
|
-
expect{ @gw.protocol=('foo') }.to raise_error
|
109
|
+
it 'raises when not Hash' do
|
110
|
+
expect { @gw.protocol = ('foo') }.to raise_error 'Not Hash'
|
102
111
|
end
|
103
112
|
|
104
|
-
it
|
105
|
-
newvalues = {:
|
106
|
-
stub_request(:patch,
|
107
|
-
with(:
|
108
|
-
|
109
|
-
|
110
|
-
to_return(:
|
113
|
+
it 'strips extra keys' do
|
114
|
+
newvalues = { name: 'twelve', devmode: true, auth: 'yes', bob: :built }
|
115
|
+
stub_request(:patch, 'https://bizapi.hosted.exosite.io/api:1/service/XYZ/device2')
|
116
|
+
.with(headers: { 'Authorization' => 'token TTTTTTTTTT',
|
117
|
+
'Content-Type' => 'application/json', },
|
118
|
+
body: { protocol: { name: 'twelve', devmode: true } }.to_json)
|
119
|
+
.to_return(status: 200, headers: {})
|
111
120
|
|
112
|
-
ret = @gw.protocol=(newvalues)
|
121
|
+
ret = @gw.protocol = (newvalues)
|
113
122
|
expect(ret).to eq(newvalues)
|
114
123
|
end
|
115
124
|
end
|
116
125
|
end
|
117
|
-
|
118
126
|
end
|
119
127
|
|
120
|
-
# vim: set ai et sw=2 ts=2 :
|