From adc7981f2290b4080aacf0cb81baed1ae96fb5ae Mon Sep 17 00:00:00 2001
From: Somtochi Onyekwere <somtochionyekwere@gmail.com>
Date: Thu, 30 Jun 2022 12:07:29 +0100
Subject: [PATCH] Add tests for source oci command

Signed-off-by: Somtochi Onyekwere <somtochionyekwere@gmail.com>
---
 cmd/flux/create_source_oci_test.go            | 61 ++++++++++++++++
 cmd/flux/image_test.go                        | 16 +++++
 cmd/flux/main_test.go                         |  1 +
 cmd/flux/source_oci_test.go                   | 71 +++++++++++++++++++
 .../testdata/oci/create_source_oci.golden     |  5 ++
 cmd/flux/testdata/oci/delete_oci.golden       |  2 +
 cmd/flux/testdata/oci/export.golden           | 12 ++++
 .../testdata/oci/export_with_secret.golden    | 14 ++++
 cmd/flux/testdata/oci/get_oci.golden          |  2 +
 cmd/flux/testdata/oci/reconcile_oci.golden    |  4 ++
 cmd/flux/testdata/oci/resume_oci.golden       |  5 ++
 cmd/flux/testdata/oci/suspend_oci.golden      |  2 +
 12 files changed, 195 insertions(+)
 create mode 100644 cmd/flux/create_source_oci_test.go
 create mode 100644 cmd/flux/source_oci_test.go
 create mode 100644 cmd/flux/testdata/oci/create_source_oci.golden
 create mode 100644 cmd/flux/testdata/oci/delete_oci.golden
 create mode 100644 cmd/flux/testdata/oci/export.golden
 create mode 100644 cmd/flux/testdata/oci/export_with_secret.golden
 create mode 100644 cmd/flux/testdata/oci/get_oci.golden
 create mode 100644 cmd/flux/testdata/oci/reconcile_oci.golden
 create mode 100644 cmd/flux/testdata/oci/resume_oci.golden
 create mode 100644 cmd/flux/testdata/oci/suspend_oci.golden

