Files
old-saburly-wagtail-web/env/lib/python3.10/site-packages/wagtail/documents/tests/test_search.py
2024-08-27 20:33:44 +02:00

110 lines
3.5 KiB
Python

import unittest
from django.core.files.base import ContentFile
from django.test import TestCase
from django.test.utils import override_settings
from django.urls import reverse
from wagtail.documents import models
from wagtail.test.utils import WagtailTestUtils
@override_settings(_WAGTAILSEARCH_FORCE_AUTO_UPDATE=["elasticsearch"])
class TestIssue613(WagtailTestUtils, TestCase):
def get_elasticsearch_backend(self):
from django.conf import settings
from wagtail.search.backends import get_search_backend
if "elasticsearch" not in settings.WAGTAILSEARCH_BACKENDS:
raise unittest.SkipTest("No elasticsearch backend active")
return get_search_backend("elasticsearch")
def setUp(self):
self.search_backend = self.get_elasticsearch_backend()
self.login()
def add_document(self, **params):
# Build a fake file
fake_file = ContentFile(b"A boring example document")
fake_file.name = "test.txt"
# Submit
post_data = {
"title": "Test document",
"file": fake_file,
}
post_data.update(params)
response = self.client.post(reverse("wagtaildocs:add"), post_data)
# User should be redirected back to the index
self.assertRedirects(response, reverse("wagtaildocs:index"))
# Document should be created
doc = models.Document.objects.filter(title=post_data["title"])
self.assertTrue(doc.exists())
return doc.first()
def edit_document(self, **params):
# Build a fake file
fake_file = ContentFile(b"A boring example document")
fake_file.name = "test.txt"
# Create a document without tags to edit
document = models.Document.objects.create(title="Test document", file=fake_file)
# Build another fake file
another_fake_file = ContentFile(b"A boring example document")
another_fake_file.name = "test.txt"
# Submit
post_data = {
"title": "Test document changed!",
"file": another_fake_file,
}
post_data.update(params)
response = self.client.post(
reverse("wagtaildocs:edit", args=(document.id,)), post_data
)
# User should be redirected back to the index
self.assertRedirects(response, reverse("wagtaildocs:index"))
# Document should be changed
doc = models.Document.objects.filter(title=post_data["title"])
self.assertTrue(doc.exists())
return doc.first()
def test_issue_613_on_add(self):
# Reset the search index
self.search_backend.reset_index()
self.search_backend.add_type(models.Document)
# Add a document with some tags
document = self.add_document(tags="hello")
self.search_backend.refresh_index()
# Search for it by tag
results = self.search_backend.search("hello", models.Document)
# Check
self.assertEqual(len(results), 1)
self.assertEqual(results[0].id, document.id)
def test_issue_613_on_edit(self):
# Reset the search index
self.search_backend.reset_index()
self.search_backend.add_type(models.Document)
# Add a document with some tags
document = self.edit_document(tags="hello")
self.search_backend.refresh_index()
# Search for it by tag
results = self.search_backend.search("hello", models.Document)
# Check
self.assertEqual(len(results), 1)
self.assertEqual(results[0].id, document.id)