Skip to content
Snippets Groups Projects
Commit e700a1bd authored by Valentin Rigal's avatar Valentin Rigal
Browse files

Add tests

parent dfd12889
No related branches found
No related tags found
No related merge requests found
import uuid
from django.contrib.auth.models import AnonymousUser
from django.contrib.contenttypes.models import ContentType
from arkindex.dataimport.models import Repository, RepositoryType
......@@ -35,8 +38,8 @@ class TestACLMixin(FixtureTestCase):
cls.group2 = Group.objects.create(name='Group2')
cls.repo1 = Repository.objects.create(type=RepositoryType.Worker, url='http://repo1')
cls.corpus1 = Corpus.objects.create(name="Corpus1")
cls.corpus2 = Corpus.objects.create(name="Corpus2")
cls.corpus1 = Corpus.objects.create(name="Corpus1", id=uuid.UUID('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'))
cls.corpus2 = Corpus.objects.create(name="Corpus2", id=uuid.UUID('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'))
Right.objects.bulk_create([
Right(user=cls.user1, content_object=cls.group1, level=100),
......@@ -120,7 +123,7 @@ class TestACLMixin(FixtureTestCase):
self.assertEqual(admin_access, access_check)
def test_corpus_acl_mixin_readable(self):
# Corpora with the public attribute are accessible by any user
# Corpora with the public attribute are accessible by any user with guest rights
corpus_acl_mixin = NewCorpusACLMixin(self.user1)
params = {
'user_id': self.user1.id,
......@@ -131,13 +134,23 @@ class TestACLMixin(FixtureTestCase):
}
with self.assertExactQueries('corpus_rights_filter_public.sql', params=params):
corpora = list(corpus_acl_mixin.readable_corpora)
self.assertCountEqual(corpora, [self.corpus, self.corpus1])
self.assertCountEqual(
[(corpus, corpus.max_level) for corpus in corpora],
[
(self.corpus1, 75),
# Defaults to guest role
(self.corpus, Role.Guest.value),
]
)
def test_corpus_acl_mixin_writable(self):
corpus_acl_mixin = NewCorpusACLMixin(self.user1)
with self.assertNumQueries(1):
corpora = list(corpus_acl_mixin.writable_corpora)
self.assertCountEqual(corpora, [self.corpus1])
self.assertCountEqual(
[(corpus, corpus.max_level) for corpus in corpora],
[(self.corpus1, 75)]
)
def test_repo_acl_mixin_has_read_access(self):
repo_acl_mixin = RepositoryACLMixin(self.user2)
......@@ -170,10 +183,47 @@ class TestACLMixin(FixtureTestCase):
repo_acl_mixin = RepositoryACLMixin(self.user2)
with self.assertNumQueries(1):
repos = list(repo_acl_mixin.readable_repositories)
self.assertCountEqual(repos, [self.repo1])
self.assertCountEqual(
[(repo, repo.max_level) for repo in repos],
[(self.repo1, 10)]
)
def test_repo_acl_mixin_executable(self):
repo_acl_mixin = RepositoryACLMixin(self.user2)
with self.assertNumQueries(1):
repos = list(repo_acl_mixin.executable_repositories)
self.assertEqual(repos, [])
def test_corpus_readable_orderable(self):
# Assert corpora retrieved via the mixin are still orderable
corpus_acl_mixin = NewCorpusACLMixin(self.user3, order_by_fields=('name',))
with self.assertNumQueries(1):
corpora = list(corpus_acl_mixin.readable_corpora)
self.assertListEqual(
[(c.name, str(c.id)[:4], c.max_level) for c in corpora],
[
('Corpus1', 'bbbb', 100),
('Corpus2', 'aaaa', 75),
('Unit Tests', str(self.corpus.id)[:4], Role.Guest.value)
]
)
def test_super_admin_readable_corpora(self):
# A super admin should retrieve all existing corpora with Admin rigths
corpus_acl_mixin = NewCorpusACLMixin(self.superuser)
with self.assertNumQueries(1):
corpora = list(corpus_acl_mixin.readable_corpora)
self.assertCountEqual(
[(c.name, c.max_level) for c in corpora],
[(c.name, Role.Admin.value) for c in Corpus.objects.all()]
)
def test_anonymous_user_readable_corpora(self):
# An anonymous user should have guest access to any public corpora
corpus_acl_mixin = NewCorpusACLMixin(AnonymousUser())
with self.assertNumQueries(1):
corpora = list(corpus_acl_mixin.readable_corpora)
self.assertCountEqual(
[(c.name, c.max_level) for c in corpora],
[(c.name, Role.Guest.value) for c in Corpus.objects.filter(public=True)]
)
......@@ -15,5 +15,4 @@ LEFT OUTER JOIN "users_right" T5 ON ("users_group"."id" = T5."content_id"
WHERE (("users_right"."user_id" = {user_id}
OR T5."user_id" = {user_id})
AND LEAST("users_right"."level", T5."level") >= {level})
ORDER BY "documents_corpus"."id" ASC,
"max_level" DESC
ORDER BY "documents_corpus"."id" ASC
(SELECT "documents_corpus"."created",
"documents_corpus"."updated",
"documents_corpus"."id",
"documents_corpus"."name",
"documents_corpus"."description",
"documents_corpus"."repository_id",
"documents_corpus"."public",
LEAST("users_right"."level", T5."level") AS "max_level"
(SELECT DISTINCT ON ("documents_corpus"."id") "documents_corpus"."created",
"documents_corpus"."updated",
"documents_corpus"."id",
"documents_corpus"."name",
"documents_corpus"."description",
"documents_corpus"."repository_id",
"documents_corpus"."public",
LEAST("users_right"."level", T5."level") AS "max_level"
FROM "documents_corpus"
INNER JOIN "users_right" ON ("documents_corpus"."id" = "users_right"."content_id"
AND ("users_right"."content_type_id" = {corpus_type_id}))
......@@ -14,7 +14,8 @@
AND (T5."content_type_id" = {group_type_id}))
WHERE (("users_right"."user_id" = {user_id}
OR T5."user_id" = {user_id})
AND LEAST("users_right"."level", T5."level") >= {level}))
AND LEAST("users_right"."level", T5."level") >= {level})
ORDER BY "documents_corpus"."id" ASC, "max_level" DESC)
UNION
(SELECT "documents_corpus"."created",
"documents_corpus"."updated",
......@@ -26,4 +27,4 @@ UNION
10 AS "max_level"
FROM "documents_corpus"
WHERE "documents_corpus"."public")
ORDER BY (3) ASC, (8) DESC
ORDER BY (3) ASC
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment