110 lines
3.5 KiB
Python
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)
|