diff --git a/cmd/flux/create_source_oci_test.go b/cmd/flux/create_source_oci_test.go
new file mode 100644
index 00000000..027c1789
--- /dev/null
+++ b/cmd/flux/create_source_oci_test.go
@@ -0,0 +1,61 @@
+/*
+Copyright 2022 The Flux authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package main
+
+import (
+	"testing"
+)
+
+func TestCreateSourceOCI(t *testing.T) {
+	tests := []struct {
+		name       string
+		args       string
+		assertFunc assertFunc
+	}{
+		{
+			name:       "NoArgs",
+			args:       "create source oci",
+			assertFunc: assertError("name is required"),
+		},
+		{
+			name:       "NoURL",
+			args:       "create source oci podinfo",
+			assertFunc: assertError("url is required"),
+		},
+		{
+			name:       "export manifest",
+			args:       "create source oci podinfo --url=ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m --export",
+			assertFunc: assertGoldenFile("./testdata/oci/export.golden"),
+		},
+		{
+			name:       "export manifest with secret",
+			args:       "create source oci podinfo --url=ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m --secret-ref=creds --export",
+			assertFunc: assertGoldenFile("./testdata/oci/export_with_secret.golden"),
+		},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			cmd := cmdTestCase{
+				args:   tt.args,
+				assert: tt.assertFunc,
+			}
+
+			cmd.runTestCmd(t)
+		})
+	}
+}
diff --git a/cmd/flux/image_test.go b/cmd/flux/image_test.go
index a0e0b257..155326fa 100644
--- a/cmd/flux/image_test.go
+++ b/cmd/flux/image_test.go
@@ -1,6 +1,22 @@
 //go:build e2e
 // +build e2e
 
+/*
+Copyright 2022 The Flux authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
 package main
 
 import "testing"
diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go
index 50127de7..59568dee 100644
--- a/cmd/flux/main_test.go
+++ b/cmd/flux/main_test.go
@@ -388,6 +388,7 @@ func resetCmdArgs() {
 	getArgs = GetFlags{}
 	sourceHelmArgs = sourceHelmFlags{}
 	secretGitArgs = NewSecretGitFlags()
+	*kubeconfigArgs.Namespace = rootArgs.defaults.Namespace
 }
 
 func isChangeError(err error) bool {
diff --git a/cmd/flux/source_oci_test.go b/cmd/flux/source_oci_test.go
new file mode 100644
index 00000000..568ac73e
--- /dev/null
+++ b/cmd/flux/source_oci_test.go
@@ -0,0 +1,71 @@
+//go:build e2e
+// +build e2e
+
+/*
+Copyright 2022 The Flux authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package main
+
+import (
+	"testing"
+)
+
+func TestSourceOCI(t *testing.T) {
+	cases := []struct {
+		args       string
+		goldenFile string
+	}{
+		{
+			"create source oci thrfg --url=ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m",
+			"testdata/oci/create_source_oci.golden",
+		},
+		{
+			"get source oci thrfg",
+			"testdata/oci/get_oci.golden",
+		},
+		{
+			"reconcile source oci thrfg",
+			"testdata/oci/reconcile_oci.golden",
+		},
+		{
+			"suspend source oci thrfg",
+			"testdata/oci/suspend_oci.golden",
+		},
+		{
+			"resume source oci thrfg",
+			"testdata/oci/resume_oci.golden",
+		},
+		{
+			"delete source oci thrfg --silent",
+			"testdata/oci/delete_oci.golden",
+		},
+	}
+
+	namespace := allocateNamespace("oci-test")
+	del, err := setupTestNamespace(namespace)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer del()
+
+	for _, tc := range cases {
+		cmd := cmdTestCase{
+			args:   tc.args + " -n=" + namespace,
+			assert: assertGoldenTemplateFile(tc.goldenFile, map[string]string{"ns": namespace}),
+		}
+		cmd.runTestCmd(t)
+	}
+}
diff --git a/cmd/flux/testdata/oci/create_source_oci.golden b/cmd/flux/testdata/oci/create_source_oci.golden
new file mode 100644
index 00000000..9cca4138
--- /dev/null
+++ b/cmd/flux/testdata/oci/create_source_oci.golden
@@ -0,0 +1,5 @@
+â–º applying OCIRepository
+✔ OCIRepository created
+â—Ž waiting for OCIRepository reconciliation
+✔ OCIRepository reconciliation completed
+✔ fetched revision: 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de
diff --git a/cmd/flux/testdata/oci/delete_oci.golden b/cmd/flux/testdata/oci/delete_oci.golden
new file mode 100644
index 00000000..8e8599fa
--- /dev/null
+++ b/cmd/flux/testdata/oci/delete_oci.golden
@@ -0,0 +1,2 @@
+â–º deleting source oci thrfg in {{ .ns }} namespace
+✔ source oci deleted
diff --git a/cmd/flux/testdata/oci/export.golden b/cmd/flux/testdata/oci/export.golden
new file mode 100644
index 00000000..82d5fa19
--- /dev/null
+++ b/cmd/flux/testdata/oci/export.golden
@@ -0,0 +1,12 @@
+---
+apiVersion: source.toolkit.fluxcd.io/v1beta2
+kind: OCIRepository
+metadata:
+  name: podinfo
+  namespace: flux-system
+spec:
+  interval: 10m0s
+  ref:
+    tag: 6.1.6
+  url: ghcr.io/stefanprodan/manifests/podinfo
+
diff --git a/cmd/flux/testdata/oci/export_with_secret.golden b/cmd/flux/testdata/oci/export_with_secret.golden
new file mode 100644
index 00000000..79fd98a5
--- /dev/null
+++ b/cmd/flux/testdata/oci/export_with_secret.golden
@@ -0,0 +1,14 @@
+---
+apiVersion: source.toolkit.fluxcd.io/v1beta2
+kind: OCIRepository
+metadata:
+  name: podinfo
+  namespace: flux-system
+spec:
+  interval: 10m0s
+  ref:
+    tag: 6.1.6
+  secretRef:
+    name: creds
+  url: ghcr.io/stefanprodan/manifests/podinfo
+
diff --git a/cmd/flux/testdata/oci/get_oci.golden b/cmd/flux/testdata/oci/get_oci.golden
new file mode 100644
index 00000000..f4fa8333
--- /dev/null
+++ b/cmd/flux/testdata/oci/get_oci.golden
@@ -0,0 +1,2 @@
+NAME 	REVISION                                                        	SUSPENDED	READY	MESSAGE                                                                                         
+thrfg	3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de	False    	True 	stored artifact for revision '3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de'	
diff --git a/cmd/flux/testdata/oci/reconcile_oci.golden b/cmd/flux/testdata/oci/reconcile_oci.golden
new file mode 100644
index 00000000..0c258819
--- /dev/null
+++ b/cmd/flux/testdata/oci/reconcile_oci.golden
@@ -0,0 +1,4 @@
+â–º annotating OCIRepository thrfg in {{ .ns }} namespace
+✔ OCIRepository annotated
+â—Ž waiting for OCIRepository reconciliation
+✔ fetched revision 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de
diff --git a/cmd/flux/testdata/oci/resume_oci.golden b/cmd/flux/testdata/oci/resume_oci.golden
new file mode 100644
index 00000000..467514e7
--- /dev/null
+++ b/cmd/flux/testdata/oci/resume_oci.golden
@@ -0,0 +1,5 @@
+â–º resuming source oci thrfg in {{ .ns }} namespace
+✔ source oci resumed
+â—Ž waiting for OCIRepository reconciliation
+✔ OCIRepository reconciliation completed
+✔ fetched revision 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de
diff --git a/cmd/flux/testdata/oci/suspend_oci.golden b/cmd/flux/testdata/oci/suspend_oci.golden
new file mode 100644
index 00000000..40a0420e
--- /dev/null
+++ b/cmd/flux/testdata/oci/suspend_oci.golden
@@ -0,0 +1,2 @@
+â–º suspending source oci thrfg in {{ .ns }} namespace
+✔ source oci suspended
-- 
GitLab