Я добавляю поисковую систему в проект Django и, таким образом, настраиваю SearchVectorFields на нескольких моделях с пользовательскими триггерами.
Я хотел бы провести модульное тестирование того, что мои столбцы типа TSVECTOR
обновляется при изменении экземпляра модели.
Однако мне не удалось найти никакой информации о том, как проверить содержимое SearchVectorField ... Я не могу сравнить my_document.search
с SearchVector(Value("document content"))
или похожий, потому что первый кажется строковым, а последний - объектом.
TL; DR
Точнее, с моделью:
from django.db import models
class Document(models.Model):
...
content = TextField()
search = SearchVectorField()
и триггер:
-- create trigger function
CREATE OR REPLACE FUNCTION search_trigger() RETURNS trigger AS $$
begin
NEW.search := to_tsvector(COALESCE(NEW.content, ''))
return NEW;
end
$$ LANGUAGE plpgsql;
-- add trigger on insert
DROP TRIGGER IF EXISTS search_trigger ON myapp_document;
CREATE TRIGGER search_trigger
BEFORE INSERT
ON myapp_document
FOR EACH ROW
EXECUTE PROCEDURE search_trigger();
-- add trigger on update
DROP TRIGGER IF EXISTS search_trigger_update ON myapp_document;
CREATE TRIGGER search_trigger_update
BEFORE UPDATE OF content
ON myapp_document
FOR EACH ROW
WHEN (OLD.content IS DISTINCT FROM NEW.content)
EXECUTE PROCEDURE search_trigger();
Как проверить, что при создании нового экземпляра Document
его поле search
заполняется правильными значениями ?Тот же вопрос для обновления существующего экземпляра Document
, но ответ должен быть довольно похожим.
Спасибо за любую подсказку;)