Completed
Branch master (e3faea)
by Koen
01:21
created

DatamangersTests.setUp()   B

Complexity

Conditions 2

Size

Total Lines 43

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 43
rs 8.8571
cc 2
1
# -*- coding: utf-8 -*-
2
import os
3
import unittest
4
from pyramid.paster import get_appsettings
5
from skosprovider_sqlalchemy.utils import import_provider
6
from sqlalchemy import engine_from_config
7
from sqlalchemy.orm import sessionmaker
8
from sqlalchemy.orm.exc import NoResultFound
9
import transaction
10
from zope.sqlalchemy import ZopeTransactionExtension
11
from skosprovider_sqlalchemy.models import Base, ConceptScheme, LabelType, Language, MatchType, Concept, NoteType, Match
12
from atramhasis.data.models import Base as VisitLogBase
13
from atramhasis.data.datamanagers import ConceptSchemeManager, SkosManager, LanguagesManager, AuditManager
14
from fixtures.materials import materials
15
from fixtures.data import trees, geo
16
try:
17
    from unittest.mock import Mock, patch
18
except:
19
    from mock import Mock, patch
20
from datetime import date, datetime
21
from atramhasis.data.models import ConceptVisitLog
22
23
here = os.path.dirname(__file__)
24
settings = get_appsettings(os.path.join(here, '../', 'tests/conf_test.ini'))
25
26
27
class DatamangersTests(unittest.TestCase):
28
    @classmethod
29
    def setUpClass(cls):
30
        cls.engine = engine_from_config(settings, prefix='sqlalchemy.')
31
        cls.session_maker = sessionmaker(
32
            bind=cls.engine,
33
            extension=ZopeTransactionExtension()
34
        )
35
36
    def setUp(self):
37
        Base.metadata.drop_all(self.engine)
38
        Base.metadata.create_all(self.engine)
39
        Base.metadata.bind = self.engine
40
        VisitLogBase.metadata.drop_all(self.engine)
41
        VisitLogBase.metadata.create_all(self.engine)
42
        VisitLogBase.metadata.bind = self.engine
43
44
        with transaction.manager:
45
            local_session = self.session_maker()
46
            local_session.add(Language('nl', 'Dutch'))
47
            local_session.add(Language('en', 'English'))
48
49
            import_provider(trees, ConceptScheme(id=1, uri='urn:x-skosprovider:trees'), local_session)
50
            import_provider(materials, ConceptScheme(id=4, uri='urn:x-vioe:materials'), local_session)
51
            import_provider(geo, ConceptScheme(id=2), local_session)
52
            local_session.add(ConceptScheme(id=3))
53
            local_session.add(LabelType('hiddenLabel', 'A hidden label.'))
54
            local_session.add(LabelType('altLabel', 'An alternative label.'))
55
            local_session.add(LabelType('prefLabel', 'A preferred label.'))
56
57
            local_session.add(MatchType('broadMatch', ''))
58
            local_session.add(MatchType('closeMatch', ''))
59
            local_session.add(MatchType('exactMatch', ''))
60
            local_session.add(MatchType('narrowMatch', ''))
61
            local_session.add(MatchType('relatedMatch', ''))
62
63
            local_session.flush()
64
65
            match = Match()
66
            match.matchtype_id = 'narrowMatch'
67
            match.uri = 'urn:test'
68
            match.concept_id = 1
69
            local_session.add(match)
70
71
            local_session.add(ConceptVisitLog(concept_id=1, conceptscheme_id=1, origin='REST',
72
                                              visited_at=datetime(2015, 8, 27, 10, 58, 3)))
73
            local_session.add(ConceptVisitLog(concept_id=1, conceptscheme_id=1, origin='REST',
74
                                              visited_at=datetime(2015, 8, 27, 11, 58, 3)))
75
            local_session.add(ConceptVisitLog(concept_id=2, conceptscheme_id=1, origin='REST',
76
                                              visited_at=datetime(2015, 8, 27, 10, 58, 3)))
77
            local_session.add(ConceptVisitLog(concept_id=2, conceptscheme_id=2, origin='REST',
78
                                              visited_at=datetime(2015, 8, 27, 10, 58, 3)))
79
80
81
class ConceptSchemeManagerTest(DatamangersTests):
82
83
    def setUp(self):
84
        super(ConceptSchemeManagerTest, self).setUp()
85
        self.conceptscheme_manager = ConceptSchemeManager(self.session_maker())
86
87
    def test_get(self):
88
        res = self.conceptscheme_manager.get(1)
89
        self.assertEqual('urn:x-skosprovider:trees', res.uri)
90
91
    def test_find(self):
92
        query = {'type': 'concept', 'label': 'es'}
93
        res = self.conceptscheme_manager.find(1, query)
94
        self.assertEqual(1, len(res))
95
96
    def test_get_concepts_for_scheme_tree(self):
97
        res = self.conceptscheme_manager.get_concepts_for_scheme_tree(2)
98
        self.assertEqual(1, len(res))
99
100
    def test_get_collections_for_scheme_tree(self):
101
        res = self.conceptscheme_manager.get_collections_for_scheme_tree(2)
102
        self.assertEqual(1, len(res))
103
104
    def test_get_all(self):
