From f72415c1f85a636b49b41a261bf2d9168eb4a41a Mon Sep 17 00:00:00 2001 From: PatrickMenoti <82882574+PatrickMenoti@users.noreply.github.com> Date: Thu, 11 Jul 2024 16:05:38 -0300 Subject: [PATCH] tests: add unit tests for the vulcan package --- pkg/cmd/build/vulcan.go | 2 +- pkg/cmd/init/utils.go | 2 +- pkg/cmd/link/utils.go | 2 +- pkg/vulcan/vulcan.go | 15 ++++- pkg/vulcan/vulcan_test.go | 138 +++++++++++++++++++++++++++++++++++--- 5 files changed, 143 insertions(+), 16 deletions(-) diff --git a/pkg/cmd/build/vulcan.go b/pkg/cmd/build/vulcan.go index 2406d336e..dd93d3893 100644 --- a/pkg/cmd/build/vulcan.go +++ b/pkg/cmd/build/vulcan.go @@ -20,7 +20,7 @@ func vulcan(cmd *BuildCmd, conf *contracts.AzionApplicationOptions, vulcanParams } vul := vulcanPkg.NewVulcan() - err = vul.CheckVulcanMajor(vulcanVer, cmd.f) + err = vul.CheckVulcanMajor(vulcanVer, cmd.f, vul) if err != nil { return err } diff --git a/pkg/cmd/init/utils.go b/pkg/cmd/init/utils.go index 7a2f77a9d..9dbed4588 100644 --- a/pkg/cmd/init/utils.go +++ b/pkg/cmd/init/utils.go @@ -42,7 +42,7 @@ func (cmd *initCmd) selectVulcanTemplates() error { } vul := vulcanPkg.NewVulcan() - err = vul.CheckVulcanMajor(vulcanVer, cmd.f) + err = vul.CheckVulcanMajor(vulcanVer, cmd.f, vul) if err != nil { return err } diff --git a/pkg/cmd/link/utils.go b/pkg/cmd/link/utils.go index b42b1e138..5ee8d0262 100644 --- a/pkg/cmd/link/utils.go +++ b/pkg/cmd/link/utils.go @@ -73,7 +73,7 @@ func (cmd *LinkCmd) selectVulcanMode(info *LinkInfo) error { } vul := vulcanPkg.NewVulcan() - err = vul.CheckVulcanMajor(vulcanVer, cmd.F) + err = vul.CheckVulcanMajor(vulcanVer, cmd.F, vul) if err != nil { return err } diff --git a/pkg/vulcan/vulcan.go b/pkg/vulcan/vulcan.go index bd1a8c498..01dec8d4f 100644 --- a/pkg/vulcan/vulcan.go +++ b/pkg/vulcan/vulcan.go @@ -23,13 +23,15 @@ var versionVulcan = "@latest" type VulcanPkg struct { Command func(flags, params string, f *cmdutil.Factory) string - CheckVulcanMajor func(currentVersion string, f *cmdutil.Factory) error + CheckVulcanMajor func(currentVersion string, f *cmdutil.Factory, vulcan *VulcanPkg) error + ReadSettings func() (token.Settings, error) } func NewVulcan() *VulcanPkg { return &VulcanPkg{ Command: command, CheckVulcanMajor: checkVulcanMajor, + ReadSettings: token.ReadSettings, } } @@ -41,8 +43,15 @@ func command(flags, params string, f *cmdutil.Factory) string { return fmt.Sprintf(installEdgeFunctions, flags, versionVulcan, params) } -func checkVulcanMajor(currentVersion string, f *cmdutil.Factory) error { +func checkVulcanMajor(currentVersion string, f *cmdutil.Factory, vulcan *VulcanPkg) error { parts := strings.Split(currentVersion, ".") + // strings.Split will always return at least one element, so parts will always be len>1 + // to avoid this, I am checking if version is empty. If so, I just use an empty slice + if currentVersion == "" { + parts = []string{} + } + fmt.Println(parts) + fmt.Println(len(parts)) // Extract the first part and convert it to a number if len(parts) > 0 { @@ -51,7 +60,7 @@ func checkVulcanMajor(currentVersion string, f *cmdutil.Factory) error { return err } - config, err := token.ReadSettings() + config, err := vulcan.ReadSettings() if err != nil { return err } diff --git a/pkg/vulcan/vulcan_test.go b/pkg/vulcan/vulcan_test.go index 92a997b07..672eb422e 100644 --- a/pkg/vulcan/vulcan_test.go +++ b/pkg/vulcan/vulcan_test.go @@ -4,44 +4,83 @@ import ( "fmt" "testing" + "github.com/aziontech/azion-cli/pkg/httpmock" + "github.com/aziontech/azion-cli/pkg/logger" "github.com/aziontech/azion-cli/pkg/testutils" + "github.com/aziontech/azion-cli/pkg/token" + "go.uber.org/zap/zapcore" ) func TestCommand(t *testing.T) { + logger.New(zapcore.DebugLevel) type args struct { flags string params string } tests := []struct { - name string - args args - want string + name string + args args + debug bool + want string }{ { - name: "no flags", + name: "no flags - debug off", args: args{ params: "presets ls", }, - want: fmt.Sprintf("npx --yes edge-functions%s presets ls", versionVulcan), + debug: false, + want: fmt.Sprintf("npx --yes edge-functions%s presets ls", versionVulcan), }, { - name: "with flags", + name: "with flags - debug off", args: args{ flags: "--loglevel=error --no-update-notifier", params: "presets ls", }, - want: fmt.Sprintf("npx --yes --loglevel=error --no-update-notifier edge-functions%s presets ls", versionVulcan), + debug: false, + want: fmt.Sprintf("npx --yes --loglevel=error --no-update-notifier edge-functions%s presets ls", versionVulcan), }, { - name: "no params", + name: "no params - debug off", args: args{ flags: "--loglevel=error --no-update-notifier", }, - want: fmt.Sprintf("npx --yes --loglevel=error --no-update-notifier edge-functions%s ", versionVulcan), + debug: false, + want: fmt.Sprintf("npx --yes --loglevel=error --no-update-notifier edge-functions%s ", versionVulcan), + }, + { + name: "no flags - debug on", + args: args{ + params: "presets ls", + }, + debug: true, + want: fmt.Sprintf("DEBUG=true npx --yes edge-functions%s presets ls", versionVulcan), + }, + { + name: "with flags - debug on", + args: args{ + flags: "--loglevel=error --no-update-notifier", + params: "presets ls", + }, + debug: true, + want: fmt.Sprintf("DEBUG=true npx --yes --loglevel=error --no-update-notifier edge-functions%s presets ls", versionVulcan), + }, + { + name: "no params - debug on", + args: args{ + flags: "--loglevel=error --no-update-notifier", + }, + debug: true, + want: fmt.Sprintf("DEBUG=true npx --yes --loglevel=error --no-update-notifier edge-functions%s ", versionVulcan), }, } - f, _, _ := testutils.NewFactory(nil) for _, tt := range tests { + logger.New(zapcore.DebugLevel) + mock := &httpmock.Registry{} + f, _, _ := testutils.NewFactory(mock) + if tt.debug { + f.Logger.Debug = true + } vul := NewVulcan() t.Run(tt.name, func(t *testing.T) { if got := vul.Command(tt.args.flags, tt.args.params, f); got != tt.want { @@ -50,3 +89,82 @@ func TestCommand(t *testing.T) { }) } } + +func TestCheckVulcanMajor(t *testing.T) { + type args struct { + currentVersion string + } + tests := []struct { + name string + args args + lastVulcanVer string + expectedVersion string + wantErr bool + err string + }{ + { + name: "new major version without last version", + args: args{ + currentVersion: "3.0.0", + }, + lastVulcanVer: "", + expectedVersion: firstTimeExecuting, + wantErr: false, + }, + { + name: "new major version with last version", + args: args{ + currentVersion: "3.0.0", + }, + lastVulcanVer: "2.5.0", + expectedVersion: "@v2.5.0", + wantErr: false, + }, + { + name: "same major version", + args: args{ + currentVersion: "2.0.0", + }, + lastVulcanVer: "2.5.0", + expectedVersion: "@v2.5.0", + wantErr: false, + }, + { + name: "failed to parse version", + args: args{ + currentVersion: "invalid", + }, + expectedVersion: firstTimeExecuting, + wantErr: true, + err: "strconv.Atoi: parsing \"invalid\": invalid syntax", + }, + { + name: "empty version string", + args: args{ + currentVersion: "", + }, + lastVulcanVer: "2.5.0", + expectedVersion: firstTimeExecuting, + wantErr: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + f, _, _ := testutils.NewFactory(nil) + vul := NewVulcan() + vul.ReadSettings = func() (token.Settings, error) { + return token.Settings{}, nil + } + err := vul.CheckVulcanMajor(tt.args.currentVersion, f, vul) + if (err != nil) != tt.wantErr { + t.Errorf("CheckVulcanMajor() error = %v, wantErr %v", err, tt.wantErr) + } + if err != nil && err.Error() != tt.err { + t.Errorf("CheckVulcanMajor() error = %v, wantErr %v", err, tt.wantErr) + } + if versionVulcan != tt.expectedVersion { + t.Errorf("versionVulcan = %v, expectedVersion %v", versionVulcan, tt.expectedVersion) + } + }) + } +}