Skip to content

Commit

Permalink
Add view tests for document, collection, portal
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanw committed Oct 31, 2022
1 parent b77514a commit cd54919
Show file tree
Hide file tree
Showing 6 changed files with 322 additions and 24 deletions.
33 changes: 24 additions & 9 deletions filingcabinet/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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):
Expand Down
33 changes: 31 additions & 2 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
import uuid

import pytest
from pytest_factoryboy import register
Expand Down Expand Up @@ -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,
Expand All @@ -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
83 changes: 83 additions & 0 deletions tests/test_collection_views.py
Original file line number Diff line number Diff line change
@@ -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 "<h2>{}</h2>".format(
document_collection.title
) not in response.content.decode("utf-8")

document_collection.slug = ""
document_collection.save()
response = client.get(document_collection.get_absolute_domain_embed_url())
assert response.status_code == 200
assert "<h2>{}</h2>".format(
document_collection.title
) not in response.content.decode("utf-8")
146 changes: 146 additions & 0 deletions tests/test_document_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
from django.urls import reverse

import pytest

from filingcabinet import views


@pytest.mark.django_db
def test_document_detail(processed_document, client):
response = client.get(processed_document.get_absolute_url())
assert response.status_code == 200
assert processed_document.title in response.content.decode("utf-8")
assert processed_document.description in response.content.decode("utf-8")


@pytest.mark.django_db
def test_document_detail_private(processed_document, client, dummy_user):
processed_document.public = False
processed_document.user = dummy_user
processed_document.save()
response = client.get(processed_document.get_absolute_url())
assert response.status_code == 404

client.force_login(dummy_user)
response = client.get(processed_document.get_absolute_url())
assert response.status_code == 200


@pytest.mark.django_db
def test_document_detail_pending(processed_document, client, dummy_user):
processed_document.pending = True
processed_document.user = dummy_user
processed_document.save()
response = client.get(processed_document.get_absolute_url())
assert response.status_code == 200
# iframe with PDF embed present
assert '<iframe src="{}"'.format(
processed_document.get_file_url()
) in response.content.decode("utf-8")


@pytest.mark.django_db
@pytest.mark.parametrize("initial_slug_val", ["", None])
def test_document_detail_slug_behavior(
processed_document, client, dummy_user, initial_slug_val
):
if initial_slug_val is not None:
processed_document.slug = initial_slug_val
processed_document.user = dummy_user
processed_document.save()

bad_slug_url = reverse(
"filingcabinet:document-detail",
kwargs={"pk": processed_document.pk, "slug": "bad"},
)
response = client.get(bad_slug_url)
assert response.status_code == 302
assert response.headers["Location"] == processed_document.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"]
== processed_document.get_absolute_url() + query_param
)

processed_document.public = False
processed_document.user = dummy_user
processed_document.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"]
== processed_document.get_absolute_url() + query_param
)


@pytest.mark.django_db
def test_document_detail_page_query(processed_document, client, monkeypatch):
monkeypatch.setattr(views, "PREVIEW_PAGE_COUNT", 2)
response = client.get(processed_document.get_absolute_url() + "?page=1000")
assert response.status_code == 200
content = response.content.decode("utf-8")
assert '<a href="#page-1"' in content
assert '<a href="#page-2"' in content
assert '<a href="#page-3"' not in content
assert '<a href="#page-4"' not in content

response = client.get(processed_document.get_absolute_url() + "?page=1")
assert response.status_code == 200
content = response.content.decode("utf-8")
assert '<a href="#page-1"' in content
assert '<a href="#page-2"' in content
assert '<a href="#page-3"' not in content
assert '<a href="#page-4"' not in content

response = client.get(processed_document.get_absolute_url() + "?page=2")
assert response.status_code == 200
content = response.content.decode("utf-8")
assert '<a href="#page-1"' not in content
assert '<a href="#page-2"' in content
assert '<a href="#page-3"' in content
assert '<a href="#page-4"' not in content


@pytest.mark.django_db
def test_document_embed(processed_document, client):
response = client.get(processed_document.get_absolute_domain_embed_url())
assert response.status_code == 200
assert "<h2>{}</h2>".format(
processed_document.title
) not in response.content.decode("utf-8")

processed_document.slug = ""
processed_document.save()
response = client.get(processed_document.get_absolute_domain_embed_url())
assert response.status_code == 200
assert "<h2>{}</h2>".format(
processed_document.title
) not in response.content.decode("utf-8")


@pytest.mark.django_db
def test_document_file_detail(processed_document, client, dummy_user):
processed_document.user = dummy_user
processed_document.public = False
processed_document.save()

response = client.get(processed_document.get_file_url())
assert response.status_code == 404

client.force_login(dummy_user)
response = client.get(processed_document.get_file_url().replace("/ef/", "/aa/"))
assert response.status_code == 404
response = client.get(processed_document.get_file_url())
assert response.status_code == 200
assert response.headers["Content-Type"] == ""
assert response.headers["X-Accel-Redirect"].endswith(
processed_document.get_file_name()
)
38 changes: 38 additions & 0 deletions tests/test_portal_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from django.urls import reverse

import pytest


@pytest.mark.django_db
def test_portal_detail(document_portal, client):
response = client.get(document_portal.get_absolute_url())
assert response.status_code == 200
assert document_portal.title in response.content.decode("utf-8")
assert document_portal.description in response.content.decode("utf-8")


@pytest.mark.django_db
def test_portal_detail_private(document_portal, client, dummy_user):
document_portal.public = False
document_portal.save()
response = client.get(document_portal.get_absolute_url())
assert response.status_code == 404

client.force_login(dummy_user)
response = client.get(document_portal.get_absolute_url())
assert response.status_code == 404

dummy_user.is_superuser = True
dummy_user.save()
response = client.get(document_portal.get_absolute_url())
assert response.status_code == 200


@pytest.mark.django_db
def test_portal_detail_slug_behavior(client):
bad_slug_url = reverse(
"filingcabinet:document-portal",
kwargs={"slug": "bad"},
)
response = client.get(bad_slug_url)
assert response.status_code == 404
13 changes: 0 additions & 13 deletions tests/test_rss_api.py

This file was deleted.

0 comments on commit cd54919

Please sign in to comment.