MuranoCLI 3.2.0.beta.9 → 3.2.1.pre.beta.3

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/Rakefile +5 -0
  4. data/dockers/README.rst +7 -0
  5. data/dockers/RELEASE.rst +6 -3
  6. data/dockers/docker-test.sh +45 -17
  7. data/docs/completions/murano_completion-bash +211 -86
  8. data/lib/MrMurano/Account.rb +72 -4
  9. data/lib/MrMurano/Business.rb +163 -2
  10. data/lib/MrMurano/Commander-Entry.rb +1 -2
  11. data/lib/MrMurano/Config.rb +19 -18
  12. data/lib/MrMurano/Content.rb +26 -19
  13. data/lib/MrMurano/Gateway.rb +51 -10
  14. data/lib/MrMurano/ReCommander.rb +1 -1
  15. data/lib/MrMurano/Solution-Services.rb +80 -35
  16. data/lib/MrMurano/Solution-Users.rb +1 -0
  17. data/lib/MrMurano/SyncRoot.rb +10 -3
  18. data/lib/MrMurano/SyncUpDown-Core.rb +47 -36
  19. data/lib/MrMurano/SyncUpDown-Item.rb +46 -14
  20. data/lib/MrMurano/SyncUpDown.rb +22 -20
  21. data/lib/MrMurano/Webservice-Endpoint.rb +20 -18
  22. data/lib/MrMurano/Webservice-File.rb +63 -20
  23. data/lib/MrMurano/commands/business.rb +14 -1
  24. data/lib/MrMurano/commands/child.rb +148 -0
  25. data/lib/MrMurano/commands/devices.rb +298 -149
  26. data/lib/MrMurano/commands/element.rb +2 -1
  27. data/lib/MrMurano/commands/globals.rb +3 -0
  28. data/lib/MrMurano/commands/network.rb +152 -33
  29. data/lib/MrMurano/commands/sync.rb +2 -2
  30. data/lib/MrMurano/commands.rb +1 -0
  31. data/lib/MrMurano/verbosing.rb +13 -2
  32. data/lib/MrMurano/version.rb +1 -1
  33. data/spec/Account_spec.rb +43 -11
  34. data/spec/Content_spec.rb +5 -3
  35. data/spec/GatewayBase_spec.rb +1 -1
  36. data/spec/GatewayDevice_spec.rb +47 -8
  37. data/spec/GatewayResource_spec.rb +1 -1
  38. data/spec/GatewaySettings_spec.rb +1 -1
  39. data/spec/HttpAuthed_spec.rb +17 -3
  40. data/spec/ProjectFile_spec.rb +59 -23
  41. data/spec/Setting_spec.rb +2 -1
  42. data/spec/Solution-ServiceConfig_spec.rb +1 -1
  43. data/spec/Solution-ServiceEventHandler_spec.rb +27 -20
  44. data/spec/Solution-ServiceModules_spec.rb +7 -5
  45. data/spec/Solution-UsersRoles_spec.rb +7 -1
  46. data/spec/Solution_spec.rb +9 -1
  47. data/spec/SyncRoot_spec.rb +5 -5
  48. data/spec/SyncUpDown_spec.rb +262 -211
  49. data/spec/Verbosing_spec.rb +49 -8
  50. data/spec/Webservice-Cors_spec.rb +10 -1
  51. data/spec/Webservice-Endpoint_spec.rb +84 -65
  52. data/spec/Webservice-File_spec.rb +16 -11
  53. data/spec/Webservice-Setting_spec.rb +7 -1
  54. data/spec/_workspace.rb +9 -0
  55. data/spec/cmd_business_spec.rb +5 -10
  56. data/spec/cmd_common.rb +67 -32
  57. data/spec/cmd_config_spec.rb +9 -14
  58. data/spec/cmd_content_spec.rb +15 -26
  59. data/spec/cmd_cors_spec.rb +9 -12
  60. data/spec/cmd_device_spec.rb +31 -45
  61. data/spec/cmd_domain_spec.rb +12 -10
  62. data/spec/cmd_element_spec.rb +18 -17
  63. data/spec/cmd_exchange_spec.rb +1 -4
  64. data/spec/cmd_init_spec.rb +56 -72
  65. data/spec/cmd_keystore_spec.rb +17 -26
  66. data/spec/cmd_link_spec.rb +13 -17
  67. data/spec/cmd_password_spec.rb +9 -10
  68. data/spec/cmd_setting_application_spec.rb +95 -68
  69. data/spec/cmd_setting_product_spec.rb +59 -37
  70. data/spec/cmd_status_spec.rb +46 -84
  71. data/spec/cmd_syncdown_application_spec.rb +28 -50
  72. data/spec/cmd_syncdown_both_spec.rb +44 -93
  73. data/spec/cmd_syncdown_unit_spec.rb +858 -0
  74. data/spec/cmd_syncup_spec.rb +21 -56
  75. data/spec/cmd_token_spec.rb +0 -3
  76. data/spec/cmd_usage_spec.rb +15 -10
  77. data/spec/dry_run_formatter.rb +1 -0
  78. data/spec/fixtures/dumped_config +4 -4
  79. data/spec/spec_helper.rb +3 -0
  80. metadata +4 -2
