Files
neuf-www/dnscms/tests/test_image_search.py
2026-08-21 10:12:16 +02:00

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"]] == []