MuranoCLI 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -142,11 +142,13 @@ RSpec.describe MrMurano::Library do
142
142
  }
143
143
  tio.close
144
144
 
145
- ret = @srv.upload(tio.path, {:id=>"9K0",
146
- :name=>"debug",
147
- :alias=>"XYZ_debug",
148
- :solution_id=>"XYZ",
149
- })
145
+ ret = @srv.upload(tio.path,
146
+ MrMurano::Library::LibraryItem.new(
147
+ :id=>"9K0",
148
+ :name=>"debug",
149
+ :alias=>"XYZ_debug",
150
+ :solution_id=>"XYZ",
151
+ ))
150
152
  expect(ret)
151
153
  end
152
154
  end
@@ -169,11 +171,14 @@ RSpec.describe MrMurano::Library do
169
171
  }
170
172
  tio.close
171
173
 
172
- ret = @srv.upload(tio.path, {:id=>"9K0",
173
- :name=>"debug",
174
- :alias=>"XYZ_debug",
175
- :solution_id=>"XYZ",
176
- })
174
+ ret = @srv.upload(
175
+ tio.path,
176
+ MrMurano::Library::LibraryItem.new(
177
+ :id=>"9K0",
178
+ :name=>"debug",
179
+ :alias=>"XYZ_debug",
180
+ :solution_id=>"XYZ",
181
+ ))
177
182
  expect(ret)
178
183
  end
179
184
  end
@@ -193,11 +198,13 @@ RSpec.describe MrMurano::Library do
193
198
  tio.close
194
199
 
195
200
  expect(@srv).to receive(:error).and_return(nil)
196
- ret = @srv.upload(tio.path, {:id=>"9K0",
197
- :name=>"debug",
198
- :alias=>"XYZ_debug",
199
- :solution_id=>"XYZ",
200
- })
201
+ ret = @srv.upload(tio.path,
202
+ MrMurano::Library::LibraryItem.new(
203
+ :id=>"9K0",
204
+ :name=>"debug",
205
+ :alias=>"XYZ_debug",
206
+ :solution_id=>"XYZ",
207
+ ))
201
208
  expect(ret)
202
209
  end
203
210
  end
@@ -218,11 +225,13 @@ RSpec.describe MrMurano::Library do
218
225
 
219
226
  cacheFile = $cfg.file_at(@srv.cacheFileName)
220
227
  FileUtils.touch(cacheFile.to_path)
221
- ret = @srv.upload(tio.path, {:id=>"9K0",
222
- :name=>"debug",
223
- :alias=>"XYZ_debug",
224
- :solution_id=>"XYZ",
225
- })
228
+ ret = @srv.upload(tio.path,
229
+ MrMurano::Library::LibraryItem.new(
230
+ :id=>"9K0",
231
+ :name=>"debug",
232
+ :alias=>"XYZ_debug",
233
+ :solution_id=>"XYZ",
234
+ ))
226
235
  expect(ret)
227
236
  end
228
237
  end
@@ -247,11 +256,13 @@ RSpec.describe MrMurano::Library do
247
256
  :updated_at=>Time.now.getutc.to_datetime.iso8601(3)}
248
257
  }.to_yaml
249
258
  end
250
- ret = @srv.upload(tio.path, {:id=>"9K0",
251
- :name=>"debug",
252
- :alias=>"XYZ_debug",
253
- :solution_id=>"XYZ",
254
- })
259
+ ret = @srv.upload(tio.path,
260
+ MrMurano::Library::LibraryItem.new(
261
+ :id=>"9K0",
262
+ :name=>"debug",
263
+ :alias=>"XYZ_debug",
264
+ :solution_id=>"XYZ",
265
+ ))
255
266
  expect(ret)
256
267
  end
257
268
  end
@@ -429,28 +440,16 @@ RSpec.describe MrMurano::Library do
429
440
  expect(ret).to eq(["a", "b", "c/**/d/*.bob"])
430
441
  end
431
442
 