@@ -185,7 +185,8 @@ class ElementCmd
185
185
  # And account for the middle column split.
186
186
  width_taken += ' | '.length
187
187
  width_taken += flatkeys.max_by(&:length).length
188
- term_width, _rows = HighLine::SystemExtensions.terminal_size
188
+ term_width = MrMurano::Pretties::TERM_WIDTH
189
+ term_width = 80 unless term_width != 0
189
190
  width_avail = term_width - width_taken
190
191
  end
191
192
  width_avail
@@ -5,6 +5,9 @@
5
5
  # vim:tw=0:ts=2:sw=2:et:ai
6
6
  # Unauthorized copying of this file is strictly prohibited.
7
7
 
8
+ require 'highline'
9
+ require 'rainbow'
10
+
8
11
  require 'MrMurano/verbosing'
9
12
  require 'MrMurano/Config'
10
13
  require 'MrMurano/variegated/TruthyFalsey'
@@ -12,7 +12,8 @@ require 'MrMurano/ReCommander'
12
12
  command :network do |c|
13
13
  c.syntax = %(murano network)
14
14
  c.summary = %(About network)
15
- c.description = %(Commands for working with enterprise business networks.)
15
+ c.description = %(Commands for working with enterprise business networks.
16
+ Note: See 'Murano child' commands for working with network child businesses)
16
17
  c.project_not_required = true
17
18
  c.subcmdgrouphelp = true
18
19
  c.action do |_args, _options|
@@ -22,23 +23,25 @@ command :network do |c|
22
23
  end
23
24
 
24
25
  # View a business network
25
- command 'network view' do |c|
26
- c.syntax = %(murano network view)
26
+ command 'network show' do |c|
27
+ c.syntax = %(murano network show)
27
28
  c.summary = %(View an enterprise business network)
28
29
  c.description = %(
29
30
  View business network belonging to an enterprise parent business.
30
31
  ).strip
