From 62e49739d010ac8427a29fe6ce354509ccfe47e5 Mon Sep 17 00:00:00 2001
From: pasha-codefresh <pavel@codefresh.io>
Date: Mon, 2 May 2022 22:39:11 +0300
Subject: [PATCH] chore: Print application table test (#9266)

---
 cmd/argocd/commands/app_test.go | 114 +++++++++++++++++++++++++-------
 1 file changed, 91 insertions(+), 23 deletions(-)

diff --git a/cmd/argocd/commands/app_test.go b/cmd/argocd/commands/app_test.go
index 11489c57c..569ec7d5b 100644
--- a/cmd/argocd/commands/app_test.go
+++ b/cmd/argocd/commands/app_test.go
@@ -2,13 +2,14 @@ package commands
 
 import (
 	"fmt"
+	"os"
+	"testing"
+	"time"
+
 	"github.com/argoproj/gitops-engine/pkg/utils/kube"
 	"github.com/google/go-cmp/cmp"
 	"github.com/google/go-cmp/cmp/cmpopts"
 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
-	"os"
-	"testing"
-	"time"
 
 	"github.com/argoproj/gitops-engine/pkg/health"
 
@@ -22,18 +23,18 @@ import (
 )
 
 func Test_getInfos(t *testing.T) {
-	testCases := []struct{
-		name string
-		infos []string
+	testCases := []struct {
+		name          string
+		infos         []string
 		expectedInfos []*v1alpha1.Info
 	}{
 		{
-			name: "empty",
-			infos: []string{},
+			name:          "empty",
+			infos:         []string{},
 			expectedInfos: []*v1alpha1.Info{},
 		},
 		{
-			name: "simple key value",
+			name:  "simple key value",
 			infos: []string{"key1=value1", "key2=value2"},
 			expectedInfos: []*v1alpha1.Info{
 				{Name: "key1", Value: "value1"},
@@ -55,10 +56,10 @@ func Test_getInfos(t *testing.T) {
 func Test_getRefreshType(t *testing.T) {
 	refreshTypeNormal := string(v1alpha1.RefreshTypeNormal)
 	refreshTypeHard := string(v1alpha1.RefreshTypeHard)
-	testCases := []struct{
-		refresh bool
+	testCases := []struct {
+		refresh     bool
 		hardRefresh bool
-		expected *string
+		expected    *string
 	}{
 		{false, false, nil},
 		{false, true, &refreshTypeHard},
@@ -335,7 +336,7 @@ func Test_groupObjsByKey(t *testing.T) {
 		{
 			Object: map[string]interface{}{
 				"apiVersion": "apiextensions.k8s.io/v1",
-				"kind": "CustomResourceDefinition",
+				"kind":       "CustomResourceDefinition",
 				"metadata": map[string]interface{}{
 					"name": "certificates.cert-manager.io",
 				},
@@ -356,7 +357,7 @@ func Test_groupObjsByKey(t *testing.T) {
 		{
 			Object: map[string]interface{}{
 				"apiVersion": "apiextensions.k8s.io/v1",
-				"kind": "CustomResourceDefinition",
+				"kind":       "CustomResourceDefinition",
 				"metadata": map[string]interface{}{
 					"name": "certificates.cert-manager.io",
 				},
@@ -365,8 +366,8 @@ func Test_groupObjsByKey(t *testing.T) {
 	}
 
 	expected := map[kube.ResourceKey]*unstructured.Unstructured{
-		kube.ResourceKey{Group:"", Kind:"Pod", Namespace:"default", Name:"pod-name"}: localObjs[0],
-		kube.ResourceKey{Group:"apiextensions.k8s.io", Kind:"CustomResourceDefinition", Namespace:"", Name:"certificates.cert-manager.io"}: localObjs[1],
+		kube.ResourceKey{Group: "", Kind: "Pod", Namespace: "default", Name: "pod-name"}:                                                       localObjs[0],
+		kube.ResourceKey{Group: "apiextensions.k8s.io", Kind: "CustomResourceDefinition", Namespace: "", Name: "certificates.cert-manager.io"}: localObjs[1],
 	}
 
 	objByKey := groupObjsByKey(localObjs, liveObjs, "default")
@@ -581,7 +582,7 @@ func TestPrintAppSummaryTable(t *testing.T) {
 
 		windows := &v1alpha1.SyncWindows{
 			{
-				Kind: "allow",
+				Kind:     "allow",
 				Schedule: "0 0 * * *",
 				Duration: "24h",
 				Applications: []string{
@@ -590,7 +591,7 @@ func TestPrintAppSummaryTable(t *testing.T) {
 				ManualSync: true,
 			},
 			{
-				Kind: "deny",
+				Kind:     "deny",
 				Schedule: "0 0 * * *",
 				Duration: "24h",
 				Namespaces: []string{
@@ -598,7 +599,7 @@ func TestPrintAppSummaryTable(t *testing.T) {
 				},
 			},
 			{
-				Kind: "allow",
+				Kind:     "allow",
 				Schedule: "0 0 * * *",
 				Duration: "24h",
 				Clusters: []string{
@@ -839,11 +840,11 @@ func Test_unset(t *testing.T) {
 		Plugin: &v1alpha1.ApplicationSourcePlugin{
 			Env: v1alpha1.Env{
 				{
-					Name: "env-1",
+					Name:  "env-1",
 					Value: "env-value-1",
 				},
 				{
-					Name: "env-2",
+					Name:  "env-2",
 					Value: "env-value-2",
 				},
 			},
@@ -942,8 +943,8 @@ func Test_unset(t *testing.T) {
 }
 
 func Test_unset_nothingToUnset(t *testing.T) {
-	testCases := []struct{
-		name string
+	testCases := []struct {
+		name   string
 		source v1alpha1.ApplicationSource
 	}{
 		{"kustomize", v1alpha1.ApplicationSource{Kustomize: &v1alpha1.ApplicationSourceKustomize{}}},
@@ -963,3 +964,70 @@ func Test_unset_nothingToUnset(t *testing.T) {
 		})
 	}
 }
+
+func TestPrintApplicationTableNotWide(t *testing.T) {
+	output, err := captureOutput(func() error {
+		app := &v1alpha1.Application{
+			ObjectMeta: metav1.ObjectMeta{
+				Name: "app-name",
+			},
+			Spec: v1alpha1.ApplicationSpec{
+				Destination: v1alpha1.ApplicationDestination{
+					Server:    "http://localhost:8080",
+					Namespace: "default",
+				},
+				Project: "prj",
+			},
+			Status: v1alpha1.ApplicationStatus{
+				Sync: v1alpha1.SyncStatus{
+					Status: "OutOfSync",
+				},
+				Health: v1alpha1.HealthStatus{
+					Status: "Healthy",
+				},
+			},
+		}
+		output := "table"
+		printApplicationTable([]v1alpha1.Application{*app, *app}, &output)
+		return nil
+	})
+	assert.NoError(t, err)
+	expectation := "NAME      CLUSTER                NAMESPACE  PROJECT  STATUS     HEALTH   SYNCPOLICY  CONDITIONS\napp-name  http://localhost:8080  default    prj      OutOfSync  Healthy  <none>      <none>\napp-name  http://localhost:8080  default    prj      OutOfSync  Healthy  <none>      <none>\n"
+	assert.Equal(t, output, expectation)
+}
+
+func TestPrintApplicationTableWide(t *testing.T) {
+	output, err := captureOutput(func() error {
+		app := &v1alpha1.Application{
+			ObjectMeta: metav1.ObjectMeta{
+				Name: "app-name",
+			},
+			Spec: v1alpha1.ApplicationSpec{
+				Destination: v1alpha1.ApplicationDestination{
+					Server:    "http://localhost:8080",
+					Namespace: "default",
+				},
+				Source: v1alpha1.ApplicationSource{
+					RepoURL:        "https://github.com/argoproj/argocd-example-apps",
+					Path:           "guestbook",
+					TargetRevision: "123",
+				},
+				Project: "prj",
+			},
+			Status: v1alpha1.ApplicationStatus{
+				Sync: v1alpha1.SyncStatus{
+					Status: "OutOfSync",
+				},
+				Health: v1alpha1.HealthStatus{
+					Status: "Healthy",
+				},
+			},
+		}
+		output := "wide"
+		printApplicationTable([]v1alpha1.Application{*app, *app}, &output)
+		return nil
+	})
+	assert.NoError(t, err)
+	expectation := "NAME      CLUSTER                NAMESPACE  PROJECT  STATUS     HEALTH   SYNCPOLICY  CONDITIONS  REPO                                             PATH       TARGET\napp-name  http://localhost:8080  default    prj      OutOfSync  Healthy  <none>      <none>      https://github.com/argoproj/argocd-example-apps  guestbook  123\napp-name  http://localhost:8080  default    prj      OutOfSync  Healthy  <none>      <none>      https://github.com/argoproj/argocd-example-apps  guestbook  123\n"
+	assert.Equal(t, output, expectation)
+}
-- 
GitLab