432
- it "raises on alias without service" do
433
- expect {
434
- @srv.mkname( {:event=>'bob'} )
435
- }.to raise_error %{Missing parts! {"event":"bob"}}
436
- end
437
-
438
- it "raises on alias without event" do
439
- expect {
440
- @srv.mkalias( {:service=>'bob'} )
441
- }.to raise_error %{Missing parts! {"service":"bob"}}
442
- end
443
-
444
- it "raises on name without service" do
443
+ it "raises on alias without name" do
445
444
  expect {
446
- @srv.mkalias( {:event=>'bob'} )
447
- }.to raise_error %{Missing parts! {"event":"bob"}}
445
+ @srv.mkname( MrMurano::Library::EventHandlerItem.new() )
446
+ }.to raise_error(NameError)
448
447
  end
449
448
 
450
- it "raises on name without event" do
449
+ it "raises on name without name" do
451
450
  expect {
452
- @srv.mkname( {:service=>'bob'} )
453
- }.to raise_error %{Missing parts! {"service":"bob"}}
451
+ @srv.mkalias( MrMurano::Library::EventHandlerItem.new() )
452
+ }.to raise_error(NameError)
454
453
  end
455
454
  end
456
455
 
@@ -182,59 +182,62 @@ RSpec.describe MrMurano::SyncUpDown do
182
182
  FileUtils.touch(@projectDir + '/tsud/ga/six.lua') # toadd
183
183
  @t = TSUD.new
184
184
  expect(@t).to receive(:list).once.and_return([
185
- {:name=>'one.lua'},{:name=>'two.lua'}, # tomod
186
- {:name=>'three.lua'},{:name=>'four.lua'}, # unchg
187
- {:name=>'seven.lua'},{:name=>'eight.lua'}, # todel
185
+ MrMurano::SyncUpDown::Item.new({:name=>'one.lua'}), # tomod
186
+ MrMurano::SyncUpDown::Item.new({:name=>'two.lua'}), # tomod
187
+ MrMurano::SyncUpDown::Item.new({:name=>'three.lua'}), # unchg
188
+ MrMurano::SyncUpDown::Item.new({:name=>'four.lua'}), # unchg
189
+ MrMurano::SyncUpDown::Item.new({:name=>'seven.lua'}), # todel
190
+ MrMurano::SyncUpDown::Item.new({:name=>'eight.lua'}), # todel
188
191
  ])
189
192
  expect(@t).to receive(:toRemoteItem).
190
193
  with(anything(), pathname_globs('**/one.lua')).
191
- and_return({:name=>'one.lua'})
194
+ and_return(MrMurano::SyncUpDown::Item.new({:name=>'one.lua'}))
192
195
  expect(@t).to receive(:toRemoteItem).
193
196
  with(anything(), pathname_globs('**/two.lua')).
194
- and_return({:name=>'two.lua'})
197
+ and_return(MrMurano::SyncUpDown::Item.new({:name=>'two.lua'}))
195
198
  expect(@t).to receive(:toRemoteItem).
196
199
  with(anything(), pathname_globs('**/three.lua')).
197
- and_return({:name=>'three.lua'})
200
+ and_return(MrMurano::SyncUpDown::Item.new({:name=>'three.lua'}))
198
201
  expect(@t).to receive(:toRemoteItem).
199
202
  with(anything(), pathname_globs('**/four.lua')).
200
- and_return({:name=>'four.lua'})
203
+ and_return(MrMurano::SyncUpDown::Item.new({:name=>'four.lua'}))
201
204
  expect(@t).to receive(:toRemoteItem).
202
205
  with(anything(), pathname_globs('**/five.lua')).
203
- and_return({:name=>'five.lua'})
206
+ and_return(MrMurano::SyncUpDown::Item.new({:name=>'five.lua'}))
204
207
  expect(@t).to receive(:toRemoteItem).
205
208
  with(anything(), pathname_globs('**/six.lua')).
206
- and_return({:name=>'six.lua'})
209
+ and_return(MrMurano::SyncUpDown::Item.new({:name=>'six.lua'}))
207
210
 
208
- expect(@t).to receive(:docmp).with(include({:name=>'one.lua'}),anything()).and_return(true)
209
- expect(@t).to receive(:docmp).with(include({:name=>'two.lua'}),anything()).and_return(true)
210
- expect(@t).to receive(:docmp).with(include({:name=>'three.lua'}),anything()).and_return(false)
211
- expect(@t).to receive(:docmp).with(include({:name=>'four.lua'}),anything()).and_return(false)
211
+ expect(@t).to receive(:docmp).with(have_attributes({:name=>'one.lua'}),anything()).and_return(true)
212
+ expect(@t).to receive(:docmp).with(have_attributes({:name=>'two.lua'}),anything()).and_return(true)
213
+ expect(@t).to receive(:docmp).with(have_attributes({:name=>'three.lua'}),anything()).and_return(false)
214
+ expect(@t).to receive(:docmp).with(have_attributes({:name=>'four.lua'}),anything()).and_return(false)
212
215
  end
