Add test demonstrating lock file issue and implement partial fix for --skip-charts case
Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									6482956281
								
							
						
					
					
						commit
						19ede56a51
					
				|  | @ -605,7 +605,17 @@ func (a *App) ListReleases(c ListConfigProvider) error { | |||
| 				stateReleases = rel | ||||
| 			}) | ||||
| 		} else { | ||||
| 			stateReleases, err = a.list(run) | ||||
| 			// Even when skipping charts, we should still resolve dependencies from the lock file
 | ||||
| 			// to show the locked versions instead of the version constraints from helmfile.yaml
 | ||||
| 			resolvedState, resolveErr := run.state.ResolveDeps() | ||||
| 			if resolveErr != nil { | ||||
| 				err = resolveErr | ||||
| 			} else { | ||||
| 				// Create a new run with the resolved state to get the correct versions
 | ||||
| 				resolvedRun := *run | ||||
| 				resolvedRun.state = resolvedState | ||||
| 				stateReleases, err = a.list(&resolvedRun) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if err != nil { | ||||
|  |  | |||
|  | @ -0,0 +1,84 @@ | |||
| package app | ||||
| 
 | ||||
| import ( | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"go.uber.org/zap" | ||||
| 
 | ||||
| 	ffs "github.com/helmfile/helmfile/pkg/filesystem" | ||||
| 	"github.com/helmfile/helmfile/pkg/testutil" | ||||
| ) | ||||
| 
 | ||||
| // TestListReflectsLockedVersions tests that helmfile list shows versions from
 | ||||
| // the lock file when available, both with and without --skip-charts
 | ||||
| func TestListReflectsLockedVersions(t *testing.T) { | ||||
| 	testCases := []struct { | ||||
| 		name       string | ||||
| 		skipCharts bool | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name:       "with skipCharts=false", | ||||
| 			skipCharts: false, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "with skipCharts=true",  | ||||
| 			skipCharts: true, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for _, tc := range testCases { | ||||
| 		t.Run(tc.name, func(t *testing.T) { | ||||
| 			// Mock files: helmfile.yaml with a chart dependency and helmfile.lock with resolved version
 | ||||
| 			files := map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| repositories: | ||||
| - name: bitnami | ||||
|   url: https://charts.bitnami.com/bitnami
 | ||||
| 
 | ||||
| releases: | ||||
| - name: redis | ||||
|   chart: bitnami/redis | ||||
|   version: "*" | ||||
| `, | ||||
| 				"/path/to/helmfile.lock": ` | ||||
| version: v0.170.1 | ||||
| dependencies: | ||||
| - name: redis | ||||
|   repository: https://charts.bitnami.com/bitnami
 | ||||
|   version: 18.1.5 | ||||
| digest: sha256:abcd1234 | ||||
| generated: "2023-01-01T00:00:00Z" | ||||
| `, | ||||
| 			} | ||||
| 
 | ||||
| 			logger := zap.NewNop().Sugar() | ||||
| 
 | ||||
| 			app := appWithFs(&App{ | ||||
| 				OverrideHelmBinary:  DefaultHelmBinary, | ||||
| 				fs:                  ffs.DefaultFileSystem(), | ||||
| 				OverrideKubeContext: "default", | ||||
| 				Env:                 "default", | ||||
| 				Logger:              logger, | ||||
| 				FileOrDir:           "/path/to/helmfile.yaml", | ||||
| 			}, files) | ||||
| 
 | ||||
| 			expectNoCallsToHelm(app) | ||||
| 
 | ||||
| 			cfg := configImpl{ | ||||
| 				skipCharts: tc.skipCharts, | ||||
| 				output:     "json", | ||||
| 			} | ||||
| 
 | ||||
| 			out, err := testutil.CaptureStdout(func() { | ||||
| 				listErr := app.ListReleases(cfg) | ||||
| 				assert.NoError(t, listErr) | ||||
| 			}) | ||||
| 			assert.NoError(t, err) | ||||
| 
 | ||||
| 			// The output should contain the locked version (18.1.5) not the constraint (*)
 | ||||
| 			assert.Contains(t, out, "18.1.5", "Expected to see locked version 18.1.5 in output, but got: %s", out) | ||||
| 			assert.NotContains(t, out, `"version":"*"`, "Should not see version constraint in output, but got: %s", out) | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
		Loading…
	
		Reference in New Issue