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