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  }