Skip to content

Commit 830a052

Browse files
committed
Updated error messages and integration tests
1 parent ebb1e0d commit 830a052

File tree

5 files changed

+91
-38
lines changed

5 files changed

+91
-38
lines changed

commands/cmderrors/cmderrors.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ func composeErrorMsg(msg string, cause error) string {
3131
if cause == nil {
3232
return msg
3333
}
34+
if msg == "" {
35+
return cause.Error()
36+
}
3437
return fmt.Sprintf("%v: %v", msg, cause)
3538
}
3639

commands/service_profile_lib_remove.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func (s *arduinoCoreServerImpl) ProfileLibRemove(ctx context.Context, req *rpc.P
5353
}
5454
removedLib, err := profile.RemoveLibrary(libToRemove)
5555
if err != nil {
56-
return nil, &cmderrors.InvalidArgumentError{Message: "failed to remove library", Cause: err}
56+
return nil, &cmderrors.InvalidArgumentError{Cause: err}
5757
}
5858

5959
err = projectFilePath.WriteFile([]byte(sk.Project.AsYaml()))

internal/arduino/sketch/profiles.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,9 @@ func (l *ProfileLibraryReference) String() string {
395395
if l.InstallDir != nil {
396396
return fmt.Sprintf("%s@dir:%s", l.Library, l.InstallDir)
397397
}
398+
if l.Version == nil {
399+
return l.Library
400+
}
398401
return fmt.Sprintf("%s@%s", l.Library, l.Version)
399402
}
400403

