Browse Source

[Tests - EmComponent] Tests on the init process

Roland Haroutiounian 9 years ago
parent
commit
ee9a082f42
1 changed files with 127 additions and 114 deletions
  1. 127
    114
      EditorialModel/test/test_component.py

+ 127
- 114
EditorialModel/test/test_component.py View File

@@ -25,83 +25,91 @@ from Database import sqlutils
25 25
 from Database import sqlsetup
26 26
 import sqlalchemy as sqla
27 27
 
28
+from EditorialModel.model import Model
29
+from EditorialModel.backend.json_backend import EmBackendJson
28 30
 
29 31
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Lodel.settings")
30 32
 
31 33
 TEST_COMPONENT_DBNAME = 'test_em_component_db.sqlite'
32 34
 
33
-#=#############=# 
35
+EM_TEST = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'me.json')
36
+EM_TEST_OBJECT = None
37
+
38
+#=#############=#
34 39
 #  TESTS SETUP  #
35 40
 #=#############=#
36 41
 
37 42
 def setUpModule():
38 43
     """ This function is run once for this module.
39
-        
44
+
40 45
         The goal are to overwrtie Db configs, and prepare objects for test_case initialisation
41 46
     """
42
-    cleanDb(TEST_COMPONENT_DBNAME)
47
+    global EM_TEST_OBJECT
48
+    EM_TEST_OBJECT = Model(EmBackendJson(EM_TEST))
49
+
50
+    # cleanDb(TEST_COMPONENT_DBNAME)
43 51
 
44
-    setDbConf(TEST_COMPONENT_DBNAME)
52
+    # setDbConf(TEST_COMPONENT_DBNAME)
45 53
     #Disable logging but CRITICAL
46 54
     logging.basicConfig(level=logging.CRITICAL)
47 55
 
48 56
     #testDB setup
49
-    tables = sqlsetup.get_schema()
50
-    ttest = {   'name':'ttest',
51
-                'columns':  [
52
-                    {"name":"uid",          "type":"INTEGER", "extra":{"foreignkey":"uids.uid", "nullable":False, "primarykey":True}},
53
-                    {"name":"name",         "type":"VARCHAR(50)", "extra":{"nullable":False, "unique":True}},
54
-                    {"name":"string",       "type":"TEXT"},
55
-                    {"name":"help",         "type":"TEXT"},
56
-                    {"name":"rank",         "type":"INTEGER"},
57
-                    {"name":"rank_fam",    "type":"VARCHAR(1)"},
58
-                    {"name":"date_update",  "type":"DATETIME"},
59
-                    {"name":"date_create",  "type":"DATETIME"}
60
-                ]
61
-            }
62
-    tables.append(ttest)
63
-
64
-    globals()['tables'] = tables
57
+    # tables = sqlsetup.get_schema()
58
+    # ttest = {   'name':'ttest',
59
+    #             'columns':  [
60
+    #                 {"name":"uid",          "type":"INTEGER", "extra":{"foreignkey":"uids.uid", "nullable":False, "primarykey":True}},
61
+    #                 {"name":"name",         "type":"VARCHAR(50)", "extra":{"nullable":False, "unique":True}},
62
+    #                 {"name":"string",       "type":"TEXT"},
63
+    #                 {"name":"help",         "type":"TEXT"},
64
+    #                 {"name":"rank",         "type":"INTEGER"},
65
+    #                 {"name":"rank_fam",    "type":"VARCHAR(1)"},
66
+    #                 {"name":"date_update",  "type":"DATETIME"},
67
+    #                 {"name":"date_create",  "type":"DATETIME"}
68
+    #             ]
69
+    #         }
70
+    # tables.append(ttest)
71
+    #
72
+    # globals()['tables'] = tables
65 73
 
66 74
     #Creating db structure
67 75
 
68
-    initTestDb(TEST_COMPONENT_DBNAME)
69
-    setDbConf(TEST_COMPONENT_DBNAME)
76
+    # initTestDb(TEST_COMPONENT_DBNAME)
77
+    # setDbConf(TEST_COMPONENT_DBNAME)
70 78
 
