github.com/kcmvp/gob@v1.0.17/cmd/gbc/command/plugin_test.go (about)

     1  package command
     2  
     3  import (
     4  	"github.com/kcmvp/gob/cmd/gbc/artifact"
     5  	"github.com/kcmvp/gob/utils"
     6  	"github.com/stretchr/testify/assert"
     7  	"github.com/stretchr/testify/suite"
     8  	"os"
     9  	"path/filepath"
    10  	"strings"
    11  	"testing"
    12  )
    13  
    14  const v6 = "golang.org/x/tools/cmd/digraph@v0.16.0"
    15  const v7 = "golang.org/x/tools/cmd/digraph@v0.16.1"
    16  
    17  type PluginTestSuit struct {
    18  	suite.Suite
    19  }
    20  
    21  func TestPluginSuite(t *testing.T) {
    22  	suite.Run(t, &PluginTestSuit{})
    23  }
    24  
    25  func (suite *PluginTestSuit) TearDownSuite() {
    26  	_, method := utils.TestCaller()
    27  	TearDownSuite(strings.TrimRight(method, "TearDownSuite"))
    28  
    29  }
    30  func (suite *PluginTestSuit) TestInstallPlugin() {
    31  	err := install(nil, v6)
    32  	assert.NoError(suite.T(), err)
    33  	plugins := artifact.CurProject().Plugins()
    34  	_, err = os.Stat(filepath.Join(artifact.GoPath(), plugins[0].Binary()))
    35  	assert.NoError(suite.T(), err)
    36  	assert.Equal(suite.T(), 1, len(plugins))
    37  	assert.Equal(suite.T(), "digraph", plugins[0].Name())
    38  	assert.Equal(suite.T(), "v0.16.0", plugins[0].Version())
    39  	assert.Equal(suite.T(), "golang.org/x/tools/cmd/digraph", plugins[0].Module())
    40  	err = install(nil, v7)
    41  	assert.NoError(suite.T(), err)
    42  	assert.Equal(suite.T(), 1, len(plugins))
    43  	_, err = os.Stat(filepath.Join(artifact.GoPath(), plugins[0].Binary()))
    44  	assert.NoError(suite.T(), err)
    45  }
    46  
    47  func (suite *PluginTestSuit) TestInstallPluginWithVersion() {
    48  	tests := []struct {
    49  		name    string
    50  		url     string
    51  		wantErr bool
    52  	}{
    53  		{"no version", "github.com/hhatto/gocloc/cmd/gocloc", false},
    54  		{"latest version", "github.com/hhatto/gocloc/cmd/gocloc@latest", false},
    55  		{"incorrect version", "github.com/hhatto/gocloc/cmd/gocloc@abc", true},
    56  	}
    57  	for _, test := range tests {
    58  		err := install(nil, test.url)
    59  		assert.True(suite.T(), test.wantErr == (err != nil))
    60  	}
    61  }
    62  
    63  func (suite *PluginTestSuit) TestList() {
    64  	err := list(nil, "")
    65  	assert.NoError(suite.T(), err)
    66  }
    67  
    68  func (suite *PluginTestSuit) TestPluginArgs() {
    69  	tests := []struct {
    70  		name    string
    71  		args    []string
    72  		wantErr bool
    73  	}{
    74  		{
    75  			"no args",
    76  			[]string{},
    77  			true,
    78  		},
    79  		{
    80  			"first not match",
    81  			[]string{"def", "list"},
    82  			true,
    83  		},
    84  		{
    85  			"install without url",
    86  			[]string{"install", ""},
    87  			true,
    88  		},
    89  		{
    90  			"install with url",
    91  			[]string{"install", v6},
    92  			false,
    93  		},
    94  	}
    95  	for _, test := range tests {
    96  		err := pluginCmd.Args(nil, test.args)
    97  		assert.True(suite.T(), test.wantErr == (err != nil))
    98  	}
    99  }
   100  
   101  func (suite *PluginTestSuit) TestRunE() {
   102  	err := pluginCmd.RunE(pluginCmd, []string{"list"})
   103  	assert.NoErrorf(suite.T(), err, "should list iinstalled plugin successfully")
   104  }
   105  
   106  func (suite *PluginTestSuit) TestPluginHelpTemplate() {
   107  	rootCmd.SetArgs([]string{"plugin", "--help"})
   108  	rootCmd.Execute()
   109  }