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