github.com/robgonnella/ardi/v2@v2.4.5-0.20230102052001-11a49de978c3/commands/install_test.go (about) 1 package commands_test 2 3 import ( 4 "errors" 5 "testing" 6 7 rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" 8 "github.com/golang/mock/gomock" 9 "github.com/robgonnella/ardi/v2/testutil" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func TestInstallCommand(t *testing.T) { 14 instance := &rpc.Instance{Id: 1} 15 16 lib := "Some_Library" 17 libVers := "3.4.1" 18 19 platform := "some:platform" 20 platformVers := "3.1.0" 21 22 installPlatReq := &rpc.PlatformInstallRequest{ 23 Instance: instance, 24 PlatformPackage: "some", 25 Architecture: "platform", 26 Version: platformVers, 27 } 28 29 installLibReq := &rpc.LibraryInstallRequest{ 30 Instance: instance, 31 Name: lib, 32 Version: libVers, 33 } 34 35 platformListReq := &rpc.PlatformListRequest{ 36 Instance: instance, 37 UpdatableOnly: false, 38 All: false, 39 } 40 41 libraryListReq := &rpc.LibraryListRequest{ 42 Instance: instance, 43 } 44 45 indexReq := &rpc.UpdateIndexRequest{ 46 Instance: instance, 47 } 48 49 libIndexReq := &rpc.UpdateLibrariesIndexRequest{ 50 Instance: instance, 51 } 52 53 expectUsual := func(env *testutil.MockIntegrationTestEnv) { 54 env.ArduinoCli.EXPECT().CreateInstance().Return(instance) 55 env.ArduinoCli.EXPECT().UpdateIndex(gomock.Any(), indexReq, gomock.Any()) 56 } 57 58 testutil.RunIntegrationTest("errors if project not initialized", t, func(env *testutil.IntegrationTestEnv) { 59 args := []string{"install"} 60 err := env.Execute(args) 61 assert.Error(env.T, err) 62 }) 63 64 testutil.RunMockIntegrationTest("installs all dependencies listed in ardi.json", t, func(env *testutil.MockIntegrationTestEnv) { 65 err := env.RunProjectInit() 66 assert.NoError(env.T, err) 67 68 err = env.ArdiCore.Config.AddLibrary(lib, libVers) 69 assert.NoError(env.T, err) 70 71 err = env.ArdiCore.Config.AddPlatform(platform, platformVers) 72 assert.NoError(env.T, err) 73 74 err = env.ArdiCore.Config.AddBoardURL(testutil.Esp8266BoardURL()) 75 assert.NoError(env.T, err) 76 77 expectUsual(env) 78 env.ArduinoCli.EXPECT().PlatformInstall(gomock.Any(), installPlatReq, gomock.Any(), gomock.Any()) 79 env.ArduinoCli.EXPECT().GetPlatforms(platformListReq) 80 env.ArduinoCli.EXPECT().UpdateLibrariesIndex(gomock.Any(), libIndexReq, gomock.Any()) 81 env.ArduinoCli.EXPECT().LibraryInstall(gomock.Any(), installLibReq, gomock.Any(), gomock.Any()) 82 env.ArduinoCli.EXPECT().LibraryList(gomock.Any(), libraryListReq) 83 84 args := []string{"install"} 85 err = env.Execute(args) 86 assert.NoError(env.T, err) 87 88 boardURLs := env.ArdiCore.CliConfig.Config.BoardManager.AdditionalUrls 89 assert.Contains(env.T, boardURLs, testutil.Esp8266BoardURL()) 90 }) 91 92 testutil.RunMockIntegrationTest("returns platform install error", t, func(env *testutil.MockIntegrationTestEnv) { 93 err := env.RunProjectInit() 94 assert.NoError(env.T, err) 95 96 dummyErr := errors.New("dummy error") 97 98 expectUsual(env) 99 env.ArduinoCli.EXPECT().PlatformInstall(gomock.Any(), installPlatReq, gomock.Any(), gomock.Any()).Return(nil, dummyErr) 100 101 err = env.ArdiCore.Config.AddLibrary(lib, libVers) 102 assert.NoError(env.T, err) 103 104 err = env.ArdiCore.Config.AddPlatform(platform, platformVers) 105 assert.NoError(env.T, err) 106 107 args := []string{"install"} 108 err = env.Execute(args) 109 assert.Error(env.T, err) 110 assert.ErrorIs(env.T, err, dummyErr) 111 }) 112 113 testutil.RunMockIntegrationTest("returns library install error", t, func(env *testutil.MockIntegrationTestEnv) { 114 err := env.RunProjectInit() 115 assert.NoError(env.T, err) 116 117 dummyErr := errors.New("dummy error") 118 119 expectUsual(env) 120 env.ArduinoCli.EXPECT().PlatformInstall(gomock.Any(), installPlatReq, gomock.Any(), gomock.Any()) 121 env.ArduinoCli.EXPECT().GetPlatforms(platformListReq) 122 env.ArduinoCli.EXPECT().UpdateLibrariesIndex(gomock.Any(), libIndexReq, gomock.Any()) 123 env.ArduinoCli.EXPECT().LibraryInstall(gomock.Any(), installLibReq, gomock.Any(), gomock.Any()).Return(dummyErr) 124 125 err = env.ArdiCore.Config.AddLibrary(lib, libVers) 126 assert.NoError(env.T, err) 127 128 err = env.ArdiCore.Config.AddPlatform(platform, platformVers) 129 assert.NoError(env.T, err) 130 131 args := []string{"install"} 132 err = env.Execute(args) 133 assert.Error(env.T, err) 134 assert.ErrorIs(env.T, err, dummyErr) 135 }) 136 }