diff --git a/pkg/models/saved_filters_test.go b/pkg/models/saved_filters_test.go index e746b6b91..c7c06b4ff 100644 --- a/pkg/models/saved_filters_test.go +++ b/pkg/models/saved_filters_test.go @@ -62,9 +62,6 @@ func TestSavedFilter_Create(t *testing.T) { } func TestSavedFilter_ReadOne(t *testing.T) { - // Also test when getting a list which is actually a saved filter it returns the saved filter - // Also test getting tasks from a saved filter through the task collection as part of a normal task - // Also test rights (maybe not here) } func TestSavedFilter_Update(t *testing.T) { @@ -95,3 +92,148 @@ func TestSavedFilter_Delete(t *testing.T) { "id": 1, }) } + +func TestSavedFilter_Rights(t *testing.T) { + user1 := &user.User{ID: 1} + user2 := &user.User{ID: 2} + ls := &LinkSharing{ID: 1} + + t.Run("create", func(t *testing.T) { + // Should always be true + db.LoadAndAssertFixtures(t) + can, err := (&SavedFilter{}).CanCreate(user1) + assert.NoError(t, err) + assert.True(t, can) + }) + t.Run("read", func(t *testing.T) { + t.Run("owner", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + sf := &SavedFilter{ + ID: 1, + Title: "Lorem", + } + can, max, err := sf.CanRead(user1) + assert.NoError(t, err) + assert.Equal(t, int(RightAdmin), max) + assert.True(t, can) + }) + t.Run("not owner", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + sf := &SavedFilter{ + ID: 1, + Title: "Lorem", + } + can, _, err := sf.CanRead(user2) + assert.NoError(t, err) + assert.False(t, can) + }) + t.Run("nonexisting", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + sf := &SavedFilter{ + ID: 9999, + Title: "Lorem", + } + can, _, err := sf.CanRead(user1) + assert.Error(t, err) + assert.True(t, IsErrSavedFilterDoesNotExist(err)) + assert.False(t, can) + }) + t.Run("link share", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + sf := &SavedFilter{ + ID: 1, + Title: "Lorem", + } + can, _, err := sf.CanRead(ls) + assert.Error(t, err) + assert.True(t, IsErrSavedFilterNotAvailableForLinkShare(err)) + assert.False(t, can) + }) + }) + t.Run("update", func(t *testing.T) { + t.Run("owner", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + sf := &SavedFilter{ + ID: 1, + Title: "Lorem", + } + can, err := sf.CanUpdate(user1) + assert.NoError(t, err) + assert.True(t, can) + }) + t.Run("not owner", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + sf := &SavedFilter{ + ID: 1, + Title: "Lorem", + } + can, err := sf.CanUpdate(user2) + assert.NoError(t, err) + assert.False(t, can) + }) + t.Run("nonexisting", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + sf := &SavedFilter{ + ID: 9999, + Title: "Lorem", + } + can, err := sf.CanUpdate(user1) + assert.Error(t, err) + assert.True(t, IsErrSavedFilterDoesNotExist(err)) + assert.False(t, can) + }) + t.Run("link share", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + sf := &SavedFilter{ + ID: 1, + Title: "Lorem", + } + can, err := sf.CanUpdate(ls) + assert.Error(t, err) + assert.True(t, IsErrSavedFilterNotAvailableForLinkShare(err)) + assert.False(t, can) + }) + }) + t.Run("delete", func(t *testing.T) { + t.Run("owner", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + sf := &SavedFilter{ + ID: 1, + } + can, err := sf.CanDelete(user1) + assert.NoError(t, err) + assert.True(t, can) + }) + t.Run("not owner", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + sf := &SavedFilter{ + ID: 1, + } + can, err := sf.CanDelete(user2) + assert.NoError(t, err) + assert.False(t, can) + }) + t.Run("nonexisting", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + sf := &SavedFilter{ + ID: 9999, + Title: "Lorem", + } + can, err := sf.CanDelete(user1) + assert.Error(t, err) + assert.True(t, IsErrSavedFilterDoesNotExist(err)) + assert.False(t, can) + }) + t.Run("link share", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + sf := &SavedFilter{ + ID: 1, + Title: "Lorem", + } + can, err := sf.CanDelete(ls) + assert.Error(t, err) + assert.True(t, IsErrSavedFilterNotAvailableForLinkShare(err)) + assert.False(t, can) + }) + }) +}