Issues (24)

tests/test_datamanagers.py (1 issue)

1
# -*- coding: utf-8 -*-
2
import os
3
import unittest
4
5
from sqlalchemy import engine_from_config
6
7
from sqlalchemy.orm import sessionmaker
8
from sqlalchemy.orm.exc import NoResultFound
9
import transaction
10
11
from zope.sqlalchemy import ZopeTransactionExtension
12
13
from oe_utils.data.data_managers import DataManager
14
from oe_utils.data.data_transfer_objects import ResultDTO
15
from oe_utils.range_parser import Range
16
from tests import init_test_db, DummyDossier, fill_db, DossierEmail, Dummy
17
18
try:
19
    from unittest.mock import Mock
20
except ImportError:
21
    from mock import Mock
22
try:
23
    import configparser
24
except ImportError:
25
    import ConfigParser as configparser
26
27
28
class DataManagerTest(unittest.TestCase):
29 View Code Duplication
    @classmethod
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
30
    def setUpClass(cls):
31
        config = configparser.ConfigParser()
32
        config.read(os.path.join(os.path.dirname(__file__), 'test.ini'))
33
        settings = config.items('app:oe_utils')
34
        settings = dict((s[0], s[1]) for s in settings)
35
        cls.engine = engine_from_config(settings, prefix='sqlalchemy.')
36
        cls.session_maker = sessionmaker(
37
            bind=cls.engine,
38
            extension=ZopeTransactionExtension()
39
        )
40
41
    def setUp(self):
42
        init_test_db(self.engine)
43
        self.session = self.session_maker()
44
        self.data_manager = DataManager(self.session, DummyDossier)
45
46
    def tearDown(self):
47
        self.session.close()
48
49
    def test_get_dossier(self):
50
        dossier = self.data_manager.get(1)
51
        self.assertIsNotNone(dossier)
52
        self.assertEqual(1, dossier.id)
53
54
    def test_get_dossier_for_update(self):
55
        dossier = self.data_manager.get_for_update(1)
56
        self.assertIsNotNone(dossier)
57
        self.assertEqual(1, dossier.id)
58
59
    def test_get_dummy(self):
60
        dummy = self.data_manager.get(1, Dummy)
61
        self.assertIsNotNone(dummy)
62
        self.assertEqual(1, dummy.id)
63
        self.assertIsInstance(dummy, Dummy)
64
65
    def test_get_one_unexisting_dossier(self):
66
        self.assertRaises(NoResultFound, self.data_manager.get_one, 1112)
67
68
    def test_get_one_for_update_unexisting_dossier(self):
69
        self.assertRaises(NoResultFound, self.data_manager.get_one_for_update, 1112)
70
71
    def test_get_one_for_update(self):
72
        dossier = self.data_manager.get_one_for_update(1)
73
        self.assertIsNotNone(dossier)
74
        self.assertEqual(1, dossier.id)
75
76
    def test_get_unexisting_dossier(self):
77
        res = self.data_manager.get(1112)
78
        self.assertIsNone(res)
79
80
    def test_delete_dossier(self):
81
        with transaction.manager as manager:
82
            self.data_manager.delete(1)
83
            manager.commit()
84
        self.assertRaises(NoResultFound, self.data_manager.get_one, 1)
85
86
    def test_delete_unexisting_dossier(self):
87
        self.assertRaises(NoResultFound, self.data_manager.delete, 11234)
88
89
    def test_save_dossier_new(self):
90
        dossier = DummyDossier(id=3)
91
        dossier_saved = self.data_manager.save(dossier)
92
        self.assertEqual(3, dossier_saved.id)
93
94
    def test_save_dossier_edit(self):
95
        dossier = DummyDossier(id=22)
96
        dossier.dossierdata = {"test": "blabla"}
97
        self.data_manager.save(dossier)
98
        self.session.flush()
99
        saved_dossier = self.data_manager.get(22)
100
        self.assertEqual({"test": "blabla"}, saved_dossier.dossierdata)
101
102
    def test_save_dossier_new_and_edit(self):
103
        dossier = DummyDossier(id=3)
104
        dossier_saved = self.data_manager.save(dossier)
105
        dossier.dossierdata = {"test": "blabla"}
106
        dossier_saved = self.data_manager.save(dossier)
107
        self.assertEqual(3, dossier_saved.id)
108
109
    def test_process_ranged_query(self):
110
        fill_db(self.session)
111
        query = self.session.query(DummyDossier)
112
        result_range = Range(start=0, end=4)
113
        result_dto = self.data_manager.process_ranged_query(query, result_range)
114
        self.assertTrue(isinstance(result_dto, ResultDTO))
115
        self.assertEqual(77, result_dto.total)
116
        self.assertEqual(5, len(result_dto.data))
117
118
    def test_process_empty_range_query(self):
119
        fill_db(self.session)
120
        query = self.session.query(DummyDossier)
121
        result_dto = self.data_manager.process_ranged_query(query, None)
122
        self.assertTrue(isinstance(result_dto, ResultDTO))
123
        self.assertEqual(77, result_dto.total)
124
        self.assertEqual(77, len(result_dto.data))
125
126
    def test_insert_append_object(self):
127
        dossier = DummyDossier(id=66)
128
        email = DossierEmail()
129
        email.email = '[email protected]'
130
        dossier.emails.append(email)
131
        self.data_manager.save(dossier)
132
133
    def test_ordered_result_list_test_asc(self):
134
        query = self.session.query(Dummy)
135
        sortlist = [('test', 'asc')]
136
        query = self.data_manager.ordered_result_list(query, Dummy, sortlist)
137
        res = query.all()
138
        self.assertEqual(4, len(res))
139
        self.assertEqual('alpha', res[0].test)
140
141
    def test_ordered_result_list_test_desc(self):
142
        query = self.session.query(Dummy)
143
        sortlist = [('test', 'desc')]
144
        query = self.data_manager.ordered_result_list(query, Dummy, sortlist)
145
        res = query.all()
146
        self.assertEqual(4, len(res))
147
        self.assertEqual('zero', res[0].test)
148
149
    def test_ordered_result_list_id_asc(self):
150
        query = self.session.query(Dummy)
151
        sortlist = [('id', 'asc')]
152
        query = self.data_manager.ordered_result_list(query, Dummy, sortlist)
153
        res = query.all()
154
        self.assertEqual(4, len(res))
155
        self.assertEqual(1, res[0].id)
156