|
8 | 8 | "github.com/cloudposse/atmos/pkg/version"
|
9 | 9 | "github.com/golang/mock/gomock"
|
10 | 10 | "github.com/pkg/errors"
|
| 11 | + "github.com/stretchr/testify/assert" |
11 | 12 | )
|
12 | 13 |
|
13 | 14 | // Mock interfaces generated by mockgen
|
@@ -194,3 +195,61 @@ func TestIsCheckVersionEnabled(t *testing.T) {
|
194 | 195 | })
|
195 | 196 | }
|
196 | 197 | }
|
| 198 | + |
| 199 | +func TestGetLatestVersion(t *testing.T) { |
| 200 | + tests := []struct { |
| 201 | + name string |
| 202 | + version string |
| 203 | + latestRelease string |
| 204 | + getLatestReleaseErr error |
| 205 | + expectedVersion string |
| 206 | + expectedOk bool |
| 207 | + }{ |
| 208 | + { |
| 209 | + name: "Same version", |
| 210 | + version: "v1.0.0", |
| 211 | + latestRelease: "v1.0.0", |
| 212 | + expectedVersion: "", |
| 213 | + expectedOk: false, |
| 214 | + }, |
| 215 | + { |
| 216 | + name: "Newer version available", |
| 217 | + version: "v1.0.0", |
| 218 | + latestRelease: "v1.1.0", |
| 219 | + expectedVersion: "1.1.0", |
| 220 | + expectedOk: true, |
| 221 | + }, |
| 222 | + { |
| 223 | + name: "Error fetching latest release", |
| 224 | + version: "v1.0.0", |
| 225 | + getLatestReleaseErr: errors.New("error"), |
| 226 | + expectedVersion: "", |
| 227 | + expectedOk: false, |
| 228 | + }, |
| 229 | + } |
| 230 | + |
| 231 | + for _, tt := range tests { |
| 232 | + t.Run(tt.name, func(t *testing.T) { |
| 233 | + ctrl := gomock.NewController(t) |
| 234 | + oldVersion := version.Version |
| 235 | + version.Version = tt.version |
| 236 | + t.Cleanup(func() { |
| 237 | + version.Version = oldVersion // Reset to a known state |
| 238 | + }) |
| 239 | + defer ctrl.Finish() |
| 240 | + |
| 241 | + mockExec := NewMockVersionExecutor(ctrl) |
| 242 | + mockExec.EXPECT().GetLatestGitHubRepoRelease(). |
| 243 | + Return(tt.latestRelease, tt.getLatestReleaseErr).AnyTimes() |
| 244 | + |
| 245 | + v := versionExec{ |
| 246 | + atmosConfig: &schema.AtmosConfiguration{}, |
| 247 | + getLatestGitHubRepoRelease: mockExec.GetLatestGitHubRepoRelease, |
| 248 | + } |
| 249 | + |
| 250 | + version, ok := v.GetLatestVersion(true) |
| 251 | + assert.Equal(t, tt.expectedVersion, version, "Expected version mismatch") |
| 252 | + assert.Equal(t, tt.expectedOk, ok, "Expected ok mismatch") |
| 253 | + }) |
| 254 | + } |
| 255 | +} |
0 commit comments