213
216
 
214
217
  it "Returns all with no filter" do
215
218
  ret = @t.status
216
219
  expect(ret).to match({
217
220
  :unchg=>[
218
- {:name=>'three.lua', :synckey=>'three.lua',
219
- :local_path=> pathname_globs('**/three.lua')},
220
- {:name=>'four.lua', :synckey=>'four.lua',
221
- :local_path=>pathname_globs('**/four.lua')},
221
+ have_attributes({:name=>'three.lua', :synckey=>'three.lua',
222
+ :local_path=> pathname_globs('**/three.lua')}),
223
+ have_attributes({:name=>'four.lua', :synckey=>'four.lua',
224
+ :local_path=>pathname_globs('**/four.lua')}),
222
225
  ],
223
226
  :toadd=>[
224
- {:name=>'five.lua', :synckey=>'five.lua',
225
- :local_path=>pathname_globs('**/five.lua')},
226
- {:name=>'six.lua', :synckey=>'six.lua',
227
- :local_path=>pathname_globs('**/six.lua')},
227
+ have_attributes({:name=>'five.lua', :synckey=>'five.lua',
228
+ :local_path=>pathname_globs('**/five.lua')}),
229
+ have_attributes({:name=>'six.lua', :synckey=>'six.lua',
230
+ :local_path=>pathname_globs('**/six.lua')}),
228
231
  ],
229
232
  :todel=>[
230
- {:name=>'seven.lua', :synckey=>'seven.lua'},
231
- {:name=>'eight.lua', :synckey=>'eight.lua'},
233
+ have_attributes({:name=>'seven.lua', :synckey=>'seven.lua'}),
234
+ have_attributes({:name=>'eight.lua', :synckey=>'eight.lua'}),
232
235
  ],
233
236
  :tomod=>[
234
- {:name=>'one.lua', :synckey=>'one.lua',
235
- :local_path=>pathname_globs('**/one.lua')},
236
- {:name=>'two.lua', :synckey=>'two.lua',
237
- :local_path=>pathname_globs('**/two.lua')},
237
+ have_attributes({:name=>'one.lua', :synckey=>'one.lua',
238
+ :local_path=>pathname_globs('**/one.lua')}),
239
+ have_attributes({:name=>'two.lua', :synckey=>'two.lua',
240
+ :local_path=>pathname_globs('**/two.lua')}),
238
241
  ]})
239
242
  end
240
243
 
@@ -243,13 +246,13 @@ RSpec.describe MrMurano::SyncUpDown do
243
246
  expect(ret).to match({
244
247
  :unchg=>[ ],
245
248
  :toadd=>[
246
- {:name=>'six.lua', :synckey=>'six.lua',
247
- :local_path=>an_instance_of(Pathname)},
249
+ have_attributes(:name=>'six.lua', :synckey=>'six.lua',
250
+ :local_path=>an_instance_of(Pathname)),
248
251
  ],
249
252
  :todel=>[ ],
250
253
  :tomod=>[
251
- {:name=>'two.lua', :synckey=>'two.lua',
252
- :local_path=>an_instance_of(Pathname)},
254
+ have_attributes(:name=>'two.lua', :synckey=>'two.lua',
255
+ :local_path=>an_instance_of(Pathname)),
253
256
  ]})
254
257
  end
255
258
 
@@ -266,26 +269,26 @@ RSpec.describe MrMurano::SyncUpDown do
266
269
  ret = @t.status({:unselected=>true})