105
        res = self.conceptscheme_manager.get_all(2)
106
        self.assertEqual(10, len(res))
107
108
    def test_save(self):
109
        local_session = self.session_maker()
110
        conceptscheme = local_session.query(ConceptScheme).filter(Concept.id == 1).first()
111
        conceptscheme = self.conceptscheme_manager.save(conceptscheme)
112
        self.assertIsNotNone(conceptscheme.id)
113
        local_session.close()
114
115
116
class SkosManagerTest(DatamangersTests):
117
118
    def setUp(self):
119
        super(SkosManagerTest, self).setUp()
120
        self.skos_manager = SkosManager(self.session_maker())
121
122
    def test_get_thing(self):
123
        res = self.skos_manager.get_thing(1, 1)
124
        self.assertEqual('urn:x-skosprovider:trees/1', res.uri)
125
126
    def test_save(self):
127
        thing = Concept()
128
        thing.concept_id = 123
129
        thing.conceptscheme_id = 1
130
        thing = self.skos_manager.save(thing)
131
        self.assertIsNotNone(thing.id)
132
133
    def test_delete_thing(self):
134
        thing = self.skos_manager.get_thing(1, 1)
135
        self.skos_manager.delete_thing(thing)
136
        self.assertRaises(NoResultFound, self.skos_manager.get_thing, 1, 1)
137
138
    def test_get_by_list_type(self):
139
        res = self.skos_manager.get_by_list_type(LabelType)
140
        self.assertEqual(3, len(res))
141
142
    def test_get_match_type(self):
143
        matchType= self.skos_manager.get_match_type('narrowMatch')
144
        self.assertEqual('narrowMatch', matchType.name)
145
146
    def test_get_match(self):
147
        match = self.skos_manager.get_match('urn:test', 'narrowMatch', 1)
148
        self.assertEqual('urn:test', match.uri)
149
150
    def test_get_all_label_types(self):
151
        res = self.skos_manager.get_all_label_types()
152
        self.assertEqual(3, len(res))
153
154
    def test_get_next_cid(self):
155
        res = self.skos_manager.get_next_cid(1)
156
        self.assertIsNotNone(res)
157
158
159
class LanguagesManagerTest(DatamangersTests):
160
161
    def setUp(self):
162
        super(LanguagesManagerTest, self).setUp()
163
        self.language_manager = LanguagesManager(self.session_maker())
164
165
    def test_get(self):
166
        res = self.language_manager.get('nl')
167
        self.assertEqual('Dutch', res.name)
168
169
    def test_save(self):
170
        language = Language('de', 'German')
171
        language = self.language_manager.save(language)
172
        self.assertEqual('German', language.name)
173
174
    def test_delete(self):
175
        language = self.language_manager.get('en')
176
        self.language_manager.delete(language)
177
        self.assertRaises(NoResultFound, self.language_manager.get, 'en')
178
179
    def test_get_all(self):
180
        res = self.language_manager.get_all()
181
        self.assertEqual(3, len(res))
182
183
    def test_get_all_sorted(self):
184
        res = self.language_manager.get_all_sorted('id', False)
185
        self.assertEqual('en', res[0].id)
186
187
    def test_get_all_sorted_desc(self):
188
        res = self.language_manager.get_all_sorted('id', True)
189
        self.assertEqual('nl', res[0].id)
190
191
    def test_count_languages(self):
192
        res = self.language_manager.count_languages('nl')
193
        self.assertEqual(1, res)
194
195
196
class AuditManagerTest(DatamangersTests):
197
198
    def setUp(self):
199
        super(AuditManagerTest, self).setUp()
200
        self.audit_manager = AuditManager(self.session_maker())
201
202
    @patch('atramhasis.data.datamanagers.date', Mock(today=Mock(return_value=date(2015, 8, 1))))
203
    def test_get_first_day(self):
204
        self.assertEqual('2015-07-31', self.audit_manager._get_first_day('last_day'))
205
        self.assertEqual('2015-07-25', self.audit_manager._get_first_day('last_week'))
206
        self.assertEqual('2015-07-01', self.audit_manager._get_first_day('last_month'))
207
        self.assertEqual('2014-08-01', self.audit_manager._get_first_day('last_year'))
208
209
    @patch('atramhasis.data.datamanagers.date', Mock(today=Mock(return_value=date(2015, 9, 15))))
210
    def test_get_most_popular_concepts_for_conceptscheme(self):
211
        self.assertListEqual([{'concept_id': 1, 'scheme_id': 1}, {'concept_id': 2, 'scheme_id': 1}],
212
                             self.audit_manager.get_most_popular_concepts_for_conceptscheme(1, 5, 'last_month'))
213
        self.assertListEqual([{'concept_id': 2, 'scheme_id': 2}],
214
                             self.audit_manager.get_most_popular_concepts_for_conceptscheme(2, 5, 'last_month'))
215
        self.assertListEqual([{'concept_id': 1, 'scheme_id': 1}],
216
                             self.audit_manager.get_most_popular_concepts_for_conceptscheme(1, 1, 'last_month'))
217
        self.assertListEqual([],
218
                             self.audit_manager.get_most_popular_concepts_for_conceptscheme(1, 5, 'last_day'))
219