31
- c.example %('View a business network using the config file's business.id),
32
- %('murano network view')
33
- c.example %('View a business network using a passed in business.id),
34
- %('murano network view -c business.id=<BUSINESS_ID>')
32
+ c.example %(
33
+ View a business network using the config file's business.id
34
+ ).strip, 'murano network show'
35
+ c.example %(
36
+ View a business network using a passed in business.id
37
+ ).strip, 'murano network show -c business.id=<BUSINESS_ID>'
35
38
  c.project_not_required = true
36
39
  c.action do |_args, _options|
37
- view_business_network
40
+ show_business_network
38
41
  end
39
42
  end
40
43
 
41
- def view_business_network
44
+ def show_business_network
42
45
  biz = MrMurano::Business.new
43
46
  biz.must_business_id!
44
47
  MrMurano::Verbose.whirly_start(
@@ -48,19 +51,9 @@ def view_business_network
48
51
  MrMurano::Verbose.whirly_stop
49
52
 
50
53
  must_business_network!(business_network)
51
- table = Terminal::Table.new
52
- table.add_row [
53
- 'Network Name',
54
- 'Child Business Tier',
55
- 'Child Business Price',
56
- ]
57
- table.add_separator
58
- table.add_row [
59
- business_network[:name],
60
- business_network[:tier][:id],
61
- business_network[:tier][:price],
62
- ]
63
- puts table
54
+ puts('Network Name: ' + business_network[:name])
55
+ puts('Child Business Tier: ' + business_network[:tier][:id])
56
+ puts('Child Business Price: ' + business_network[:tier][:price].to_s)
64
57
  end
65
58
 
66
59
  def must_business_network!(business_network)
@@ -78,7 +71,7 @@ def must_business_network!(business_network)
78
71
  'Error with business network.'
79
72
  )
80
73
  end
81
- exit(1)
74
+ exit 1
82
75
  end
83
76
 
84
77
  # Configure/Update a business network
@@ -88,15 +81,17 @@ command 'network configure' do |c|
88
81
  c.description = %(
89
82
  Configure or update the name of an enterprise business network.
90
83
  ).strip
91
- c.example %('Configure a business network using the config file's business.id),
92
- %('murano network configure <NETWORK_NAME>')
93
- c.example %('Configure a business network using a passed in business.id),
94
- %('murano network configure <NETWORK_NAME> -c business.id=<BUSINESS_ID>')
84
+ c.example %(
85
+ Configure a business network using the config file's business.id
86
+ ).strip, 'murano network configure <NETWORK_NAME>'
87
+ c.example %(
88
+ Configure a business network using a passed in business.id
89
+ ).strip, 'murano network configure <NETWORK_NAME> -c business.id=<BUSINESS_ID>'
95
90
  c.project_not_required = true
96
91
 
97
92
  c.action do |args, _options|
98
93
  if args.empty?
99
- MrMurano::Verbose.error('Please include a network name.')
94
+ MrMurano::Verbose.error 'Please include a network name.'
100
95
  exit 1
101
96
  end
102
97
  configure_business_network(args)
@@ -110,11 +105,135 @@ Configure or update the name of an enterprise business network.
110
105
  response = biz.configure_business_network(biz.bid, network_name)
111
106
  MrMurano::Verbose.whirly_stop
112
107
  return unless response.nil?
113
- MrMurano::Verbose.error('Error configuring business network.')
114
- exit(1)
108
+ MrMurano::Verbose.error 'Error configuring business network.'
109
+ exit 1
115
110
  end
116
111
  end
117
112
 
118
- # TODO: Network child business commands:
119
- # - View, create, delete child businesses.
120
- # - Add member to business network child.
113
+ # View All Network Children
114
+ command 'network children' do |c|
115
+ c.syntax = %(murano network children)
116
+ c.summary = %(View all of the child businesses in a business network.)
117
+ c.description = %(
118
+ View all of the child businesses in a business network.
119
+ ).strip
120
+ c.example %(
121
+ View all of the child businesses in a business network
122
+ ).strip, 'murano network children'
123
+ c.example %(
124
+ View all of the child businesses in a business network using a passed in business.id
125
+ ).strip, 'murano network children -c business.id=<PARENT_BUSINESS_ID>'
126
+ c.project_not_required = true
127
+
128
+ c.action do |_args, _options|
129
+ view_child_businesses
130
+ end
131
+
132
+ def view_child_businesses
133
+ biz = MrMurano::Business.new
134
+ biz.must_business_id!
135
+ MrMurano::Verbose.whirly_start 'Fetching network child businesses...'
136
+ business_network = biz.get_business_network(biz.bid)
137
+ child_businesses = biz.view_child_businesses(biz.bid)
138
+ MrMurano::Verbose.whirly_stop
139
+
140
+ table = Terminal::Table.new
141
+ table.title = 'Business Network Name: ' + business_network[:name]
142
+ table.add_row [
143
+ 'Child Business ID',
144
+ 'Child Business Name',
145
+ 'Email',
146
+ 'Contact',
147
+ 'Number of Members',
148
+ ]
149
+ table.add_separator
150
+
151
+ child_businesses.each do |child|
152
+ table.add_row [
153
+ child[:bizid],
154
+ child[:name],
155
+ child[:email],
156
+ child[:contact],
157
+ child[:members].length,
158
+ ]
159
+ end
160
+ puts table
161
+
162
+ return unless child_businesses.nil?
163
+ MrMurano::Verbose.error 'Error fetching network child businesses.'
164
+ exit 1
165
+ end
166
+ end
167
+
168
+ # Create Business Network Child Business
169
+ command 'network new' do |c|
170
+ c.syntax = %(murano network new <CHILD_BUSINESS_NAME>)
171
+ c.summary = %(Create a new child business.)
172
+ c.description = %(Create a new child business.)
173
+ c.example %(
174
+ Create a new network child business using the config file's parent business.id
175
+ ).strip, 'murano network new <CHILD_BUSINESS_NAME>'
176
+ c.example %(
177
+ Create a new network child business using a passed in parent business.id
178
+ ).strip, 'murano network new <CHILD_BUSINESS_NAME> -c business.id=<PARENT_BUSINESS_ID>'
179
+ c.project_not_required = true
180
+
181
+ c.action do |args, _options|
182
+ if args.empty?
183
+ MrMurano::Verbose.error 'Please include a child business name.'
184
+ exit 1
185
+ end
186
+ add_child_business(args)
187
+ end
188
+
189
+ def add_child_business(args)
190
+ child_biz_name = args[0]
191
+ biz = MrMurano::Business.new
192
+ biz.must_business_id!
193
+ MrMurano::Verbose.whirly_start 'Creating network child business...'
194
+ response = biz.add_network_child_business(biz.bid, child_biz_name)
195
+
196
+ MrMurano::Verbose.whirly_stop
197
+ return unless response.nil?
198
+ MrMurano::Verbose.error 'Error creating network child business.'
199
+ exit 1
200
+ end
201
+ end
202
+
203
+ # Delete Business Network Child Business
204
+ command 'network delete' do |c|
205
+ c.syntax = %(murano network delete <CHILD_BUSINESS_ID>)
206
+ c.summary = %(Delete a child business.)
207
+ c.description = %(
208
+ Delete child business.
209
+ ).strip
210
+ c.example %(
211
+ Delete a network child business using the config file's parent business.id
212
+ ).strip, 'murano network delete <CHILD_BUSINESS_ID>'
213
+ c.example %(
214
+ Delete a network child business using a passed in parent business.id
215
+ ).strip, 'murano network delete <CHILD_BUSINESS_ID> -c business.id=<PARENT_BUSINESS_ID>'
216
+ c.project_not_required = true
217
+
218
+ c.action do |args, _options|
219
+ if args.empty?
220
+ MrMurano::Verbose.error 'Please include a child business ID.'
221
+ exit 1
222
+ end
223
+ delete_child_business(args)
224
+ end
225
+
226
+ def delete_child_business(args)
227
+ child_biz_id = args[0]
228
+ biz = MrMurano::Business.new
229
+ biz.must_business_id!
230
+ MrMurano::Verbose.whirly_start 'Deleting network child business...'
231
+ response = biz.delete_child_business(biz.bid, child_biz_id)
232
+ MrMurano::Verbose.whirly_stop
233
+ return unless response.nil?
234
+ MrMurano::Verbose.error 'Error deleting network child business.'
235
+ exit 1
236
+ end
237
+ end
238
+
239
+
@@ -17,7 +17,7 @@ def sync_add_options(cmd, locale)
17
17
  cmd.option '--ignore-errors', %(Don't die on sync errors)
18
18
  end
19
19
 
20
- def syncdown_files(options, args=nil)
20
+ def syncdown_files(options, args=[])
21
21
  args = [] if args.nil?
22
22
  num_synced = 0
23
23
  MrMurano::SyncRoot.instance.each_filtered(options) do |_name, _type, klass, desc|
@@ -76,7 +76,7 @@ alias_command 'pull product', 'syncdown', '--no-delete', '--type', 'product'
76
76
  alias_command 'application pull', 'syncdown', '--no-delete', '--type', 'application'
77
77
  alias_command 'product pull', 'syncdown', '--no-delete', '--type', 'product'
78
78
 
79
- def syncup_files(options, args=nil)
79
+ def syncup_files(options, args=[])
80
80
  MrMurano::SyncRoot.instance.each_filtered(options) do |_name, _type, klass, desc|
81
81
  MrMurano::Verbose.whirly_msg "Syncing #{Inflecto.pluralize(desc)}..."
82
82
  sol = klass.new
@@ -11,6 +11,7 @@
11
11
  # murano completion > docs/completions/murano_completion-bash
12
12
  #require 'MrMurano/commands/completion'
13
13
 
14
+ require 'MrMurano/commands/child'
14
15
  require 'MrMurano/commands/business'
15
16
  require 'MrMurano/commands/config'
16
17
  require 'MrMurano/commands/content'
@@ -53,6 +53,17 @@ module MrMurano
53
53
  whirly_interject { warn(HighLine.color(msg, :red)) }
54
54
  end
55
55
 
56
+ def assert(condition, msg='')
57
+ MrMurano::Verbose.assert(condition, msg)
58
+ end
59
+
60
+ def self.assert(condition, msg='')
61
+ return if condition
62
+ msg = "Assertion raised! #{caller[1]}\n" + msg
63
+ whirly_interject { warn(HighLine.color(msg, :red)) }
64
+ raise msg
65
+ end
66
+
56
67
  ## Output tabular data
57
68
  # +data+:: Data to write. Preferably a Hash with :headers and :rows
58
69
  # +ios+:: Output stream to write to, if nil, then use $stdout
@@ -64,7 +75,7 @@ module MrMurano
64
75
  MrMurano::Verbose.tabularize(data, ios)
65
76
  end
66
77
 
67
- def self.tabularize(data, ios=nil)
78
+ def self.tabularize(data, ios=nil, no_quotes: false)
68
79
  fmt = $cfg['tool.outformat']
69
80
  ios = $stdout if ios.nil?
70
81
  cols = nil
@@ -93,7 +104,7 @@ module MrMurano
93
104
  ios,
94
105
  headers: cols,
95
106
  write_headers: !cols.empty?,
96
- force_quotes: true
107
+ force_quotes: !no_quotes,
97
108
  ) do |csv|
98
109
  # MAYBE/2017-07-02: Does shover operator work on frozen string literals?
99
110
  rows.each { |v| csv << v }
@@ -26,7 +26,7 @@ module MrMurano
26
26
  # '3.0.0-beta.2' is changed to '3.0.0.pre.beta.2'
27
27
  # which breaks our build (which expects the version to match herein).
28
28
  # So stick to using the '.pre.X' syntax, which ruby/gems knows.
29
- VERSION = '3.2.0.beta.9'
29
+ VERSION = '3.2.1.pre.beta.3'
30
30
  EXE_NAME = File.basename($PROGRAM_NAME)
31
31
  SIGN_UP_URL = 'https://exosite.com/signup/'
32
32
  end
data/spec/Account_spec.rb CHANGED
@@ -6,6 +6,8 @@
6
6
  # Unauthorized copying of this file is strictly prohibited.
7
7
 
8
8
  require 'highline/import'
9
+ require 'webmock'
10
+
9
11
  require 'MrMurano/version'
10
12
  require 'MrMurano/Account'
11
13
  require 'MrMurano/Config'
@@ -16,6 +18,7 @@ require 'HttpAuthed_spec'
16
18
 
17
19
  RSpec.describe MrMurano::Account, 'token' do
18
20
  include_context 'WORKSPACE'
21
+
19
22
  before(:example) do
20
23
  $cfg = MrMurano::Config.new
21
24
  $cfg.load
@@ -32,6 +35,9 @@ RSpec.describe MrMurano::Account, 'token' do
32
35
  # using user.name from test runner's ~/.murano/config.
33
36
  $cfg.unload(:env)
34
37
 
38
+ # Reset the Net::HTTP object, which was configured with the old net.host, etc.
39
+ MrMurano::HttpAuthed.instance.http_reset
40
+
35
41
  stub_request_email_password
36
42
 
37
43
  $project = MrMurano::ProjectFile.new
@@ -42,14 +48,12 @@ RSpec.describe MrMurano::Account, 'token' do
42
48
 
43
49
  after(:example) do
44
50
  @acc.token_reset
51
+ WebMock.reset!
45
52
  end
46
53
 
47
54
  context 'Get login info' do
48
55
  before(:example) do
49
- @pswd = instance_double('MrMurano::Passwords')
50
- allow(@pswd).to receive(:load).and_return(nil)
51
- allow(@pswd).to receive(:save).and_return(nil)
52
- allow(MrMurano::Passwords).to receive(:new).and_return(@pswd)
56
+ @pswd = create_instance_double_passwords
53
57
  end
54
58
 
55
59
  it 'Asks for nothing' do
@@ -66,7 +70,9 @@ RSpec.describe MrMurano::Account, 'token' do
66
70
  $cfg['user.name'] = nil
67
71
  expect($terminal).to receive(:ask).once.and_return('bob')
68
72
  expect(@acc).to receive(:error).once
69
- expect($cfg).to receive(:set).with('user.name', 'bob', :user).once.and_call_original
73
+ expect($cfg).to receive(:set).with(
74
+ 'user.name', 'bob', :user,
75
+ ).once.and_call_original
70
76
  expect(@pswd).to receive(:get).once.and_return('built')
71
77
 
72
78
  ret = @acc.login_info
@@ -76,7 +82,9 @@ RSpec.describe MrMurano::Account, 'token' do
76
82
  it 'Asks for password' do
77
83
  @acc.credentials_reset
78
84
  $cfg['user.name'] = 'bob'
79
- expect(@pswd).to receive(:get).with('bizapi.hosted.exosite.io', 'bob').once.and_return(nil)
85
+ expect(@pswd).to receive(:get).with(
86
+ 'bizapi.hosted.exosite.io', 'bob',
87
+ ).once.and_return(nil)
80
88
  expect(@acc).to receive(:error).once
81
89
  expect($terminal).to receive(:ask).once.and_return('dog')
82
90
  $cfg['auth.persist-basic'] = true
@@ -107,6 +115,9 @@ RSpec.describe MrMurano::Account, 'token' do
107
115
 
108
116
  ret = @acc.token
109
117
  expect(ret).to eq('ABCDEFGHIJKLMNOP')
118
+
119
+ # Remove all stub_request mocks.
120
+ WebMock.reset!
110
121
  end
111
122
 
112
123
  it 'gets an error' do
@@ -115,10 +126,14 @@ RSpec.describe MrMurano::Account, 'token' do
115
126
  .to_return(status: 401, body: {}.to_json)
116
127
 
117
128
  # Note that we stub out error and warning so nothing gets output.
118
- expect(MrMurano::HttpAuthed.instance).to receive(:error).exactly(3).times.and_return(nil)
129
+ expect(
130
+ MrMurano::HttpAuthed.instance
131
+ ).to receive(:error).exactly(3).times.and_return(nil)
119
132
  # The warning is about ENV['MURANO_PASSWORD'] specifying the password.
120
133
  expect(MrMurano::HttpAuthed.instance).to receive(:warning).once.and_return(nil)
121
134
  expect { @acc.token }.to raise_error(SystemExit).and output(//).to_stderr
135
+
136
+ WebMock.reset!
122
137
  end
123
138
 
124
139
  it 'uses existing token' do
@@ -147,13 +162,21 @@ RSpec.describe MrMurano::Account do
147
162
  $cfg['business.id'] = 'XYZxyz'
148
163
  $cfg['product.id'] = 'XYZ'
149
164
  $cfg['user.name'] = 'BoB@place.net'
165
+
166
+ # Reset the Net::HTTP object, which was configured with the old net.host, etc.
167
+ MrMurano::HttpAuthed.instance.http_reset
168
+
169
+ # Reset the Http mocks (probably not necessary).
170
+ WebMock.reset!
150
171
  stub_request_email_password
151
172
 
152
173
  @acc = MrMurano::Account.new
153
174
  MrMurano::HttpAuthed.instance.instance_variable_set(:@token_biz, 'TTTTTTTTTT')
154
175
  end
176
+
155
177
  after(:example) do
156
178
  ENV['MURANO_CONFIGFILE'] = @saved_cfg
179
+ WebMock.reset!
157
180
  end
158
181
 
159
182
  it 'initializes' do
@@ -172,8 +195,10 @@ RSpec.describe MrMurano::Account do
172
195
  role: 'admin',
173
196
  name: 'MPS', },
174
197
  ]
175
- stub_request(:get, 'https://bizapi.hosted.exosite.io/api:1/user/BoB@place.net/membership/')
176
- .to_return(body: bizlist)
198
+ stub_request(
199
+ :get,
200
+ 'https://bizapi.hosted.exosite.io/api:1/user/BoB@place.net/membership/',
201
+ ).to_return(body: bizlist)
177
202
 
178
203
  buslist = []
179
204
  buslist << MrMurano::Business.new(bizlist[0])
@@ -181,8 +206,11 @@ RSpec.describe MrMurano::Account do
181
206
 
182
207
  $cfg['user.name'] = 'BoB@place.net'
183
208
  stub_request_email_password
209
+
184
210
  ret = @acc.businesses
185
211
  expect(ret).to eq(buslist)
212
+
213
+ WebMock.reset!
186
214
  end
187
215
 
188
216
  it 'asks for account when missing' do
@@ -194,8 +222,10 @@ RSpec.describe MrMurano::Account do
194
222
  role: 'admin',
195
223
  name: 'MPS', },
196
224
  ]
197
- stub_request(:get, 'https://bizapi.hosted.exosite.io/api:1/user/BoB@place.net/membership/')
198
- .to_return(body: bizlist)
225
+ stub_request(
226
+ :get,
227
+ 'https://bizapi.hosted.exosite.io/api:1/user/BoB@place.net/membership/',
228
+ ).to_return(body: bizlist)
199
229
 
200
230
  buslist = []
201
231
  buslist << MrMurano::Business.new(bizlist[0])
@@ -209,6 +239,8 @@ RSpec.describe MrMurano::Account do
209
239
 
210
240
  ret = @acc.businesses
211
241
  expect(ret).to eq(buslist)
242
+
243
+ WebMock.reset!
212
244
  end
213
245
  end
214
246
  end