71
-    sqlsetup.init_db('default', False, tables)   
79
+    # sqlsetup.init_db('default', False, tables)
72 80
 
73
-    dbe = sqlutils.get_engine('default')
81
+    # dbe = sqlutils.get_engine('default')
74 82
 
75 83
     # Insertion of testings datas
76
-    conn = dbe.connect()
77
-    test_table = sqla.Table(EmTestComp.table, sqlutils.meta(dbe))
78
-    uids_table = sqla.Table('uids', sqlutils.meta(dbe))
84
+    # conn = dbe.connect()
85
+    # test_table = sqla.Table(EmTestComp.table, sqlutils.meta(dbe))
86
+    # uids_table = sqla.Table('uids', sqlutils.meta(dbe))
79 87
 
80 88
     #Creating uid for the EmTestComp
81
-    for v in ComponentTestCase.test_values:
82
-        uid = v['uid']
83
-        req = uids_table.insert(values={'uid':uid, 'table': EmTestComp.table })
84
-        conn.execute(req)
89
+    # for v in ComponentTestCase.test_values:
90
+    #     uid = v['uid']
91
+    #     req = uids_table.insert(values={'uid':uid, 'table': EmTestComp.table })
92
+    #     conn.execute(req)
85 93
 
86 94
     # WARNING !!! Rank has to be ordened and incremented by one for the modify_rank tests
87 95
 
88
-    for i in range(len(ComponentTestCase.test_values)):
89
-        ComponentTestCase.test_values[i]['date_create'] = datetime.datetime.utcnow()
90
-        ComponentTestCase.test_values[i]['date_update'] = datetime.datetime.utcnow()
91
-        ComponentTestCase.test_values[i]['rank_fam'] = '1'
92
-        
93
-
94
-    req = test_table.insert(values=ComponentTestCase.test_values)
95
-    conn.execute(req)
96
-    conn.close()
97
-
98
-    saveDbState(TEST_COMPONENT_DBNAME)
99
-
100
-    logging.getLogger().setLevel(logging.CRITICAL)
96
+    # for i in range(len(ComponentTestCase.test_values)):
97
+    #     ComponentTestCase.test_values[i]['date_create'] = datetime.datetime.utcnow()
98
+    #     ComponentTestCase.test_values[i]['date_update'] = datetime.datetime.utcnow()
99
+    #     ComponentTestCase.test_values[i]['rank_fam'] = '1'
100
+    #
101
+    #
102
+    # req = test_table.insert(values=ComponentTestCase.test_values)
103
+    # conn.execute(req)
104
+    # conn.close()
105
+    #
106
+    # saveDbState(TEST_COMPONENT_DBNAME)
107
+
108
+    # logging.getLogger().setLevel(logging.CRITICAL)
101 109
     pass
102 110
 
103 111
 def tearDownModule():
104
-    cleanDb(TEST_COMPONENT_DBNAME)
112
+    # cleanDb(TEST_COMPONENT_DBNAME)
105 113
     """
106 114
     try:
107 115
         os.unlink(TEST_COMPONENT_DBNAME)
@@ -110,38 +118,46 @@ def tearDownModule():
110 118
         os.unlink(TEST_COMPONENT_DBNAME+'_bck')
111 119
     except:pass
112 120
     """
121
+    pass
122
+
113 123
 
114 124
 #A dummy EmComponent child class use to make tests
115
-class EmTestComp(EmComponent):
116
-    table = 'ttest'
117
-    ranked_in = 'rank_fam'
118
-    _fields = [('rank_fam', ftypes.EmField_char)]
125
+#class EmTestComp(EmComponent):
126
+#    table = 'ttest'
127
+#    ranked_in = 'rank_fam'
128
+#    _fields = [('rank_fam', ftypes.EmField_char)]
119 129
 
120 130
 # The parent class of all other test cases for component
121 131
 # It defines a SetUp function and some utility functions for EmComponent tests