internal/cli/profile/lib.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ func runLibRemoveCommand(ctx context.Context, args []string, srv rpc.ArduinoCore
165165
},
166166
})
167167
if err != nil {
168-
feedback.Fatal(i18n.Tr("Error removing %s from the profile %s: %v", lib.Name, profileArg.Get(), err), feedback.ErrGeneric)
168+
feedback.Fatal(fmt.Sprintf("%s: %v",
169+
i18n.Tr("Error removing library %[1]s from the profile", lib.Name), err), feedback.ErrGeneric)
169170
}
170171
feedback.PrintResult(libRemoveResult{
171172
Library: result.NewProfileLibraryReference_IndexLibraryResult(resp.GetLibrary().GetIndexLibrary()),

internal/integrationtest/profiles/profiles_test.go

Lines changed: 82 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -272,15 +272,9 @@ func TestProfileLib(t *testing.T) {
272272
_, _, err := cli.Run("core", "update-index")
273273
require.NoError(t, err)
274274

275-
_, _, err = cli.Run("sketch", "new", cli.SketchbookDir().Join("Simple").String())
276-
require.NoError(t, err)
277-
278275
_, _, err = cli.Run("core", "install", "arduino:avr")
279276
require.NoError(t, err)
280277

281-
_, _, err = cli.Run("profile", "init", cli.SketchbookDir().Join("Simple").String(), "-m", "Uno", "-b", "arduino:avr:uno")
282-
require.NoError(t, err)
283-
284278
integrationtest.CLISubtests{
285279
{"AddLibToDefaultProfile", addLibToDefaultProfile},
286280
{"ChangeLibVersionDefaultProfile", changeLibVersionDefaultProfile},
@@ -291,43 +285,93 @@ func TestProfileLib(t *testing.T) {
291285
}
292286

293287
func addLibToDefaultProfile(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
294-
_, _, err := cli.Run("profile", "lib", "add", "Modulino@0.5.0", "--dest-dir", cli.SketchbookDir().Join("Simple").String())
288+
sk := cli.SketchbookDir().Join("addLibToDefaultProfile")
289+
_, _, err := cli.Run("sketch", "new", sk.String())
295290
require.NoError(t, err)
296-
fileContent, err := cli.SketchbookDir().Join("Simple", "sketch.yaml").ReadFile()
291+
_, _, err = cli.Run("profile", "init", sk.String(), "-m", "Uno", "-b", "arduino:avr:uno")
297292
require.NoError(t, err)
298-
require.Equal(t, "profiles:\n Uno:\n fqbn: arduino:avr:uno\n platforms:\n - platform: arduino:avr (1.8.6)\n libraries:\n - Modulino (0.5.0)\n\ndefault_profile: Uno\n", string(fileContent))
299-
}
300293

301-
func changeLibVersionDefaultProfile(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
302-
fileContent, err := cli.SketchbookDir().Join("Simple", "sketch.yaml").ReadFile()
294+
out, _, err := cli.Run("profile", "lib", "add", "Modulino@0.5.0", "--dest-dir", sk.String(), "--json")
303295
require.NoError(t, err)
304-
require.Equal(t, "profiles:\n Uno:\n fqbn: arduino:avr:uno\n platforms:\n - platform: arduino:avr (1.8.6)\n libraries:\n - Modulino (0.5.0)\n\ndefault_profile: Uno\n", string(fileContent))
296+
requirejson.Parse(t, out).Query(".added_libraries").MustContain(`[{"name":"Modulino", "version":"0.5.0"}]`)
305297

306-
_, _, err = cli.Run("profile", "lib", "add", "Modulino@0.4.0", "--dest-dir", cli.SketchbookDir().Join("Simple").String())
298+
fileContent, err := sk.Join("sketch.yaml").ReadFile()
307299
require.NoError(t, err)
308-
fileContent, err = cli.SketchbookDir().Join("Simple", "sketch.yaml").ReadFile()
300+
require.Contains(t, string(fileContent), " - Modulino (0.5.0)\n")
301+
require.Contains(t, string(fileContent), " - Arduino_LSM6DSOX (") // dependency added as well
302+
}
303+
304+
func changeLibVersionDefaultProfile(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
305+
sk := cli.SketchbookDir().Join("changeLibVersionDefaultProfile")
306+
_, _, err := cli.Run("sketch", "new", sk.String())
309307
require.NoError(t, err)
310-
require.Equal(t, "profiles:\n Uno:\n fqbn: arduino:avr:uno\n platforms:\n - platform: arduino:avr (1.8.6)\n libraries:\n - Modulino (0.4.0)\n\ndefault_profile: Uno\n", string(fileContent))
308+
_, _, err = cli.Run("profile", "init", sk.String(), "-m", "Uno", "-b", "arduino:avr:uno")
309+
require.NoError(t, err)
310+
311+
{
312+
out, _, err := cli.Run("profile", "lib", "add", "Modulino@0.5.0", "--dest-dir", sk.String(), "--json")
313+
outjson := requirejson.Parse(t, out)
314+
outjson.Query(".added_libraries").MustContain(`[{"name":"Modulino", "version":"0.5.0"},{"name":"Arduino_LSM6DSOX"}]`)
315+
outjson.Query(".skipped_libraries").LengthMustEqualTo(0)
316+
317+
fileContent, err := sk.Join("sketch.yaml").ReadFile()
318+
require.NoError(t, err)
319+
require.Contains(t, string(fileContent), " - Modulino (0.5.0)\n")
320+
require.Contains(t, string(fileContent), " - Arduino_LSM6DSOX (") // dependency added as well
321+
}
322+
323+
{
324+
out, _, err := cli.Run("profile", "lib", "add", "Modulino@0.4.0", "--dest-dir", sk.String(), "--json")
325+
require.NoError(t, err)
326+
outjson := requirejson.Parse(t, out)
327+
outjson.Query(".added_libraries").MustContain(`[{"name":"Modulino", "version":"0.4.0"}]`)
328+
outjson.Query(".skipped_libraries").MustContain(`[{"name":"Arduino_LSM6DSOX"}]`)
329+
330+
fileContent, err := sk.Join("sketch.yaml").ReadFile()
331+
require.NoError(t, err)
332+
require.Contains(t, string(fileContent), " - Modulino (0.4.0)\n")
333+
}
311334
}
312335

313336
func removeLibFromDefaultProfile(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
314-
_, _, err := cli.Run("profile", "lib", "remove", "Modulino", "--dest-dir", cli.SketchbookDir().Join("Simple").String())
337+
sk := cli.SketchbookDir().Join("removeLibFromDefaultProfile")
338+
_, _, err := cli.Run("sketch", "new", sk.String())
315339
require.NoError(t, err)
316-
fileContent, err := cli.SketchbookDir().Join("Simple", "sketch.yaml").ReadFile()
340+
_, _, err = cli.Run("profile", "init", sk.String(), "-m", "Uno", "-b", "arduino:avr:uno")
317341
require.NoError(t, err)
318-
require.Equal(t, "profiles:\n Uno:\n fqbn: arduino:avr:uno\n platforms:\n - platform: arduino:avr (1.8.6)\n\ndefault_profile: Uno\n", string(fileContent))
342+
343+
_, _, err = cli.Run("profile", "lib", "add", "Modulino@0.5.0", "--dest-dir", sk.String(), "--json")
344+
require.NoError(t, err)
345+
346+
_, _, err = cli.Run("profile", "lib", "remove", "Modulino", "--dest-dir", sk.String())
347+
require.NoError(t, err)
348+
fileContent, err := sk.Join("sketch.yaml").ReadFile()
349+
require.NoError(t, err)
350+
require.NotContains(t, string(fileContent), " - Modulino")
319351
}
320352

321353
func addInexistentLibToDefaultProfile(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
322-
_, stderr, err := cli.Run("profile", "lib", "add", "foobar", "--dest-dir", cli.SketchbookDir().Join("Simple").String())
354+
sk := cli.SketchbookDir().Join("addInexistentLibToDefaultProfile")
355+
_, _, err := cli.Run("sketch", "new", sk.String())
356+
require.NoError(t, err)
357+
_, _, err = cli.Run("profile", "init", sk.String(), "-m", "Uno", "-b", "arduino:avr:uno")
358+
require.NoError(t, err)
359+
360+
_, stderr, err := cli.Run("profile", "lib", "add", "foobar", "--dest-dir", sk.String())
323361
require.Error(t, err)
324362
require.Equal(t, "Error adding foobar to the profile : Library 'foobar@latest' not found\n", string(stderr))
325363
}
326364

327365
func removeLibNotInDefaultProfile(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
328-
_, stderr, err := cli.Run("profile", "lib", "remove", "Arduino_JSON", "--dest-dir", cli.SketchbookDir().Join("Simple").String())
366+
sk := cli.SketchbookDir().Join("removeLibNotInDefaultProfile")
367+
_, _, err := cli.Run("sketch", "new", sk.String())
368+
require.NoError(t, err)
369+
_, _, err = cli.Run("profile", "init", sk.String(), "-m", "Uno", "-b", "arduino:avr:uno")
370+
require.NoError(t, err)
371+
372+
_, stderr, err := cli.Run("profile", "lib", "remove", "Arduino_JSON", "--dest-dir", sk.String())
329373
require.Error(t, err)
330-
require.Equal(t, "Error removing Arduino_JSON from the profile : Library 'Arduino_JSON' not found\n", string(stderr))
374+
require.Equal(t, "Error removing library Arduino_JSON from the profile: Library 'Arduino_JSON' not found\n", string(stderr))
331375
}
332376

333377
func TestProfileLibSpecificProfile(t *testing.T) {
@@ -338,30 +382,31 @@ func TestProfileLibSpecificProfile(t *testing.T) {
338382
_, _, err := cli.Run("core", "update-index")
339383
require.NoError(t, err)
340384

341-
_, _, err = cli.Run("sketch", "new", cli.SketchbookDir().Join("Simple").String())
385+
sk := cli.SketchbookDir().Join("Simple")
386+
_, _, err = cli.Run("sketch", "new", sk.String())
342387
require.NoError(t, err)
343388

344389
_, _, err = cli.Run("core", "install", "arduino:avr")
345390
require.NoError(t, err)
346391

347-
_, _, err = cli.Run("profile", "init", cli.SketchbookDir().Join("Simple").String(), "-m", "Uno", "-b", "arduino:avr:uno")
392+
_, _, err = cli.Run("profile", "init", sk.String(), "-m", "Uno", "-b", "arduino:avr:uno")
348393
require.NoError(t, err)
349394

350395
// Add a second profile
351-
_, _, err = cli.Run("profile", "init", cli.SketchbookDir().Join("Simple").String(), "-m", "my_profile", "-b", "arduino:avr:uno")
396+
_, _, err = cli.Run("profile", "init", sk.String(), "-m", "my_profile", "-b", "arduino:avr:uno")
352397
require.NoError(t, err)
353398

354399
// Add library to a specific profile
355-
_, _, err = cli.Run("profile", "lib", "add", "Modulino@0.5.0", "-m", "my_profile", "--dest-dir", cli.SketchbookDir().Join("Simple").String())
400+
_, _, err = cli.Run("profile", "lib", "add", "Modulino@0.5.0", "-m", "my_profile", "--dest-dir", sk.String(), "--no-deps")
356401
require.NoError(t, err)
357-
fileContent, err := cli.SketchbookDir().Join("Simple", "sketch.yaml").ReadFile()
402+
fileContent, err := sk.Join("sketch.yaml").ReadFile()
358403
require.NoError(t, err)
359404
require.Contains(t, string(fileContent), " my_profile:\n fqbn: arduino:avr:uno\n platforms:\n - platform: arduino:avr (1.8.6)\n libraries:\n - Modulino (0.5.0)\n")
360405

361406
// Remove library from a specific profile
362-
_, _, err = cli.Run("profile", "lib", "remove", "Modulino", "-m", "my_profile", "--dest-dir", cli.SketchbookDir().Join("Simple").String())
407+
_, _, err = cli.Run("profile", "lib", "remove", "Modulino", "-m", "my_profile", "--dest-dir", sk.String())
363408
require.NoError(t, err)
364-
fileContent, err = cli.SketchbookDir().Join("Simple", "sketch.yaml").ReadFile()
409+
fileContent, err = sk.Join("sketch.yaml").ReadFile()
365410
require.NoError(t, err)
366411
require.NotContains(t, string(fileContent), "- Modulino (0.5.0)")
367412
}
@@ -374,33 +419,34 @@ func TestProfileSetDefault(t *testing.T) {
374419
_, _, err := cli.Run("core", "update-index")
375420
require.NoError(t, err)
376421

377-
_, _, err = cli.Run("sketch", "new", cli.SketchbookDir().Join("Simple").String())
422+
sk := cli.SketchbookDir().Join("Simple")
423+
_, _, err = cli.Run("sketch", "new", sk.String())
378424
require.NoError(t, err)
379425

380426
_, _, err = cli.Run("core", "install", "arduino:avr")
381427
require.NoError(t, err)
382428

383-
_, _, err = cli.Run("profile", "init", cli.SketchbookDir().Join("Simple").String(), "-m", "Uno", "-b", "arduino:avr:uno")
429+
_, _, err = cli.Run("profile", "init", sk.String(), "-m", "Uno", "-b", "arduino:avr:uno")
384430
require.NoError(t, err)
385431

386432
// Add a second profile
387-
_, _, err = cli.Run("profile", "init", cli.SketchbookDir().Join("Simple").String(), "-m", "my_profile", "-b", "arduino:avr:uno")
433+
_, _, err = cli.Run("profile", "init", sk.String(), "-m", "my_profile", "-b", "arduino:avr:uno")
388434
require.NoError(t, err)
389-
fileContent, err := cli.SketchbookDir().Join("Simple", "sketch.yaml").ReadFileAsLines()
435+
fileContent, err := sk.Join("sketch.yaml").ReadFileAsLines()
390436
require.NoError(t, err)
391437
require.Contains(t, fileContent, "default_profile: Uno")
392438
require.NotContains(t, fileContent, "default_profile: my_profile")
393439

394440
// Change default profile
395-
_, _, err = cli.Run("profile", "set-default", "my_profile", "--dest-dir", cli.SketchbookDir().Join("Simple").String())
441+
_, _, err = cli.Run("profile", "set-default", "my_profile", "--dest-dir", sk.String())
396442
require.NoError(t, err)
397-
fileContent, err = cli.SketchbookDir().Join("Simple", "sketch.yaml").ReadFileAsLines()
443+
fileContent, err = sk.Join("sketch.yaml").ReadFileAsLines()
398444
require.NoError(t, err)
399445
require.NotContains(t, fileContent, "default_profile: Uno")
400446
require.Contains(t, fileContent, "default_profile: my_profile")
401447

402448
// Changing to an inexistent profile returns an error
403-
_, stderr, err := cli.Run("profile", "set-default", "inexistent_profile", "--dest-dir", cli.SketchbookDir().Join("Simple").String())
449+
_, stderr, err := cli.Run("profile", "set-default", "inexistent_profile", "--dest-dir", sk.String())
404450
require.Error(t, err)
405451
require.Equal(t, "Cannot set inexistent_profile as default profile: Profile 'inexistent_profile' not found\n", string(stderr))
406452
}

0 commit comments

Comments
 (0)