From edaf6ca522656a8a1c702cfa122848336e68bae8 Mon Sep 17 00:00:00 2001
From: Sunny <darkowlzz@protonmail.com>
Date: Thu, 24 Feb 2022 04:26:18 +0530
Subject: [PATCH] Add test flag -update to update the golden files

Test flag `-update` can be used to update all the golden files whenever
the CLI output changes.

Signed-off-by: Sunny <darkowlzz@protonmail.com>
---
 CONTRIBUTING.md                                       |  7 +++++++
 Makefile                                              |  2 +-
 cmd/flux/main_test.go                                 | 11 +++++++++++
 .../helmrelease/get_helmrelease_from_git.golden       |  4 ++--
 cmd/flux/testdata/image/get_image_policy_regex.golden |  4 ++--
 .../testdata/image/get_image_policy_semver.golden     |  4 ++--
 .../kustomization/get_kustomization_from_git.golden   |  4 ++--
 7 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index e60c9469..cafc531e 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -96,6 +96,13 @@ Then you can run the end-to-end tests with:
 make e2e
 ```
 
+When the output of the Flux CLI changes, to automatically update the golden
+files used in the test, pass `-update` flag to the test as:
+
+```bash
+make e2e TEST_ARGS="-update"
+```
+
 Teardown the e2e environment with:
 
 ```bash
diff --git a/Makefile b/Makefile
index 29ca788a..21149468 100644
--- a/Makefile
+++ b/Makefile
@@ -39,7 +39,7 @@ test: $(EMBEDDED_MANIFESTS_TARGET) tidy fmt vet install-envtest
 	KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test ./... -coverprofile cover.out --tags=unit
 
 e2e: $(EMBEDDED_MANIFESTS_TARGET) tidy fmt vet
-	TEST_KUBECONFIG=$(TEST_KUBECONFIG) go test ./cmd/flux/... -coverprofile e2e.cover.out --tags=e2e -v -failfast
+	TEST_KUBECONFIG=$(TEST_KUBECONFIG) go test ./cmd/flux/... -coverprofile e2e.cover.out --tags=e2e -v -failfast $(TEST_ARGS)
 
 test-with-kind: install-envtest
 	make setup-kind
diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go
index c41eb3e6..5bc3f1ff 100644
--- a/cmd/flux/main_test.go
+++ b/cmd/flux/main_test.go
@@ -20,6 +20,7 @@ import (
 	"bufio"
 	"bytes"
 	"context"
+	"flag"
 	"fmt"
 	"io"
 	"os"
@@ -42,6 +43,9 @@ import (
 
 var nextNamespaceId int64
 
+// update allows golden files to be updated based on the current output.
+var update = flag.Bool("update", false, "update golden files")
+
 // Return a unique namespace with the specified prefix, for tests to create
 // objects that won't collide with each other.
 func allocateNamespace(prefix string) string {
@@ -298,6 +302,13 @@ func assertGoldenTemplateFile(goldenFile string, templateValues map[string]strin
 			expectedOutput = string(goldenFileContents)
 		}
 		if assertErr := assertGoldenValue(expectedOutput)(output, err); assertErr != nil {
+			// Update the golden files if comparision fails and the update flag is set.
+			if *update && output != "" {
+				if err := os.WriteFile(goldenFile, []byte(output), 0644); err != nil {
+					return fmt.Errorf("failed to update golden file '%s': %v", goldenFile, err)
+				}
+				return nil
+			}
 			return fmt.Errorf("Mismatch from golden file '%s': %v", goldenFile, assertErr)
 		}
 		return nil
diff --git a/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden
index 1cfeacc3..e802cb36 100644
--- a/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden
+++ b/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden
@@ -1,2 +1,2 @@
-NAME 	READY	MESSAGE                         	REVISION	SUSPENDED 
-thrfg	True 	Release reconciliation succeeded	6.0.0   	False    	
+NAME 	REVISION	SUSPENDED	READY	MESSAGE                          
+thrfg	6.0.0   	False    	True 	Release reconciliation succeeded	
diff --git a/cmd/flux/testdata/image/get_image_policy_regex.golden b/cmd/flux/testdata/image/get_image_policy_regex.golden
index 8486fb1f..b7cf40a9 100644
--- a/cmd/flux/testdata/image/get_image_policy_regex.golden
+++ b/cmd/flux/testdata/image/get_image_policy_regex.golden
@@ -1,2 +1,2 @@
-NAME         	READY	MESSAGE                                                               	LATEST IMAGE                       
-podinfo-regex	True 	Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.0	ghcr.io/stefanprodan/podinfo:5.0.0	
+NAME         	LATEST IMAGE                      	READY	MESSAGE                                                                
+podinfo-regex	ghcr.io/stefanprodan/podinfo:5.0.0	True 	Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.0	
diff --git a/cmd/flux/testdata/image/get_image_policy_semver.golden b/cmd/flux/testdata/image/get_image_policy_semver.golden
index 6f8a17dd..30ce52b7 100644
--- a/cmd/flux/testdata/image/get_image_policy_semver.golden
+++ b/cmd/flux/testdata/image/get_image_policy_semver.golden
@@ -1,2 +1,2 @@
-NAME          	READY	MESSAGE                                                               	LATEST IMAGE                       
-podinfo-semver	True 	Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.3	ghcr.io/stefanprodan/podinfo:5.0.3	
+NAME          	LATEST IMAGE                      	READY	MESSAGE                                                                
+podinfo-semver	ghcr.io/stefanprodan/podinfo:5.0.3	True 	Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.3	
diff --git a/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden
index a613aa34..b4f7e31c 100644
--- a/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden
+++ b/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden
@@ -1,2 +1,2 @@
-NAME	READY	MESSAGE                        	REVISION     	SUSPENDED 
-tkfg	True 	Applied revision: 6.0.0/627d5c4	6.0.0/627d5c4	False    	
+NAME	REVISION     	SUSPENDED	READY	MESSAGE                         
+tkfg	6.0.0/627d5c4	False    	True 	Applied revision: 6.0.0/627d5c4	
-- 
GitLab