122 132
 class ComponentTestCase(TestCase):
123 133
 
124
-    test_values = [
125
-        { 'uid': 1, 'name': 'test', 'string': '{"fr":"testcomp"}', 'help': '{"en":"help test", "fr":"test help"}', 'rank': 0},
126
-        { 'uid': 2, 'name': 'test-em_comp', 'string': '{"fr":"Super test comp"}', 'help': '{}', 'rank': 1},
127
-        { 'uid': 3, 'name': 'test2', 'string': '{}', 'help': '{}', 'rank': 2},
128
-        { 'uid': 42, 'name': 'foo', 'string': '{"foo":"bar"}', 'help': '{"foo":"foobar"}', 'rank': 3},
129
-        { 'uid': 84, 'name': '123', 'string': '{"num":"456"}', 'help': '{"num":"4242"}', 'rank': 4},
130
-        { 'uid': 1025, 'name': 'name', 'string': '{}', 'help': '{}', 'rank': 5},
131
-    ]
132
-
133
-    @property
134
-    def tables(self):
135
-        return globals()['tables']
136
-    
134
+    test_values = []
135
+
136
+    # test_values = [
137
+    #     {'uid': 1, 'name': 'test', 'string': '{"fr":"testcomp"}', 'help': '{"en":"help test", "fr":"test help"}', 'rank': 0},
138
+    #     {'uid': 2, 'name': 'test-em_comp', 'string': '{"fr":"Super test comp"}', 'help': '{}', 'rank': 1},
139
+    #     {'uid': 3, 'name': 'test2', 'string': '{}', 'help': '{}', 'rank': 2},
140
+    #     {'uid': 42, 'name': 'foo', 'string': '{"foo":"bar"}', 'help': '{"foo":"foobar"}', 'rank': 3},
141
+    #     {'uid': 84, 'name': '123', 'string': '{"num":"456"}', 'help': '{"num":"4242"}', 'rank': 4},
142
+    #     {'uid': 1025, 'name': 'name', 'string': '{}', 'help': '{}', 'rank': 5},
143
+    # ]
144
+
145
+    # @property
146
+    # def tables(self):
147
+    #     return globals()['tables']
148
+
137 149
     def setUp(self):
138
-        self.dber = sqlutils.get_engine('default')
139
-        self.test_values = self.__class__.test_values
150
+        self.test_values.append(EM_TEST_OBJECT.create_component(EmClass.__name__,{'name': 'testclass1', 'classtype': 'entity'}))
151
+        self.test_values.append(EM_TEST_OBJECT.create_component(EmClass.__name__,{'name': 'testclass2', 'classtype': 'entry'}))
152
+        self.test_values.append(EM_TEST_OBJECT.create_component(EmClass.__name__,{'name': 'testclass3', 'classtype': 'person'}))
153
+
154
+        # self.dber = sqlutils.get_engine('default')
155
+        # self.test_values = self.__class__.test_values
140 156
         #Db RAZ
141 157
         #shutil.copyfile(TEST_COMPONENT_DBNAME+'_bck', globals()['component_test_dbfilename'])
142
-        restoreDbState(TEST_COMPONENT_DBNAME)
143
-        pass
144
-    
158
+        # restoreDbState(TEST_COMPONENT_DBNAME)
159
+
160
+    '''
145 161
     def check_equals(self, excepted_val, test_comp, check_date=True, msg=''):
146 162
         """ This function check that a EmTestComp has excepted_val for values """
147 163
         val = excepted_val
@@ -160,6 +176,7 @@ class ComponentTestCase(TestCase):
160 176
                 prop = vname
161 177
                 self.assertEqual(getattr(test_comp, prop), val[vname], msg+"Inconsistency for "+prop+" property")
162 178
         pass
179
+    '''
163 180
 
164 181
     def assertEqualDatetime(self, d1,d2, msg=""):
165 182
         """ Compare a date from the database with a datetime (that have microsecs, in db we dont have microsecs) """
