github.com/argoproj/argo-cd/v3@v3.2.1/cmd/argocd/commands/admin/project_test.go (about) 1 package admin 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 10 "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1" 11 "github.com/argoproj/argo-cd/v3/pkg/client/clientset/versioned/fake" 12 ) 13 14 const ( 15 namespace = "default" 16 ) 17 18 func newProj(name string, roleNames ...string) *v1alpha1.AppProject { 19 var roles []v1alpha1.ProjectRole 20 for i := range roleNames { 21 roles = append(roles, v1alpha1.ProjectRole{Name: roleNames[i]}) 22 } 23 return &v1alpha1.AppProject{ObjectMeta: metav1.ObjectMeta{ 24 Name: name, 25 Namespace: namespace, 26 }, Spec: v1alpha1.AppProjectSpec{ 27 Roles: roles, 28 }} 29 } 30 31 func TestUpdateProjects_FindMatchingProject(t *testing.T) { 32 ctx := t.Context() 33 34 clientset := fake.NewSimpleClientset(newProj("foo", "test"), newProj("bar", "test")) 35 36 modification, err := getModification("set", "*", "*", "allow") 37 require.NoError(t, err) 38 err = updateProjects(ctx, clientset.ArgoprojV1alpha1().AppProjects(namespace), "ba*", "*", "set", modification, false) 39 require.NoError(t, err) 40 41 fooProj, err := clientset.ArgoprojV1alpha1().AppProjects(namespace).Get(ctx, "foo", metav1.GetOptions{}) 42 require.NoError(t, err) 43 assert.Empty(t, fooProj.Spec.Roles[0].Policies) 44 45 barProj, err := clientset.ArgoprojV1alpha1().AppProjects(namespace).Get(ctx, "bar", metav1.GetOptions{}) 46 require.NoError(t, err) 47 assert.Equal(t, []string{"p, proj:bar:test, *, set, bar/*, allow"}, barProj.Spec.Roles[0].Policies) 48 } 49 50 func TestUpdateProjects_FindMatchingRole(t *testing.T) { 51 ctx := t.Context() 52 53 clientset := fake.NewSimpleClientset(newProj("proj", "foo", "bar")) 54 55 modification, err := getModification("set", "*", "*", "allow") 56 require.NoError(t, err) 57 err = updateProjects(ctx, clientset.ArgoprojV1alpha1().AppProjects(namespace), "*", "fo*", "set", modification, false) 58 require.NoError(t, err) 59 60 proj, err := clientset.ArgoprojV1alpha1().AppProjects(namespace).Get(ctx, "proj", metav1.GetOptions{}) 61 require.NoError(t, err) 62 assert.Equal(t, []string{"p, proj:proj:foo, *, set, proj/*, allow"}, proj.Spec.Roles[0].Policies) 63 assert.Empty(t, proj.Spec.Roles[1].Policies) 64 } 65 66 func TestGetModification_SetPolicy(t *testing.T) { 67 modification, err := getModification("set", "*", "*", "allow") 68 require.NoError(t, err) 69 policy := modification("proj", "myaction") 70 assert.Equal(t, "*, myaction, proj/*, allow", policy) 71 } 72 73 func TestGetModification_RemovePolicy(t *testing.T) { 74 modification, err := getModification("remove", "*", "*", "allow") 75 require.NoError(t, err) 76 policy := modification("proj", "myaction") 77 assert.Empty(t, policy) 78 } 79 80 func TestGetModification_NotSupported(t *testing.T) { 81 _, err := getModification("bar", "*", "*", "allow") 82 assert.Errorf(t, err, "modification bar is not supported") 83 }