Issues (24)

tests/test_functional.py (1 issue)

1
# -*- coding: utf-8 -*-
2
import json
3
import os
4
import unittest
5
import time
6
7
from requests import HTTPError
8
from sqlalchemy import engine_from_config
9
from sqlalchemy.orm import sessionmaker
10
11
from webob.multidict import MultiDict
12
from zope.sqlalchemy import ZopeTransactionExtension
13
14
from oe_utils.data.data_transfer_objects import ResultDTO
15
from oe_utils.range_parser import Range
16
from oe_utils.search.searchengine import SearchEngine
17
from tests import testdata, assert_no_exception_raised, dummy_index, dummy_mapping, incorrect_testdata, DummyDossier
18
19
try:
20
    import configparser
21
except ImportError:
22
    import ConfigParser as configparser
23
24
25
def index_db(session, search_engine, system_token, object_type):
26
    for dd in session.query(DummyDossier):
27
        search_engine.add_to_index(system_token, object_type, dd.id, json.dumps(dd.dossierdata))
28
    time.sleep(2)
29
30
31
class SearchTests(unittest.TestCase):
32 View Code Duplication
    @classmethod
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
33
    def setUpClass(cls):
34
        config = configparser.ConfigParser()
35
        config.read(os.path.join(os.path.dirname(__file__), 'test.ini'))
36
        settings = config.items('app:oe_utils')
37
        cls.settings = dict((s[0], s[1]) for s in settings)
38
        cls.object_type = 'dossier'
39
        cls.user_acls = ["test_user", "test_role"]
40
        cls.engine = engine_from_config(cls.settings, prefix='sqlalchemy.')
41
        cls.session_maker = sessionmaker(
42
            bind=cls.engine,
43
            extension=ZopeTransactionExtension()
44
        )
45
46
    def setUp(self):
47
        self.search_engine = SearchEngine(self.settings['searchengine.baseurl'],
48
                                          self.settings['searchengine.index'])
49
        self.system_token = 'test_token'
50
        self.search_engine.remove_index('test_token')
51
        self.search_engine.create_index('test_token', data=dummy_index)
52
        self.search_engine.add_type_mapping('actor', dummy_mapping, 'test_token')
53
        self.session = self.session_maker()
54
55
    def tearDown(self):
56
        self.session.close()
57
        del self.search_engine
58
59
    def test_add_to_index(self):
60
        object_id = 'test1'
61
        assert_no_exception_raised(self.search_engine.add_to_index, self.system_token, self.object_type, object_id,
62
                                   json.dumps(testdata))
63
64
    def test_add_to_index_KO(self):
65
        object_id = 'test2'
66
        self.assertRaises(HTTPError, self.search_engine.add_to_index, self.system_token, self.object_type, object_id,
67
                          incorrect_testdata)
68
69
    def test_remove_from_index_KO(self):
70
        object_id = 'test2'
71
        self.assertRaises(HTTPError, self.search_engine.remove_from_index, self.system_token, self.object_type,
72
                          object_id)
73
74
    def test_remove_from_index(self):
75
        index_db(self.session, self.search_engine, self.system_token, self.object_type)
76
        object_id = '1'
77
        assert_no_exception_raised(self.search_engine.remove_from_index, self.system_token, self.object_type, object_id)
78
79
    def test_remove_from_index_no_system_token(self):
80
        index_db(self.session, self.search_engine, self.system_token, self.object_type)
81
        object_id = '1'
82
        assert_no_exception_raised(self.search_engine.remove_from_index, None, self.object_type, object_id)
83
84
    def test_remove_from_index_by_query(self):
85
        index_db(self.session, self.search_engine, self.system_token, self.object_type)
86
        object_id = '1'
87
        assert_no_exception_raised(self.search_engine.remove_from_index_by_query, self.system_token, 'id', object_id)
88
89
    def test_remove_index(self):
90
        assert_no_exception_raised(self.search_engine.remove_index, 'test_token')
91
92
    def test_remove_index_KO(self):
93
        searchengine = SearchEngine(self.settings['searchengine.baseurl'], 'testing')
94
        assert_no_exception_raised(searchengine.remove_index, 'test_token')
95
96
    def test_create_index(self):
97
        searchengine = SearchEngine(self.settings['searchengine.baseurl'], 'test')
98
        assert_no_exception_raised(searchengine.remove_index, 'test_token')
99
        assert_no_exception_raised(searchengine.create_index, 'test_token', data=dummy_index)
100
101
    def test_create_index_KO(self):
102
        self.assertRaises(HTTPError, self.search_engine.create_index, 'test_token', data=dummy_index)
103
104
    def test_add_type_mapping(self):
105
        assert_no_exception_raised(self.search_engine.add_type_mapping, self.object_type, dummy_mapping, 'test_token')
106
107
    def test_add_type_mapping_KO(self):
108
        object_type = 'test'
109
        self.assertRaises(HTTPError, self.search_engine.add_type_mapping, object_type, {}, 'test_token')
110
111
    def test_query(self):
112
        index_db(self.session, self.search_engine, self.system_token, self.object_type)
113
        query = MultiDict({
114
            'query': 'test'
115
        })
116
        result_dto = self.search_engine.query(self.system_token,
117
                                              query_params=query,
118
                                              user_acls=self.user_acls)
119
        self.assertTrue(isinstance(result_dto, ResultDTO))
120
        self.assertEqual(2, result_dto.total)
121
        self.assertIsNotNone(result_dto.data)
122
123
    def test_query_ranged(self):
124
        index_db(self.session, self.search_engine, self.system_token, self.object_type)
125
        object_type = 'dossier'
126
        query = MultiDict({
127
            'query': 'test'
128
        })
129
        result_range = Range(start=0, end=4)
130
        result_dto = self.search_engine.query(self.system_token, object_type=object_type,
131
                                              query_params=query,
132
                                              user_acls=self.user_acls,
133
                                              result_range=result_range)
134
        self.assertTrue(isinstance(result_dto, ResultDTO))
135
        self.assertEqual(2, result_dto.total)
136
        self.assertIsNotNone(result_dto.data)
137
138
    def test_query_min_score(self):
139
        index_db(self.session, self.search_engine, self.system_token, self.object_type)
140
        object_type = 'dossier'
141
        query = MultiDict({
142
            'query': 'test'
143
        })
144
        result_dto = self.search_engine.query(self.system_token, object_type=object_type,
145
                                              query_params=query,
146
                                              user_acls=self.user_acls,
147
                                              min_score=1)
148
        self.assertTrue(isinstance(result_dto, ResultDTO))
149
        self.assertEqual(2, result_dto.total)
150
        self.assertIsNotNone(result_dto.data)
151
152
    def test_query_no_hits(self):
153
        index_db(self.session, self.search_engine, self.system_token, self.object_type)
154
        object_type = 'testing'
155
        query = MultiDict({
156
            'query': 'test'
157
        })
158
        result_dto = self.search_engine.query(self.system_token, object_type=object_type,
159
                                              query_params=query,
160
                                              user_acls=self.user_acls)
161
        self.assertTrue(isinstance(result_dto, ResultDTO))
162
        self.assertEqual(0, result_dto.total)
163
        self.assertIsNotNone(result_dto.data)
164