@@ -177,14 +194,15 @@ class ComponentTestCase(TestCase):
177 194
         self.assertEqual(set(name for name in ms1t), set(name for name in ms2t), msg+" The two MlString hasn't the same lang list")
178 195
         for n in ms1t:
179 196
             self.assertEqual(ms1t[n], ms2t[n])
180
-
197
+    '''
181 198
     def run(self, result=None):
182 199
         super(ComponentTestCase, self).run(result)
183
-
200
+    '''
184 201
 #=#############=#
185 202
 #  TESTS BEGIN  #
186 203
 #=#############=#
187
-       
204
+
205
+
188 206
 #===========================#
189 207
 #   EmComponent.__init__    #
190 208
 #===========================#
@@ -193,73 +211,67 @@ class TestInit(ComponentTestCase):
193 211
     def test_component_abstract_init(self):
194 212
         """ Test not valid call (from EmComponent) of __init__ """
195 213
         with self.assertRaises(NotImplementedError):
196
-            test_comp = EmComponent(2)
214
+            test_comp = EmComponent(EmComponent, 2, 'testcomp')
197 215
         with self.assertRaises(NotImplementedError):
198
-            test_comp = EmComponent('name')
199
-        pass
200
-
216
+            test_comp = EmComponent(EmComponent, 2, 'name')
201 217
 
202 218
     def test_component_init_not_exist(self):
203 219
         """ Test __init__ with non existing objects """
204
-        with self.assertRaises(EmComponentNotExistError):
205
-            test_comp = EmTestComp('not_exist')
220
+        self.assertFalse(EM_TEST_OBJECT.component(4096))
221
+
222
+        # with self.assertRaises(EmComponentNotExistError):
223
+        #     test_comp = EM_TEST_OBJECT.component(4096)
206 224
 
207 225
         # TODO this assertion depends of the EmComponent behavior when instanciate with an ID
208 226
         #with self.assertRaises(EmComponentNotExistError):
209 227
         #    test_comp = EmTestComp(4096)
210 228
 
211
-        pass
212
-
213 229
     def test_component_init_uid(self):
214 230
         """ Test __init__ with numerical ID """
215
-        for val in self.test_values:
216
-            test_comp = EmTestComp(val['uid'])
217
-            self.assertIsInstance(test_comp, EmTestComp)
218
-            self.assertEqual(test_comp.uid, val['uid'])
219
-        pass
220 231
 
221
-    def test_component_init_name(self):
222
-        """ Test __init__ with names """
223 232
         for val in self.test_values:
224
-            test_comp = EmTestComp(val['name'])
225
-            self.check_equals(val, test_comp)
226
-        pass
233
+            test_comp = EM_TEST_OBJECT.component(val.uid)
234
+            self.assertIsInstance(test_comp, EmClass)
235
+            self.assertEqual(test_comp.uid, val.uid)
227 236
 
228 237
     def test_component_init_badargs(self):
229 238
         for badarg in [ print, json, [], [1,2,3,4,5,6], {'hello': 'world'} ]:
230
-            with self.assertRaises(TypeError):
231
-                EmTestComp(badarg)
232
-        pass
239
+            if isinstance(badarg, list) or isinstance(badarg, dict):
240
+                with self.assertRaises(TypeError):
241
+                    EM_TEST_OBJECT.component(badarg)
242
+            else:
243
+                self.assertFalse(EM_TEST_OBJECT.component(badarg))
233 244
 
