diff --git a/filingcabinet/models.py b/filingcabinet/models.py index df00699..0a1d1ba 100644 --- a/filingcabinet/models.py +++ b/filingcabinet/models.py @@ -248,12 +248,18 @@ def get_absolute_domain_url(self): return getattr(settings, "SITE_URL", "") + self.get_absolute_url() def get_absolute_domain_embed_url(self): - path = reverse( - "filingcabinet:document-detail_embed_short", - kwargs={ - "pk": self.pk, - }, - ) + if self.slug: + path = reverse( + "filingcabinet:document-detail_embed", + kwargs={"pk": self.pk, "slug": self.slug}, + ) + else: + path = reverse( + "filingcabinet:document-detail_embed_short", + kwargs={ + "pk": self.pk, + }, + ) return getattr(settings, "SITE_URL", "") + path @property @@ -318,6 +324,9 @@ def get_file_url(self, filename=None): }, ) + def get_authorized_file_url(self, filename=None): + return self.get_file_url(filename=filename) + def delete(self, **kwargs): # FIXME: this should be storage system agnostic res = super().delete(**kwargs) @@ -763,9 +772,15 @@ def get_absolute_domain_url(self): return getattr(settings, "SITE_URL", "") + self.get_absolute_url() def get_absolute_domain_embed_url(self): - path = reverse( - "filingcabinet:document-collection_embed_short", kwargs={"pk": self.pk} - ) + if self.slug: + path = reverse( + "filingcabinet:document-collection_embed", + kwargs={"pk": self.pk, "slug": self.slug}, + ) + else: + path = reverse( + "filingcabinet:document-collection_embed_short", kwargs={"pk": self.pk} + ) return getattr(settings, "SITE_URL", "") + path def get_cover_image(self): diff --git a/tests/conftest.py b/tests/conftest.py index a3b40af..5060f95 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,5 @@ import os +import uuid import pytest from pytest_factoryboy import register @@ -46,9 +47,11 @@ def long_timeout_page(browser): @pytest.fixture() def processed_document(): - path = "docs/ef/39/5b/ef395b666014488aa551e431e653a1d9" + path = "docs-private/ef/39/5b/ef395b666014488aa551e431e653a1d9" doc = DocumentFactory( - uid="ef395b66-6014-488a-a551-e431e653a1d9", + title="Test Document", + description="Description of Test Document", + uid=uuid.UUID("ef395b66-6014-488a-a551-e431e653a1d9"), pdf_file=f"{path}/example.pdf", file_size=260082, pending=False, @@ -68,3 +71,29 @@ def processed_document(): image_small=f"{path}/page-p{i}-small.png", ) yield doc + + +@pytest.fixture() +def document_collection(processed_document, document_collection_factory): + collection = document_collection_factory( + title="Test Collection", + slug="test-collection", + description="Test Collection Description", + public=True, + ) + collection.documents.add(processed_document) + yield collection + + +@pytest.fixture() +def document_portal(processed_document, document_portal_factory): + portal = document_portal_factory( + title="Test Portal", + slug="test-portal", + description="Test Portal Description", + public=True, + ) + processed_document.portal = portal + processed_document.save() + + yield portal diff --git a/tests/test_collection_views.py b/tests/test_collection_views.py new file mode 100644 index 0000000..bc9597b --- /dev/null +++ b/tests/test_collection_views.py @@ -0,0 +1,83 @@ +from django.urls import reverse + +import pytest + + +@pytest.mark.django_db +def test_collection_detail(document_collection, client): + response = client.get(document_collection.get_absolute_url()) + assert response.status_code == 200 + assert document_collection.title in response.content.decode("utf-8") + assert document_collection.description in response.content.decode("utf-8") + + +@pytest.mark.django_db +def test_collection_detail_private(document_collection, client, dummy_user): + document_collection.public = False + document_collection.user = dummy_user + document_collection.save() + response = client.get(document_collection.get_absolute_url()) + assert response.status_code == 404 + + client.force_login(dummy_user) + response = client.get(document_collection.get_absolute_url()) + assert response.status_code == 200 + + +@pytest.mark.django_db +@pytest.mark.parametrize("initial_slug_val", ["", None]) +def test_collection_detail_slug_behavior( + document_collection, client, dummy_user, initial_slug_val +): + if initial_slug_val is not None: + document_collection.slug = initial_slug_val + document_collection.user = dummy_user + document_collection.save() + + bad_slug_url = reverse( + "filingcabinet:document-collection", + kwargs={"pk": document_collection.pk, "slug": "bad"}, + ) + response = client.get(bad_slug_url) + assert response.status_code == 302 + assert response.headers["Location"] == document_collection.get_absolute_url() + + query_param = "?foo=bar" + bad_slug_url = bad_slug_url + query_param + response = client.get(bad_slug_url) + assert response.status_code == 302 + assert ( + response.headers["Location"] + == document_collection.get_absolute_url() + query_param + ) + + document_collection.public = False + document_collection.user = dummy_user + document_collection.save() + response = client.get(bad_slug_url) + assert response.status_code == 404 + + client.force_login(dummy_user) + response = client.get(bad_slug_url) + assert response.status_code == 302 + assert ( + response.headers["Location"] + == document_collection.get_absolute_url() + query_param + ) + + +@pytest.mark.django_db +def test_collection_embed(document_collection, client): + response = client.get(document_collection.get_absolute_domain_embed_url()) + assert response.status_code == 200 + assert "