Fixes 2 bugs in no_subclasses context mgr (__exit__ swallows exception + repair feature)
This commit is contained in:
		| @@ -140,8 +140,6 @@ class ContextManagersTest(unittest.TestCase): | ||||
|     def test_no_sub_classes(self): | ||||
|         class A(Document): | ||||
|             x = IntField() | ||||
|             y = IntField() | ||||
|  | ||||
|             meta = {'allow_inheritance': True} | ||||
|  | ||||
|         class B(A): | ||||
| @@ -152,29 +150,29 @@ class ContextManagersTest(unittest.TestCase): | ||||
|  | ||||
|         A.drop_collection() | ||||
|  | ||||
|         A(x=10, y=20).save() | ||||
|         A(x=15, y=30).save() | ||||
|         B(x=20, y=40).save() | ||||
|         B(x=30, y=50).save() | ||||
|         C(x=40, y=60).save() | ||||
|         A(x=10).save() | ||||
|         A(x=15).save() | ||||
|         B(x=20).save() | ||||
|         B(x=30).save() | ||||
|         C(x=40).save() | ||||
|  | ||||
|         self.assertEqual(A.objects.count(), 5) | ||||
|         self.assertEqual(B.objects.count(), 3) | ||||
|         self.assertEqual(C.objects.count(), 1) | ||||
|  | ||||
|         with no_sub_classes(A) as A: | ||||
|         with no_sub_classes(A): | ||||
|             self.assertEqual(A.objects.count(), 2) | ||||
|  | ||||
|             for obj in A.objects: | ||||
|                 self.assertEqual(obj.__class__, A) | ||||
|  | ||||
|         with no_sub_classes(B) as B: | ||||
|         with no_sub_classes(B): | ||||
|             self.assertEqual(B.objects.count(), 2) | ||||
|  | ||||
|             for obj in B.objects: | ||||
|                 self.assertEqual(obj.__class__, B) | ||||
|  | ||||
|         with no_sub_classes(C) as C: | ||||
|         with no_sub_classes(C): | ||||
|             self.assertEqual(C.objects.count(), 1) | ||||
|  | ||||
|             for obj in C.objects: | ||||
| @@ -185,6 +183,32 @@ class ContextManagersTest(unittest.TestCase): | ||||
|         self.assertEqual(B.objects.count(), 3) | ||||
|         self.assertEqual(C.objects.count(), 1) | ||||
|  | ||||
|     def test_no_sub_classes_modification_to_document_class_are_temporary(self): | ||||
|         class A(Document): | ||||
|             x = IntField() | ||||
|             meta = {'allow_inheritance': True} | ||||
|  | ||||
|         class B(A): | ||||
|             z = IntField() | ||||
|  | ||||
|         self.assertEqual(A._subclasses, ('A', 'A.B')) | ||||
|         with no_sub_classes(A): | ||||
|             self.assertEqual(A._subclasses, ('A',)) | ||||
|         self.assertEqual(A._subclasses, ('A', 'A.B')) | ||||
|  | ||||
|         self.assertEqual(B._subclasses, ('A.B',)) | ||||
|         with no_sub_classes(B): | ||||
|             self.assertEqual(B._subclasses, ('A.B',)) | ||||
|         self.assertEqual(B._subclasses, ('A.B',)) | ||||
|  | ||||
|     def test_no_subclass_context_manager_does_not_swallow_exception(self): | ||||
|         class User(Document): | ||||
|             name = StringField() | ||||
|  | ||||
|         with self.assertRaises(TypeError): | ||||
|             with no_sub_classes(User): | ||||
|                 raise TypeError() | ||||
|  | ||||
|     def test_query_counter(self): | ||||
|         connect('mongoenginetest') | ||||
|         db = get_db() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user