github.com/argoproj/argo-cd/v2@v2.10.9/server/notification/notification_test.go (about) 1 package notification 2 3 import ( 4 "context" 5 "os" 6 "testing" 7 8 "github.com/argoproj/argo-cd/v2/pkg/apiclient/notification" 9 "github.com/argoproj/argo-cd/v2/reposerver/apiclient/mocks" 10 service "github.com/argoproj/argo-cd/v2/util/notification/argocd" 11 "github.com/argoproj/argo-cd/v2/util/notification/k8s" 12 "github.com/argoproj/argo-cd/v2/util/notification/settings" 13 "github.com/argoproj/notifications-engine/pkg/api" 14 "github.com/stretchr/testify/assert" 15 "github.com/stretchr/testify/require" 16 corev1 "k8s.io/api/core/v1" 17 "k8s.io/utils/pointer" 18 19 v1 "k8s.io/apimachinery/pkg/apis/meta/v1" 20 "k8s.io/client-go/kubernetes/fake" 21 k8scache "k8s.io/client-go/tools/cache" 22 "k8s.io/kubectl/pkg/scheme" 23 ) 24 25 const testNamespace = "default" 26 27 func TestNotificationServer(t *testing.T) { 28 29 // catalogPath := path.Join(paths[1], "config", "notifications-catalog") 30 b, err := os.ReadFile("../../notifications_catalog/install.yaml") 31 require.NoError(t, err) 32 33 cm := &corev1.ConfigMap{} 34 _, _, err = scheme.Codecs.UniversalDeserializer().Decode(b, nil, cm) 35 require.NoError(t, err) 36 cm.Namespace = testNamespace 37 38 kubeclientset := fake.NewSimpleClientset(&corev1.ConfigMap{ 39 ObjectMeta: v1.ObjectMeta{ 40 Namespace: testNamespace, 41 Name: "argocd-notifications-cm", 42 }, 43 Data: map[string]string{ 44 "service.webhook.test": "url: https://test.example.com", 45 "template.app-created": "email:\n subject: Application {{.app.metadata.name}} has been created.\nmessage: Application {{.app.metadata.name}} has been created.\nteams:\n title: Application {{.app.metadata.name}} has been created.\n", 46 "trigger.on-created": "- description: Application is created.\n oncePer: app.metadata.name\n send:\n - app-created\n when: \"true\"\n", 47 }, 48 }, 49 &corev1.Secret{ 50 ObjectMeta: v1.ObjectMeta{ 51 Name: "argocd-notifications-secret", 52 Namespace: testNamespace, 53 }, 54 Data: map[string][]byte{}, 55 }) 56 57 ctx := context.Background() 58 secretInformer := k8s.NewSecretInformer(kubeclientset, testNamespace, "argocd-notifications-secret") 59 configMapInformer := k8s.NewConfigMapInformer(kubeclientset, testNamespace, "argocd-notifications-cm") 60 go secretInformer.Run(ctx.Done()) 61 if !k8scache.WaitForCacheSync(ctx.Done(), secretInformer.HasSynced) { 62 panic("Timed out waiting for caches to sync") 63 } 64 go configMapInformer.Run(ctx.Done()) 65 if !k8scache.WaitForCacheSync(ctx.Done(), configMapInformer.HasSynced) { 66 panic("Timed out waiting for caches to sync") 67 } 68 mockRepoClient := &mocks.Clientset{RepoServerServiceClient: &mocks.RepoServerServiceClient{}} 69 70 argocdService, err := service.NewArgoCDService(kubeclientset, testNamespace, mockRepoClient) 71 require.NoError(t, err) 72 defer argocdService.Close() 73 apiFactory := api.NewFactory(settings.GetFactorySettings(argocdService, "argocd-notifications-secret", "argocd-notifications-cm", false), testNamespace, secretInformer, configMapInformer) 74 75 t.Run("TestListServices", func(t *testing.T) { 76 server := NewServer(apiFactory) 77 services, err := server.ListServices(ctx, ¬ification.ServicesListRequest{}) 78 assert.NoError(t, err) 79 assert.Len(t, services.Items, 1) 80 assert.Equal(t, services.Items[0].Name, pointer.String("test")) 81 assert.NotEmpty(t, services.Items[0]) 82 }) 83 t.Run("TestListTriggers", func(t *testing.T) { 84 server := NewServer(apiFactory) 85 triggers, err := server.ListTriggers(ctx, ¬ification.TriggersListRequest{}) 86 assert.NoError(t, err) 87 assert.Len(t, triggers.Items, 1) 88 assert.Equal(t, triggers.Items[0].Name, pointer.String("on-created")) 89 assert.NotEmpty(t, triggers.Items[0]) 90 }) 91 t.Run("TestListTemplates", func(t *testing.T) { 92 server := NewServer(apiFactory) 93 templates, err := server.ListTemplates(ctx, ¬ification.TemplatesListRequest{}) 94 assert.NoError(t, err) 95 assert.Len(t, templates.Items, 1) 96 assert.Equal(t, templates.Items[0].Name, pointer.String("app-created")) 97 assert.NotEmpty(t, templates.Items[0]) 98 }) 99 }