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
Duplication
introduced
by
![]() |
|||
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 |