Increase coverage for html views
This commit is contained in:
parent
6bec79f904
commit
7d4e11b096
3 changed files with 63 additions and 4 deletions
|
@ -23,6 +23,19 @@ def published_article(author: User) -> Article:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture()
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def unpublished_article(author: User) -> Article:
|
||||||
|
return Article.objects.create(
|
||||||
|
title="Some interesting article title, but sorry it is not public yet",
|
||||||
|
status=Article.DRAFT,
|
||||||
|
author=author,
|
||||||
|
published_at=None,
|
||||||
|
slug="some-draft-article-slug",
|
||||||
|
content="## some draft article markdown\n\n[a draft article link](https://article.com)",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def published_page(author: User) -> Page:
|
def published_page(author: User) -> Page:
|
||||||
|
|
|
@ -40,11 +40,57 @@ def test_only_title_shown_on_list(client: Client, author: User):
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_access_article_by_slug(client: Client, published_article: Article):
|
def test_access_article_by_slug(client: Client, published_article: Article):
|
||||||
res = client.get(reverse("article-detail", kwargs={"slug": published_article.slug}))
|
_test_access_article_by_slug(client, published_article)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_access_page_by_slug(client: Client, published_page: Page):
|
||||||
|
_test_access_article_by_slug(client, published_page)
|
||||||
|
|
||||||
|
|
||||||
|
def _test_access_article_by_slug(client: Client, item: Article):
|
||||||
|
res = client.get(reverse("article-detail", kwargs={"slug": item.slug}))
|
||||||
assert res.status_code == 200
|
assert res.status_code == 200
|
||||||
content = res.content.decode("utf-8")
|
content = res.content.decode("utf-8")
|
||||||
assert published_article.title in content
|
assert item.title in content
|
||||||
assert published_article.get_formatted_content() in content
|
assert item.get_formatted_content() in content
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_anonymous_cant_access_draft_detail(
|
||||||
|
client: Client, unpublished_article: Article
|
||||||
|
):
|
||||||
|
res = client.get(
|
||||||
|
reverse("article-detail", kwargs={"slug": unpublished_article.slug})
|
||||||
|
)
|
||||||
|
assert res.status_code == 404
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_user_can_access_draft_detail(
|
||||||
|
client: Client, author: User, unpublished_article: Article
|
||||||
|
):
|
||||||
|
client.force_login(author)
|
||||||
|
_test_access_article_by_slug(client, unpublished_article)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_anonymous_cant_access_drafts_list(
|
||||||
|
client: Client, unpublished_article: Article
|
||||||
|
):
|
||||||
|
res = client.get(reverse("drafts-list"))
|
||||||
|
assert res.status_code == 302
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_user_can_access_drafts_list(
|
||||||
|
client: Client, author: User, unpublished_article: Article
|
||||||
|
):
|
||||||
|
client.force_login(author)
|
||||||
|
res = client.get(reverse("drafts-list"))
|
||||||
|
assert res.status_code == 200
|
||||||
|
content = res.content.decode("utf-8")
|
||||||
|
assert unpublished_article.title in content
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
|
|
|
@ -32,7 +32,7 @@ class ArticlesListView(BaseArticleListView):
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class DraftsListView(BaseArticleListView, LoginRequiredMixin):
|
class DraftsListView(LoginRequiredMixin, BaseArticleListView):
|
||||||
model = Article
|
model = Article
|
||||||
context_object_name = "articles"
|
context_object_name = "articles"
|
||||||
queryset = Article.objects.filter(status=Article.DRAFT)
|
queryset = Article.objects.filter(status=Article.DRAFT)
|
||||||
|
|
Reference in a new issue