def test_article_view_detail_draft(db, admin_client, client): """ Draft article is only reachable for admin in 'admin mode'. """ user = AuthorFactory() instance = ArticleFactory(status=STATUS_DRAFT) # With default behavior a draft is not available no matter it's for an admin or not response = client.get(instance.get_absolute_url()) assert response.status_code == 404 response = admin_client.get(instance.get_absolute_url()) assert response.status_code == 404 # Admin mode behavior do not work for non admin users response = client.get(instance.get_absolute_url(), {'admin': 1}) assert response.status_code == 404 client.force_login(user) response = client.get(instance.get_absolute_url(), {'admin': 1}) assert response.status_code == 404 # Admin mode behavior only work for admin users response = admin_client.get(instance.get_absolute_url(), {'admin': 1}) assert response.status_code == 200
def test_article_view_detail_published(db, admin_client, client): """ Published article is reachable from anyone. """ instance = ArticleFactory() response = client.get(instance.get_absolute_url()) assert response.status_code == 200 response = admin_client.get(instance.get_absolute_url()) assert response.status_code == 200
def test_article_view_detail_private(db, client): """ Private article is reachable only for authenticated users. """ user = AuthorFactory() instance = ArticleFactory(private=True) response = client.get(instance.get_absolute_url()) assert response.status_code == 404 client.force_login(user) response = client.get(instance.get_absolute_url()) assert response.status_code == 200
def test_article_view_detail_publication(db, admin_client, client): """ Publication criteria should be respected to view an Article, excepted for admin mode. """ now = timezone.now() past_hour = now - datetime.timedelta(hours=1) instance = ArticleFactory(publish_end=past_hour) response = client.get(instance.get_absolute_url()) assert response.status_code == 404 response = admin_client.get(instance.get_absolute_url(), {'admin': 1}) assert response.status_code == 200
def test_article_view_detail_content(db, admin_client): """ Detail view should contain all expected content and relations. Note we are requesting with admin mode to be able to see a draft article to check for the "draft" CSS class. Also, this does not care about textual content (title, lead, content, etc..). """ picsou = AuthorFactory(first_name="Picsou", last_name="McDuck") AuthorFactory(first_name="Flairsou", last_name="Cresus") cat_1 = CategoryFactory(title="cat_1") CategoryFactory(title="cat_2") CategoryFactory(title="cat_3") ArticleFactory(title="Foo") article_2 = ArticleFactory(title="Bar") article_3 = ArticleFactory( title="Ping", fill_categories=[cat_1], fill_related=[article_2], fill_authors=[picsou], status=STATUS_DRAFT, pinned=True, featured=True, private=True, ) # Get detail HTML page response = admin_client.get(article_3.get_absolute_url(), {'admin': 1}) assert response.status_code == 200 # Parse HTML response to get content and relations dom = html_pyquery(response) container = dom.find("#lotus-content .article-detail")[0] categories = [ item.text for item in dom.find("#lotus-content .categories li a") ] authors = [item.text for item in dom.find("#lotus-content .authors li")] relateds = [ item.text for item in dom.find("#lotus-content .relateds li a") ] cover = dom.find("#lotus-content .cover img")[0].get("src") large_img = dom.find("#lotus-content .image img")[0].get("src") classes = sorted( [v for v in container.get("class").split() if v != "article-detail"]) assert categories == ["cat_1"] assert authors == ["Picsou McDuck"] assert relateds == ["Bar"] assert classes == ["draft", "featured", "pinned", "private"] assert cover == article_3.cover.url assert large_img == article_3.image.url