From 2fa8230624f0e2747786d025400418f361bf1f1f Mon Sep 17 00:00:00 2001 From: Valentin Rigal <rigal@teklia.com> Date: Tue, 15 Dec 2020 10:35:40 +0100 Subject: [PATCH] Update tests --- arkindex/project/tests/__init__.py | 2 +- arkindex/project/tests/test_acl_mixin.py | 8 ++-- .../sql_validation/corpus_rights_filter.sql | 18 ++++---- .../corpus_rights_filter_public.sql | 45 ++++++++++++------- 4 files changed, 43 insertions(+), 30 deletions(-) diff --git a/arkindex/project/tests/__init__.py b/arkindex/project/tests/__init__.py index bfb70ee524..29b3ea9bae 100644 --- a/arkindex/project/tests/__init__.py +++ b/arkindex/project/tests/__init__.py @@ -39,7 +39,7 @@ class _AssertExactQueriesContext(CaptureQueriesContext): reindent=True, use_space_around_operators=True, indent_width=4, - ) + ).strip() # When the file does not exist, try to create it with the current queries. # This avoids having to write all of the queries by hand when adding assertExactQueries for the first time. diff --git a/arkindex/project/tests/test_acl_mixin.py b/arkindex/project/tests/test_acl_mixin.py index e3f5d91c76..45af24dfcf 100644 --- a/arkindex/project/tests/test_acl_mixin.py +++ b/arkindex/project/tests/test_acl_mixin.py @@ -130,13 +130,13 @@ class TestACLMixin(FixtureTestCase): 'level': Role.Guest.value, } with self.assertExactQueries('corpus_rights_filter_public.sql', params=params): - corpora = list(corpus_acl_mixin.readable_corpora()) + corpora = list(corpus_acl_mixin.readable_corpora) self.assertCountEqual(corpora, [self.corpus, self.corpus1]) def test_corpus_acl_mixin_writable(self): corpus_acl_mixin = NewCorpusACLMixin(self.user1) with self.assertNumQueries(1): - corpora = list(corpus_acl_mixin.writable_corpora()) + corpora = list(corpus_acl_mixin.writable_corpora) self.assertCountEqual(corpora, [self.corpus1]) def test_repo_acl_mixin_has_read_access(self): @@ -169,11 +169,11 @@ class TestACLMixin(FixtureTestCase): def test_repo_acl_mixin_readable(self): repo_acl_mixin = RepositoryACLMixin(self.user2) with self.assertNumQueries(1): - repos = list(repo_acl_mixin.readable_repositories()) + repos = list(repo_acl_mixin.readable_repositories) self.assertCountEqual(repos, [self.repo1]) def test_repo_acl_mixin_executable(self): repo_acl_mixin = RepositoryACLMixin(self.user2) with self.assertNumQueries(1): - repos = list(repo_acl_mixin.executable_repositories()) + repos = list(repo_acl_mixin.executable_repositories) self.assertEqual(repos, []) diff --git a/arkindex/sql_validation/corpus_rights_filter.sql b/arkindex/sql_validation/corpus_rights_filter.sql index 1ae974fc3a..b0b5f6ed6a 100644 --- a/arkindex/sql_validation/corpus_rights_filter.sql +++ b/arkindex/sql_validation/corpus_rights_filter.sql @@ -1,11 +1,11 @@ -SELECT DISTINCT "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})) @@ -15,3 +15,5 @@ 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 diff --git a/arkindex/sql_validation/corpus_rights_filter_public.sql b/arkindex/sql_validation/corpus_rights_filter_public.sql index 549bde046d..5d10d04b52 100644 --- a/arkindex/sql_validation/corpus_rights_filter_public.sql +++ b/arkindex/sql_validation/corpus_rights_filter_public.sql @@ -1,18 +1,29 @@ -SELECT DISTINCT "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" -LEFT OUTER JOIN "users_right" ON ("documents_corpus"."id" = "users_right"."content_id" + (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" + FROM "documents_corpus" + INNER JOIN "users_right" ON ("documents_corpus"."id" = "users_right"."content_id" AND ("users_right"."content_type_id" = {corpus_type_id})) -LEFT OUTER JOIN "users_group" ON ("users_right"."group_id" = "users_group"."id") -LEFT OUTER JOIN "users_right" T5 ON ("users_group"."id" = T5."content_id" - 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}) - OR "documents_corpus"."public") + LEFT OUTER JOIN "users_group" ON ("users_right"."group_id" = "users_group"."id") + LEFT OUTER JOIN "users_right" T5 ON ("users_group"."id" = T5."content_id" + 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})) +UNION + (SELECT "documents_corpus"."created", + "documents_corpus"."updated", + "documents_corpus"."id", + "documents_corpus"."name", + "documents_corpus"."description", + "documents_corpus"."repository_id", + "documents_corpus"."public", + 10 AS "max_level" + FROM "documents_corpus" + WHERE "documents_corpus"."public") +ORDER BY (3) ASC, (8) DESC -- GitLab