267
270
  expect(ret).to match({
268
271
  :unchg=>[
269
- {:name=>'three.lua', :synckey=>'three.lua', :selected=>true,
270
- :local_path=> pathname_globs('**/three.lua')},
271
- {:name=>'four.lua', :synckey=>'four.lua', :selected=>true,
272
- :local_path=>pathname_globs('**/four.lua')},
272
+ have_attributes(:name=>'three.lua', :synckey=>'three.lua', :selected=>true,
273
+ :local_path=> pathname_globs('**/three.lua')),
274
+ have_attributes(:name=>'four.lua', :synckey=>'four.lua', :selected=>true,
275
+ :local_path=>pathname_globs('**/four.lua')),
273
276
  ],
274
277
  :toadd=>[
275
- {:name=>'five.lua', :synckey=>'five.lua', :selected=>true,
276
- :local_path=>pathname_globs('**/five.lua')},
277
- {:name=>'six.lua', :synckey=>'six.lua', :selected=>true,
278
- :local_path=>pathname_globs('**/six.lua')},
278
+ have_attributes(:name=>'five.lua', :synckey=>'five.lua', :selected=>true,
279
+ :local_path=>pathname_globs('**/five.lua')),
280
+ have_attributes(:name=>'six.lua', :synckey=>'six.lua', :selected=>true,
281
+ :local_path=>pathname_globs('**/six.lua')),
279
282
  ],
280
283
  :todel=>[
281
- {:name=>'seven.lua', :selected=>true, :synckey=>'seven.lua'},
282
- {:name=>'eight.lua', :selected=>true, :synckey=>'eight.lua'},
284
+ have_attributes(:name=>'seven.lua', :selected=>true, :synckey=>'seven.lua'),
285
+ have_attributes(:name=>'eight.lua', :selected=>true, :synckey=>'eight.lua'),
283
286
  ],
284
287
  :tomod=>[
285
- {:name=>'one.lua', :synckey=>'one.lua', :selected=>true,
286
- :local_path=>pathname_globs('**/one.lua')},
287
- {:name=>'two.lua', :synckey=>'two.lua', :selected=>true,
288
- :local_path=>pathname_globs('**/two.lua')},
288
+ have_attributes(:name=>'one.lua', :synckey=>'one.lua', :selected=>true,
289
+ :local_path=>pathname_globs('**/one.lua')),
290
+ have_attributes(:name=>'two.lua', :synckey=>'two.lua', :selected=>true,
291
+ :local_path=>pathname_globs('**/two.lua')),
289
292
  ]})
290
293
  end
291
294
  end
@@ -396,7 +399,7 @@ RSpec.describe MrMurano::SyncUpDown do
396
399
  FileUtils.touch(@projectDir + '/tsud/one.lua')
397
400
  FileUtils.touch(@projectDir + '/tsud/two.lua')
398
401
 
399
- expect(@t).to receive(:upload).twice.with(kind_of(Pathname), kind_of(Hash), false)
402
+ expect(@t).to receive(:upload).twice.with(kind_of(Pathname), kind_of(MrMurano::SyncUpDown::Item), false)
400
403
  @t.syncup({:create=>true})
401
404
  end
402
405
 
@@ -404,10 +407,11 @@ RSpec.describe MrMurano::SyncUpDown do
404
407
  FileUtils.touch(@projectDir + '/tsud/one.lua')
405
408
  FileUtils.touch(@projectDir + '/tsud/two.lua')
406
409
  expect(@t).to receive(:list).once.and_return([
407
- {:name=>'one.lua'},{:name=>'two.lua'}
410
+ MrMurano::SyncUpDown::Item.new({:name=>'one.lua'}),
411
+ MrMurano::SyncUpDown::Item.new({:name=>'two.lua'})
408
412
  ])
409
413
 
410
- expect(@t).to receive(:upload).twice.with(kind_of(Pathname), kind_of(Hash), true)
414
+ expect(@t).to receive(:upload).twice.with(kind_of(Pathname), kind_of(MrMurano::SyncUpDown::Item), true)
411
415
  expect(@t).to receive(:toRemoteItem).and_return(
412
416
  {:name=>'one.lua'},{:name=>'two.lua'}
413
417
  )
@@ -432,7 +436,8 @@ RSpec.describe MrMurano::SyncUpDown do
432
436
 
433
437
  it "creates" do
434
438
  expect(@t).to receive(:list).once.and_return([
435
- {:name=>'one.lua'},{:name=>'two.lua'}
439
+ MrMurano::SyncUpDown::Item.new({:name=>'one.lua'}),
440
+ MrMurano::SyncUpDown::Item.new({:name=>'two.lua'})
436
441
  ])
437
442
 
438
443
  expect(@t).to receive(:fetch).twice.and_yield("--foo\n")
@@ -445,12 +450,14 @@ RSpec.describe MrMurano::SyncUpDown do
445
450
  FileUtils.touch(@projectDir + '/tsud/one.lua')
