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