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  }