Tests for OPDS search
[wolnelektury.git] / apps / search / tests / index.py
index c2b9110..5155a84 100644 (file)
@@ -1,32 +1,68 @@
-from __future__ import with_statement
-
-from search import Index, Search
-from catalogue import models
+# -*- coding: utf-8 -*-
+from django.conf import settings
+from django.test.utils import override_settings
 from catalogue.test_utils import WLTestCase
 from lucene import PolishAnalyzer, Version
-#from nose.tools import raises
 from os import path
+import tempfile
+from catalogue import models
+from search import Search, SearchResult
 
 
+@override_settings(
+    SEARCH_INDEX = tempfile.mkdtemp(prefix='djangotest_search_'),
+)
 class BookSearchTests(WLTestCase):
     def setUp(self):
         WLTestCase.setUp(self)
 
         txt = path.join(path.dirname(__file__), 'files/fraszka-do-anusie.xml')
-        self.book = models.Book.from_xml_file(txt)
-
-        search = Index() #PolishAnalyzer(Version.LUCENE_34))
-        with search:
-            search.index_book(self.book)
-        print "index: %s" % search
-
-    def test_search(self):
-        search = Search()
-        bks,_= search.search("wolne")
-        self.assertEqual(len(bks), 1)
-        self.assertEqual(bks[0].id, 1)
-        
-        bks,_= search.search("technical_editors: sutkowska")
-        self.assertEqual(len(bks), 1)
-        self.assertEqual(bks[0].id, 1)
-        
+        with self.settings(NO_SEARCH_INDEX=False):
+            self.book = models.Book.from_xml_file(txt)
+        self.search = Search()
+
+    def test_search_perfect_book_author(self):
+        books = self.search.search_perfect_book("sęp szarzyński")
+        assert len(books) == 1
+        assert books[0].book_id == self.book.id
+
+    def test_search_perfect_book_title(self):
+        books = self.search.search_perfect_book("fraszka anusie")
+        assert len(books) == 1
+        assert books[0].book_id == self.book.id
+
+    def test_search_perfect_parts(self):
+        books = self.search.search_perfect_parts("Jakoż hamować")
+        assert len(books) == 2
+        for b in books:
+            b.book_id == self.book.id
+        a = SearchResult.aggregate(books)
+        # just one fragment hit.
+        assert len(a[0].hits) == 1
+
+    def test_search_perfect_author_title(self):
+        books = self.search.search_perfect_book("szarzyński anusie")
+        assert books == []
+
+        books = self.search.search_book("szarzyński anusie")
+        assert len(books) == 1
+
+        books = self.search.search_book("szarzyński fraszka")
+        assert len(books) == 1
+
+    def test_search_everywhere(self):
+        books = self.search.search_everywhere("szarzyński kochanek")
+        print 'szarzyński kochanek %s' % [b.hits for b in books]
+
+        books = self.search.search_everywhere("szarzyński narcyz")
+        print 'szarzyński narcyz %s' % [b.hits for b in books]
+
+        books = self.search.search_everywhere("anusie narcyz")
+        print 'anusie narcyz %s' % [b.hits for b in books]
+
+        # theme content cross
+        books = self.search.search_everywhere("wzrok  boginie")
+        print 'wzrok boginie %s' % [b.hits for b in books]
+
+        books = self.search.search_everywhere("anusie płynęły zdroje")
+        print 'anusie płynęły zdroje %s' % [b.hits for b in books]