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, &notification.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, &notification.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, &notification.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  }