github.com/robgonnella/ardi/v2@v2.4.5-0.20230102052001-11a49de978c3/commands/search_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 TestSearchLibCommand(t *testing.T) {
    14  	instance := &rpc.Instance{Id: 1}
    15  
    16  	indexReq := &rpc.UpdateLibrariesIndexRequest{
    17  		Instance: instance,
    18  	}
    19  
    20  	testutil.RunMockIntegrationTest("errors if project not initialized", t, func(env *testutil.MockIntegrationTestEnv) {
    21  		searchLib := "Adafruit Pixie"
    22  		args := []string{"search", "libs", searchLib}
    23  		err := env.Execute(args)
    24  		assert.Error(env.T, err)
    25  	})
    26  
    27  	testutil.RunMockIntegrationTest("searches for library", t, func(env *testutil.MockIntegrationTestEnv) {
    28  		err := env.RunProjectInit()
    29  		assert.NoError(env.T, err)
    30  
    31  		searchLib := "Adafruit Pixie"
    32  
    33  		searchReq := &rpc.LibrarySearchRequest{
    34  			Instance: instance,
    35  			Query:    searchLib,
    36  		}
    37  
    38  		expectedLib := &rpc.SearchedLibrary{
    39  			Name: searchLib,
    40  		}
    41  
    42  		searchResp := &rpc.LibrarySearchResponse{
    43  			Libraries: []*rpc.SearchedLibrary{expectedLib},
    44  		}
    45  
    46  		env.ArduinoCli.EXPECT().CreateInstance().Return(instance)
    47  		env.ArduinoCli.EXPECT().UpdateLibrariesIndex(gomock.Any(), indexReq, gomock.Any())
    48  		env.ArduinoCli.EXPECT().LibrarySearch(gomock.Any(), searchReq).Return(searchResp, nil)
    49  
    50  		args := []string{"search", "libs", searchLib}
    51  		err = env.Execute(args)
    52  		assert.NoError(env.T, err)
    53  		assert.Contains(env.T, env.Stdout.String(), expectedLib.Name)
    54  	})
    55  
    56  	testutil.RunMockIntegrationTest("returns search error", t, func(env *testutil.MockIntegrationTestEnv) {
    57  		err := env.RunProjectInit()
    58  		assert.NoError(env.T, err)
    59  
    60  		searchLib := "Adafruit Pixie"
    61  
    62  		searchReq := &rpc.LibrarySearchRequest{
    63  			Instance: instance,
    64  			Query:    searchLib,
    65  		}
    66  
    67  		dummyErr := errors.New("dummy err")
    68  
    69  		env.ArduinoCli.EXPECT().CreateInstance().Return(instance)
    70  		env.ArduinoCli.EXPECT().UpdateLibrariesIndex(gomock.Any(), indexReq, gomock.Any())
    71  		env.ArduinoCli.EXPECT().LibrarySearch(gomock.Any(), searchReq).Return(nil, dummyErr)
    72  
    73  		args := []string{"search", "libs", searchLib}
    74  		err = env.Execute(args)
    75  		assert.Error(env.T, err)
    76  		assert.ErrorIs(env.T, err, dummyErr)
    77  	})
    78  
    79  	testutil.RunMockIntegrationTest("does not error if search arg not provided", t, func(env *testutil.MockIntegrationTestEnv) {
    80  		err := env.RunProjectInit()
    81  		assert.NoError(env.T, err)
    82  
    83  		searchLib := ""
    84  
    85  		searchReq := &rpc.LibrarySearchRequest{
    86  			Instance: instance,
    87  			Query:    searchLib,
    88  		}
    89  
    90  		expectedLib := &rpc.SearchedLibrary{
    91  			Name: searchLib,
    92  		}
    93  
    94  		searchResp := &rpc.LibrarySearchResponse{
    95  			Libraries: []*rpc.SearchedLibrary{expectedLib},
    96  		}
    97  
    98  		env.ArduinoCli.EXPECT().CreateInstance().Return(instance)
    99  		env.ArduinoCli.EXPECT().UpdateLibrariesIndex(gomock.Any(), indexReq, gomock.Any())
   100  		env.ArduinoCli.EXPECT().LibrarySearch(gomock.Any(), searchReq).Return(searchResp, nil)
   101  
   102  		args := []string{"search", "libs", searchLib}
   103  		err = env.Execute(args)
   104  		assert.NoError(env.T, err)
   105  	})
   106  }
   107  
   108  func TestSearchPlatformCommand(t *testing.T) {
   109  	instance := &rpc.Instance{Id: 1}
   110  
   111  	indexReq := &rpc.UpdateIndexRequest{
   112  		Instance: instance,
   113  	}
   114  
   115  	testutil.RunMockIntegrationTest("errors if project not initialized", t, func(env *testutil.MockIntegrationTestEnv) {
   116  		args := []string{"search", "platforms"}
   117  		err := env.Execute(args)
   118  		assert.Error(env.T, err)
   119  	})
   120  
   121  	testutil.RunMockIntegrationTest("searches platforms", t, func(env *testutil.MockIntegrationTestEnv) {
   122  		env.RunProjectInit()
   123  
   124  		platform := "some:platform"
   125  
   126  		searchReq := &rpc.PlatformSearchRequest{
   127  			Instance:    instance,
   128  			AllVersions: false,
   129  		}
   130  
   131  		searchResp := &rpc.PlatformSearchResponse{
   132  			SearchOutput: []*rpc.Platform{
   133  				{
   134  					Id: platform,
   135  				},
   136  			},
   137  		}
   138  
   139  		env.ArduinoCli.EXPECT().CreateInstance().Return(instance)
   140  		env.ArduinoCli.EXPECT().UpdateIndex(gomock.Any(), indexReq, gomock.Any()).MaxTimes(2)
   141  		env.ArduinoCli.EXPECT().PlatformSearch(searchReq).Return(searchResp, nil)
   142  
   143  		args := []string{"search", "platforms"}
   144  		err := env.Execute(args)
   145  		assert.NoError(env.T, err)
   146  		assert.Contains(env.T, env.Stdout.String(), platform)
   147  	})
   148  
   149  	testutil.RunMockIntegrationTest("return platform search error", t, func(env *testutil.MockIntegrationTestEnv) {
   150  		env.RunProjectInit()
   151  		searchReq := &rpc.PlatformSearchRequest{
   152  			Instance:    instance,
   153  			AllVersions: false,
   154  		}
   155  
   156  		dummyErr := errors.New("dummy error")
   157  
   158  		env.ArduinoCli.EXPECT().CreateInstance().Return(instance)
   159  		env.ArduinoCli.EXPECT().UpdateIndex(gomock.Any(), indexReq, gomock.Any()).MaxTimes(2)
   160  		env.ArduinoCli.EXPECT().PlatformSearch(searchReq).Return(nil, dummyErr)
   161  
   162  		args := []string{"search", "platforms"}
   163  		err := env.Execute(args)
   164  		assert.Error(env.T, err)
   165  		assert.ErrorIs(env.T, err, dummyErr)
   166  	})
   167  }