245
+'''
234 246
 #=======================#
235 247
 #   EmComponent.new_uid  #
236 248
 #=======================#
237 249
 class TestUid(ComponentTestCase):
238 250
 
239
-    
251
+
240 252
     def test_newuid(self):
241 253
         """ Test valid calls for new_uid method """
242 254
         for _ in range(10):
243 255
             nuid = EmTestComp.new_uid(self.dber)
244
-        
256
+
245 257
             conn = self.dber.connect()
246 258
             tuid = sqla.Table('uids', sqlutils.meta(self.dber))
247 259
             req = sqla.select([tuid]).where(tuid.c.uid == nuid)
248 260
             rep = conn.execute(req)
249 261
             res = rep.fetchall()
250
-        
262
+
251 263
             self.assertEqual(len(res), 1, "Error when selecting : mutliple rows returned for 1 UID")
252 264
             res = res[0]
253 265
             self.assertEqual(res.uid, nuid, "Selected UID didn't match created uid")
254 266
             self.assertEqual(res.table, EmTestComp.table, "Table not match with class table : expected '"+res.table+"' but got '"+EmTestComp.table+"'")
255 267
         pass
256
-    
268
+
257 269
     def test_newuid_abstract(self):
258 270
         """ Test not valit call for new_uid method """
259 271
         with self.assertRaises(NotImplementedError):
260 272
             EmComponent.new_uid(self.dber)
261 273
         pass
262
-        
274
+
263 275
 #=======================#
264 276
 #   EmComponent.save    #
265 277
 #=======================#
@@ -269,7 +281,7 @@ class TestSave(ComponentTestCase):
269 281
     def _savecheck(self, test_comp, newval):
270 282
         """ Utility function for test_component_save_namechange """
271 283
         test_comp2 = EmTestComp(newval['name'])
272
-        
284
+
273 285
         #Check if properties other than date are equals in the instance fetched from Db
274 286
         self.check_equals(newval, test_comp2, check_date=False)
275 287
 
@@ -304,7 +316,7 @@ class TestSave(ComponentTestCase):
304 316
         newval = val.copy()
305 317
 
306 318
         time.sleep(2) # We have to sleep 2 secs here, so the update_date will be at least 2 secs more than newval['date_update']
307
-        
319
+
308 320
         #name change
309 321
         newval['name'] = test_comp.name = 'newname'
310 322
         test_comp.save()
@@ -317,7 +329,7 @@ class TestSave(ComponentTestCase):
317 329
         test_comp.save()
318 330
         self._savecheck(test_comp, newval)
319 331
         self.assertTrue(True)
320
-    
332
+
321 333
         #string change
322 334
         newval['string'] = '{"fr": "string fr", "en":"string en", "es":"string es"}'
323 335
         test_comp.string = MlString.load(newval['string'])
@@ -352,7 +364,7 @@ class TestSave(ComponentTestCase):
352 364
         for prop in changes:
353 365
             test_comp = EmTestComp(val['name'])
354 366
             self.check_equals(val, test_comp, False)
355
-            
367
+
356 368
             with self.assertRaises(TypeError):
357 369
                 setattr(test_comp, prop, changes[prop])
358 370
             test_comp.save()
@@ -374,7 +386,7 @@ class TestSave(ComponentTestCase):
374 386
 # EmComponent.create #
375 387
 #====================#
376 388
 class TestCreate(ComponentTestCase):
377
-    
389
+
378 390
     def test_create(self):
379 391
         """Testing EmComponent.create()"""
380 392
         vals = {'name': 'created1', 'rank_fam': 'f', 'string': '{"fr":"testcomp"}', 'help': '{"en":"help test", "fr":"test help"}'}
@@ -382,7 +394,7 @@ class TestCreate(ComponentTestCase):
382 394
         self.check_equals(vals, tc, "The created EmTestComp hasn't the good properties values")
383 395
         tcdb = EmTestComp('created1')
384 396
         self.check_equals(vals, tc, "When fetched from Db the created EmTestComp hasn't the good properties values")
385
-    
397
+
386 398
         # This test assume that string and help has default values
387 399
         vals = { 'name': 'created2', 'rank_fam': 'f' }
388 400
         tc = EmTestComp.create(**vals)
@@ -408,7 +420,7 @@ class TestCreate(ComponentTestCase):
408 420
         with self.assertRaises(TypeError, msg="But invalid keyword argument given"):
409 421
             vals = {'invalid': 42, 'name': 'created1', 'rank_fam': 'f', 'string': '{"fr":"testcomp"}', 'help': '{"en":"help test", "fr":"test help"}'}
410 422
             tc = EmTestComp.create(**vals)
411
-            
423
+
412 424
         pass
413 425
 
414 426
     def test_create_existing_failure(self):
@@ -443,7 +455,7 @@ class TestCreate(ComponentTestCase):
443 455
 # EmComponent.delete #
444 456
 #====================#
445 457
 class TestDelete(ComponentTestCase):
446
-    
458
+
447 459
     def test_delete(self):
448 460
         """ Create and delete TestComponent """
449 461
         vals = [
@@ -501,10 +513,10 @@ class TestModifyRank(ComponentTestCase):
501 513
 
502 514
     def test_modify_rank_absolute(self):
503 515
         """ Testing modify_rank with absolute rank """
504
-        
516
+
505 517
         names = [ v['name'] for v in self.test_values ]
506 518
         nmax = len(names)-1
507
-        
519
+
508 520
         #moving first to 3
509 521
         #-----------------
510 522
         test_comp = EmTestComp(names[0])
@@ -534,7 +546,7 @@ class TestModifyRank(ComponentTestCase):
534 546
         test_comp = EmTestComp(names[nmax])
535 547
 
536 548
         test_comp.modify_rank(2, '=')
537
-        
549
+
538 550
         for i in [0,1]:
539 551
             test_comp = EmTestComp(names[i])
540 552
             self.assertEqual(test_comp.rank, i)
@@ -546,12 +558,12 @@ class TestModifyRank(ComponentTestCase):
546 558
         test_comp = EmTestComp(names[nmax])
547 559
         test_comp.modify_rank(nmax,'=')
548 560
         self.assertEqual(test_comp.rank, nmax)
549
-        
561
+
550 562
         #Checking that we are in original state again
551 563
         for i,name in enumerate(names):
552 564
             test_comp = EmTestComp(name)
553 565
             self.assertEqual(test_comp.rank, i, "Excepted rank was '"+str(i-1)+"' but found '"+str(test_comp.rank)+"'. Ranks dump : "+self.dump_ranks())
554
-        
566
+
555 567
         #Inverting the list
556 568
         #------------------
557 569
         for i,name in enumerate(names):
@@ -570,7 +582,7 @@ class TestModifyRank(ComponentTestCase):
570 582
         """ Testing modify_rank with relative rank modifier """
571 583
         names = [ v['name'] for v in self.test_values ]
572 584
         nmax = len(names)-1
573
-        
585
+
574 586
         test_comp = EmTestComp(names[0])
575 587
         #Running modify_rank(i,'+') and the modify_rank(i,'-') for i in range(1,nmax)
576 588
         for i in range(1,nmax):
@@ -619,7 +631,7 @@ class TestModifyRank(ComponentTestCase):
619 631
         """ Testing modify_rank with bad arguments """
620 632
         names = [ v['name'] for v in self.test_values ]
621 633
         tc = EmTestComp(names[3])
622
-        
634
+
623 635
         badargs = [
624 636
             #Bad types
625 637
             (('0','+'), TypeError),
@@ -627,17 +639,17 @@ class TestModifyRank(ComponentTestCase):
627 639
             ((print, '='), TypeError),
628 640
             ((3, print), TypeError),
629 641
             ((0.0, '='), TypeError),
630
-            
642
+
631 643
             #Bad new_rank
632 644
             ((-1, '='), ValueError),
633 645
             ((-1,), ValueError),
634
-            
646
+
635 647
             #Bad sign
636 648
             ((2, 'a'), ValueError),
637 649
             ((1, '=='), ValueError),
638 650
             ((1, '+-'), ValueError),
639 651
             ((1, 'Hello world !'), ValueError),
640
-            
652
+
641 653
             #Out of bounds
642 654
             ((42*10**9, '+'), ValueError),
643 655
             ((-42*10**9, '+'), ValueError),
@@ -655,3 +667,4 @@ class TestModifyRank(ComponentTestCase):
655 667
         pass
656 668
 
657 669
 
670
+'''

Loading…
Cancel
Save