82 lines
2.7 KiB
Python
82 lines
2.7 KiB
Python
import pytest
|
|
|
|
from wagtail.search.index import class_is_indexed
|
|
|
|
from images.models import CustomImage
|
|
from tests.conftest import CustomImageFactory
|
|
|
|
|
|
def test_image_model_is_indexed():
|
|
assert class_is_indexed(CustomImage)
|
|
|
|
|
|
def test_admin_image_listing_renders_a_search_box(admin_client, db):
|
|
response = admin_client.get("/admin/images/")
|
|
|
|
assert response.status_code == 200
|
|
assert 'name="q"' in response.content.decode()
|
|
|
|
|
|
def test_admin_image_listing_search_filters_results(admin_client, db):
|
|
CustomImageFactory(title="Konsertbilde fra Betong")
|
|
CustomImageFactory(title="Portrett av Jahn Teigen")
|
|
|
|
response = admin_client.get("/admin/images/", {"q": "Betong"})
|
|
|
|
assert [image.title for image in response.context["page_obj"]] == ["Konsertbilde fra Betong"]
|
|
|
|
|
|
def test_admin_image_chooser_search_filters_results(admin_client, db):
|
|
CustomImageFactory(title="Konsertbilde fra Betong")
|
|
CustomImageFactory(title="Portrett av Jahn Teigen")
|
|
|
|
response = admin_client.get("/admin/images/chooser/results/", {"q": "Teigen"})
|
|
|
|
assert [image.title for image in response.context["results"]] == ["Portrett av Jahn Teigen"]
|
|
|
|
|
|
@pytest.mark.parametrize("term", ["Konsertbilde", "Stemningsbilde", "Teigen", "Nordmann"])
|
|
def test_admin_image_listing_searches_alt_and_attribution(admin_client, db, term):
|
|
CustomImageFactory(
|
|
title="Konsertbilde fra Betong",
|
|
description="Stemningsbilde fra scenen",
|
|
alt="Portrettbilde av Jahn Teigen",
|
|
attribution="Foto: Kari Nordmann",
|
|
)
|
|
CustomImageFactory(title="Et annet bilde")
|
|
|
|
response = admin_client.get("/admin/images/", {"q": term})
|
|
|
|
assert [image.title for image in response.context["page_obj"]] == ["Konsertbilde fra Betong"]
|
|
|
|
|
|
def test_public_images_field_has_no_search_argument(graphql_post):
|
|
_, body = graphql_post('{ __type(name: "Query") { fields { name args { name } } } }')
|
|
args = {
|
|
field["name"]: [arg["name"] for arg in field["args"]]
|
|
for field in body["data"]["__type"]["fields"]
|
|
}
|
|
|
|
assert "searchQuery" not in args["images"]
|
|
assert "searchOperator" not in args["images"]
|
|
|
|
|
|
def test_search_union_only_advertises_page_types(graphql_post):
|
|
_, body = graphql_post('{ __type(name: "Search") { possibleTypes { name } } }')
|
|
members = {t["name"] for t in body["data"]["__type"]["possibleTypes"]}
|
|
|
|
assert "CustomImage" not in members
|
|
assert "Rendition" not in members
|
|
assert "EventPage" in members
|
|
|
|
|
|
def test_public_search_does_not_return_images(db, graphql_post):
|
|
CustomImageFactory(title="Betong")
|
|
|
|
_, body = graphql_post(
|
|
"query($q: String) { search(query: $q) { __typename } }", {"q": "Betong"}
|
|
)
|
|
|
|
assert "errors" not in body
|
|
assert [result["__typename"] for result in body["data"]["search"]] == []
|