446
451
  FileUtils.touch(@projectDir + '/tsud/two.lua')
447
452
  expect(@t).to receive(:list).once.and_return([
448
- {:name=>'one.lua'},{:name=>'two.lua'}
453
+ MrMurano::SyncUpDown::Item.new({:name=>'one.lua'}),
454
+ MrMurano::SyncUpDown::Item.new({:name=>'two.lua'})
449
455
  ])
450
456
 
451
457
  expect(@t).to receive(:fetch).twice.and_yield("--foo\n")
452
458
  expect(@t).to receive(:toRemoteItem).and_return(
453
- {:name=>'one.lua'},{:name=>'two.lua'}
459
+ MrMurano::SyncUpDown::Item.new({:name=>'one.lua'}),
460
+ MrMurano::SyncUpDown::Item.new({:name=>'two.lua'})
454
461
  )
455
462
  @t.syncdown({:update=>true})
456
463
  expect(FileTest.exist?(@projectDir + '/tsud/one.lua')).to be true
@@ -458,13 +465,13 @@ RSpec.describe MrMurano::SyncUpDown do
458
465
  end
459
466
  end
460
467
 
461
- context "bundles" do
462
- before(:example) do
463
- FileUtils.mkpath(@projectDir + '/tsud')
464
- FileUtils.mkpath(@projectDir + '/bundles/mybun/tsud')
465
- @t = TSUD.new
466
- end
467
-
468
+ # context "bundles" do
469
+ # before(:example) do
470
+ # FileUtils.mkpath(@projectDir + '/tsud')
471
+ # FileUtils.mkpath(@projectDir + '/bundles/mybun/tsud')
472
+ # @t = TSUD.new
473
+ # end
474
+ #
468
475
  # it "finds items in bundles." do
469
476
  # FileUtils.touch(@projectDir + '/tsud/one.lua')
470
477
  # FileUtils.touch(@projectDir + '/bundles/mybun/tsud/two.lua')
@@ -481,15 +488,15 @@ RSpec.describe MrMurano::SyncUpDown do
481
488
  # :local_path=>an_instance_of(Pathname)},
482
489
  # ])
483
490
  # end
484
-
485
- it "Doesn't download a bundled item" do
486
- FileUtils.touch(@projectDir + '/tsud/one.lua')
487
- lp = Pathname.new(@projectDir + '/tsud/one.lua').realpath
488
-
489
- expect(@t).to receive(:warning).once.with(/Not downloading into bundled item.*/)
490
-
491
- @t.download(lp, {:bundled=>true, :name=>'one.lua'})
492
- end
493
- end
491
+ #
492
+ # it "Doesn't download a bundled item" do
493
+ # FileUtils.touch(@projectDir + '/tsud/one.lua')
494
+ # lp = Pathname.new(@projectDir + '/tsud/one.lua').realpath
495
+ #
496
+ # expect(@t).to receive(:warning).once.with(/Not downloading into bundled item.*/)
497
+ #
498
+ # @t.download(lp, {:bundled=>true, :name=>'one.lua'})
499
+ # end
500
+ # end
494
501
  end
495
502
  # vim: set ai et sw=2 ts=2 :
@@ -16,15 +16,309 @@ RSpec.describe 'mr init', :cmd do
16
16
  end
17
17
  end
18
18
 
19
- # TODO The way init works is changing with the ProjectFile
20
- # So hold off on this test.
21
- # it "Asks to import if Solutionfile exists" do
22
- # FileUtils.touch('Solutionfile.json')
23
- # out, err, status = Open3.capture3(capcmd('murano', 'init'), :stdin_data=>'y')
24
- # expect(out).to eq("\nA Solutionfile.json exists, Do you want exit and run `murano config import` instead? [yN]\n")
25
- # expect(err).to eq("")
26
- # expect(status.exitstatus).to eq(0)
27
- # end
19
+ context "in empty directory", :needs_password do
20
+ context "with" do
21
+ # Setup a solution and product to use.
22
+ # Doing this in a context with before&after so that after runs even when test
23
+ # fails.
24
+ before(:example) do
25
+ @project_name = rname('initEmpty')
26
+ out, err, status = Open3.capture3(capcmd('murano', 'solution', 'create', @project_name, '--save'))
27
+ expect(err).to eq('')
28
+ expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
29
+ expect(status.exitstatus).to eq(0)
30
+
31
+ out, err, status = Open3.capture3(capcmd('murano', 'product', 'create', @project_name, '--save'))
32
+ expect(err).to eq('')
33
+ expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
34
+ expect(status.exitstatus).to eq(0)
35
+
36
+ # delete all of this so it is a empty directory.
37
+ FileUtils.remove_entry('.murano')
38
+ end
39
+ after(:example) do
40
+ out, err, status = Open3.capture3(capcmd('murano', 'solution', 'delete', @project_name))
41
+ expect(out).to eq('')
42
+ expect(err).to eq('')
43
+ expect(status.exitstatus).to eq(0)
44
+
45
+ out, err, status = Open3.capture3(capcmd('murano', 'product', 'delete', @project_name))
46
+ expect(out).to eq('')
47
+ expect(err).to eq('')
48
+ expect(status.exitstatus).to eq(0)
49
+ end
50
+
51
+ it "existing solution and product" do
52
+ # The test account will have one business, one product, and one solution.
53
+ # So it won't ask any questions.
54
+ out, err, status = Open3.capture3(capcmd('murano', 'init'))
55
+ expect(out.lines).to match_array([
56
+ "\n",
57
+ a_string_starting_with('Found project base directory at '),
58
+ "\n",
59
+ a_string_starting_with('Using account '),
60
+ a_string_starting_with('Using Business ID already set to '),
61
+ "\n",
62
+ a_string_starting_with('You only have one solution; using '),
63
+ "\n",
64
+ a_string_starting_with('You only have one product; using '),
65
+ "\n",
66
+ a_string_matching(%r{Ok, In business ID: \w+ using Solution ID: \w+ with Product ID: \w+}),
67
+ "Writing an initial Project file: project.murano\n",
68
+ "Default directories created\n",
69
+ ])
70
+ expect(err).to eq("")
71
+ expect(status.exitstatus).to eq(0)
72
+
73
+ expect(File.directory?(".murano")).to be true
74
+ expect(File.exist?(".murano/config")).to be true
75
+ expect(File.directory?("routes")).to be true
76
+ expect(File.directory?("services")).to be true
77
+ expect(File.directory?("files")).to be true
78
+ expect(File.directory?("modules")).to be true
79
+ expect(File.directory?("specs")).to be true
80
+ end
81
+ end
82
+
83
+ context "without", :needs_password do
84
+ before(:example) do
85
+ @project_name = rname('initCreating')
86
+ end
87
+ after(:example) do
88
+ out, err, status = Open3.capture3(capcmd('murano', 'solution', 'delete', @project_name))
89
+ expect(out).to eq('')
90
+ expect(err).to eq('')
91
+ expect(status.exitstatus).to eq(0)
92
+
93
+ out, err, status = Open3.capture3(capcmd('murano', 'product', 'delete', @project_name))
94
+ expect(out).to eq('')
95
+ expect(err).to eq('')
96
+ expect(status.exitstatus).to eq(0)
97
+ end
98
+
99
+ it "existing solution and product" do
100
+ # The test account will have one business.
101
+ # It will ask to create a solution and product.
102
+ # !!!! the 8 is hardcoded indention here !!!!
103
+ data = <<-EOT.gsub(/^ {8}/, '')
104
+ #{@project_name}
105
+ #{@project_name}
106
+ EOT
107
+ out, err, status = Open3.capture3(capcmd('murano', 'init'), :stdin_data=>data)
108
+ expect(out.lines).to match_array([
109
+ "\n",
110
+ a_string_starting_with('Found project base directory at '),
111
+ "\n",
112
+ a_string_starting_with('Using account '),
113
+ a_string_starting_with('Using Business ID already set to '),
114
+ "\n",
115
+ "You don't have any solutions; lets create one\n",
116
+ "Solution Name? \n",
117
+ "You don't have any products; lets create one\n",
118
+ "Product Name? \n",
119
+ a_string_matching(%r{Ok, In business ID: \w+ using Solution ID: \w+ with Product ID: \w+}),
120
+ "Writing an initial Project file: project.murano\n",
121
+ "Default directories created\n",
122
+ ])
123
+ expect(err).to eq("")
124
+ expect(status.exitstatus).to eq(0)
125
+
126
+ expect(File.directory?(".murano")).to be true
127
+ expect(File.exist?(".murano/config")).to be true
128
+ expect(File.directory?("routes")).to be true
129
+ expect(File.directory?("services")).to be true
130
+ expect(File.directory?("files")).to be true
131
+ expect(File.directory?("modules")).to be true
132
+ expect(File.directory?("specs")).to be true
133
+ end
134
+ end
135
+ end
136
+
137
+ context "in existing project directory", :needs_password do
138
+ before(:example) do
139
+ FileUtils.cp_r(File.join(@testdir, 'spec/fixtures/syncable_content/.'), '.')
140
+ FileUtils.move('assets','files')
141
+
142
+ @project_name = rname('initEmpty')
143
+ out, err, status = Open3.capture3(capcmd('murano', 'solution', 'create', @project_name, '--save'))
144
+ expect(err).to eq('')
145
+ expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
146
+ expect(status.exitstatus).to eq(0)
147
+
148
+ out, err, status = Open3.capture3(capcmd('murano', 'product', 'create', @project_name, '--save'))
149
+ expect(err).to eq('')
150
+ expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
151
+ expect(status.exitstatus).to eq(0)
152
+ end
153
+ after(:example) do
154
+ Dir.chdir(ENV['HOME']) do
155
+ out, err, status = Open3.capture3(capcmd('murano', 'solution', 'delete', @project_name))
156
+ expect(out).to eq('')
157
+ expect(err).to eq('')
158
+ expect(status.exitstatus).to eq(0)
159
+
160
+ out, err, status = Open3.capture3(capcmd('murano', 'product', 'delete', @project_name))
161
+ expect(out).to eq('')
162
+ expect(err).to eq('')
163
+ expect(status.exitstatus).to eq(0)
164
+ end
165
+ end
166
+
167
+ it "without ProjectFile" do
168
+ # The test account will have one business, one product, and one solution.
169
+ # So it won't ask any questions.
170
+ out, err, status = Open3.capture3(capcmd('murano', 'init'))
171
+ expect(out.lines).to match_array([
172
+ "\n",
173
+ a_string_starting_with('Found project base directory at '),
174
+ "\n",
175
+ a_string_starting_with('Using account '),
176
+ a_string_starting_with('Using Business ID already set to '),
177
+ "\n",
178
+ a_string_starting_with('Using Solution ID already set to '),
179
+ "\n",
180
+ a_string_starting_with('Using Product ID already set to '),
181
+ "\n",
182
+ a_string_matching(%r{Ok, In business ID: \w+ using Solution ID: \w+ with Product ID: \w+}),
183
+ "Writing an initial Project file: project.murano\n",
184
+ "Default directories created\n",
185
+ ])
186
+ expect(err).to eq("")
187
+ expect(status.exitstatus).to eq(0)
188
+
189
+ expect(File.directory?(".murano")).to be true
190
+ expect(File.exist?(".murano/config")).to be true
191
+ expect(File.directory?("routes")).to be true
192
+ expect(File.directory?("services")).to be true
193
+ expect(File.directory?("files")).to be true
194
+ expect(File.directory?("modules")).to be true
195
+ expect(File.directory?("specs")).to be true
196
+ end
197
+
198
+ it "with ProjectFile" do
199
+ FileUtils.copy(File.join(@testdir, 'spec/fixtures/ProjectFiles/only_meta.yaml'), 'test.murano')
200
+ # The test account will have one business, one product, and one solution.
201
+ # So it won't ask any questions.
202
+ out, err, status = Open3.capture3(capcmd('murano', 'init'))
203
+ expect(out.lines).to match_array([
204
+ "\n",
205
+ a_string_starting_with('Found project base directory at '),
206
+ "\n",
207
+ a_string_starting_with('Using account '),
208
+ a_string_starting_with('Using Business ID already set to '),
209
+ "\n",
210
+ a_string_starting_with('Using Solution ID already set to '),
211
+ "\n",
212
+ a_string_starting_with('Using Product ID already set to '),
213
+ "\n",
214
+ a_string_matching(%r{Ok, In business ID: \w+ using Solution ID: \w+ with Product ID: \w+}),
215
+ "Default directories created\n",
216
+ ])
217
+ expect(err).to eq("")
218
+ expect(status.exitstatus).to eq(0)
219
+
220
+ expect(File.directory?(".murano")).to be true
221
+ expect(File.exist?(".murano/config")).to be true
222
+ expect(File.directory?("routes")).to be true
223
+ expect(File.directory?("services")).to be true
224
+ expect(File.directory?("files")).to be true
225
+ expect(File.directory?("modules")).to be true
226
+ expect(File.directory?("specs")).to be true
227
+ end
228
+
229
+ it "with SolutionFile 0.2.0" do
230
+ File.open('Solutionfile.json', 'wb') do |io|
231
+ io << {
232
+ :default_page => 'index.html',
233
+ :file_dir => 'files',
234
+ :custom_api => 'routes/manyRoutes.lua',
235
+ :modules => {
236
+ :table_util => 'modules/table_util.lua'
237
+ },
238
+ :event_handler => {
239
+ :device => {
240
+ :datapoint => 'services/devdata.lua'
241
+ }
242
+ }
243
+ }.to_json
244
+ end
245
+ # The test account will have one business, one product, and one solution.
246
+ # So it won't ask any questions.
247
+ out, err, status = Open3.capture3(capcmd('murano', 'init'))
248
+ expect(out.lines).to match_array([
249
+ "\n",
250
+ a_string_starting_with('Found project base directory at '),
251
+ "\n",
252
+ a_string_starting_with('Using account '),
253
+ a_string_starting_with('Using Business ID already set to '),
254
+ "\n",
255
+ a_string_starting_with('Using Solution ID already set to '),
256
+ "\n",
257
+ a_string_starting_with('Using Product ID already set to '),
258
+ "\n",
259
+ a_string_matching(%r{Ok, In business ID: \w+ using Solution ID: \w+ with Product ID: \w+}),
260
+ "Writing an initial Project file: project.murano\n",
261
+ "Default directories created\n",
262
+ ])
263
+ expect(err).to eq("")
264
+ expect(status.exitstatus).to eq(0)
265
+
266
+ expect(File.directory?(".murano")).to be true
267
+ expect(File.exist?(".murano/config")).to be true
268
+ expect(File.directory?("routes")).to be true
269
+ expect(File.directory?("services")).to be true
270
+ expect(File.directory?("files")).to be true
271
+ expect(File.directory?("modules")).to be true
272
+ expect(File.directory?("specs")).to be true
273
+ end
274
+
275
+ it "with SolutionFile 0.3.0" do
276
+ File.open('Solutionfile.json', 'wb') do |io|
277
+ io << {
278
+ :default_page => 'index.html',
279
+ :assets => 'files',
280
+ :routes => 'routes/manyRoutes.lua',
281
+ :modules => {
282
+ :table_util => 'modules/table_util.lua'
283
+ },
284
+ :services => {
285
+ :device => {
286
+ :datapoint => 'services/devdata.lua'
287
+ }
288
+ },
289
+ :version => '0.3.0',
290
+ }.to_json
291
+ end
292
+ # The test account will have one business, one product, and one solution.
293
+ # So it won't ask any questions.
294
+ out, err, status = Open3.capture3(capcmd('murano', 'init'))
295
+ expect(out.lines).to match_array([
296
+ "\n",
297
+ a_string_starting_with('Found project base directory at '),
298
+ "\n",
299
+ a_string_starting_with('Using account '),
300
+ a_string_starting_with('Using Business ID already set to '),
301
+ "\n",
302
+ a_string_starting_with('Using Solution ID already set to '),
303
+ "\n",
304
+ a_string_starting_with('Using Product ID already set to '),
305
+ "\n",
306
+ a_string_matching(%r{Ok, In business ID: \w+ using Solution ID: \w+ with Product ID: \w+}),
307
+ "Writing an initial Project file: project.murano\n",
308
+ "Default directories created\n",
309
+ ])
310
+ expect(err).to eq("")
311
+ expect(status.exitstatus).to eq(0)
312
+
313
+ expect(File.directory?(".murano")).to be true
314
+ expect(File.exist?(".murano/config")).to be true
315
+ expect(File.directory?("routes")).to be true
316
+ expect(File.directory?("services")).to be true
317
+ expect(File.directory?("files")).to be true
318
+ expect(File.directory?("modules")).to be true
319
+ expect(File.directory?("specs")).to be true
320
+ end
321
+ end
28
322
 
29
323
  end
30
324
  # vim: set ai et sw=2 ts=2 :