@@ -52,57 +52,57 @@ def test_noaccess_fixture(noaccess):
52
52
pass
53
53
54
54
55
- @pytest .mark .skipif (get_django_version () < (1 , 6 ),
56
- reason = "shared_db_wrapper needs at least Django 1.6" )
57
- class TestSharedDbWrapper (object ):
58
- """Tests for sharing data created with share_db_wrapper, order matters."""
59
- @pytest .fixture (scope = 'class' )
60
- def shared_item (self , request , shared_db_wrapper ):
61
- with shared_db_wrapper (request ):
62
- return Item .objects .create (name = 'shared item' )
63
-
64
- def test_preparing_data (self , shared_item ):
65
- type(self )._shared_item_pk = shared_item .pk
66
-
67
- def test_accessing_the_same_data (self , db , shared_item ):
68
- retrieved_item = Item .objects .get (name = 'shared item' )
69
- assert type (self )._shared_item_pk == retrieved_item .pk
70
-
71
-
72
- @pytest .mark .skipif (get_django_version () < (1 , 6 ),
73
- reason = "shared_db_wrapper needs at least Django 1.6" )
74
- def test_shared_db_wrapper_not_leaking (db ):
75
- assert not Item .objects .filter (name = 'shared item' ).exists ()
76
-
77
-
78
- def test_nesting_shared_db_wrapper (db , shared_db_wrapper ):
79
- finalizers = []
80
- request = type ('FakeRequest' , (object , ), {
81
- 'funcargnames' : (),
82
- 'addfinalizer' : lambda self , f : finalizers .append (f )
83
- })()
84
-
85
- with shared_db_wrapper (request ):
86
- item1 = Item .objects .create ()
87
-
88
- with shared_db_wrapper (request ):
89
- item2 = Item .objects .create ()
90
-
91
- # Each call to shared_db_wrapper should have added 1 finalizer
92
- item1_fin , item2_fin = finalizers
93
-
94
- # Make sure the data lives outside `with shared_db_wrapper`
95
- assert Item .objects .filter (pk = item1 .pk ).exists ()
96
- assert Item .objects .filter (pk = item2 .pk ).exists ()
97
-
98
- # Check that finalizers remove the right data
99
- item2_fin ()
100
- assert Item .objects .filter (pk = item1 .pk ).exists ()
101
- assert not Item .objects .filter (pk = item2 .pk ).exists ()
55
+ @pytest .mark .skipif (
56
+ get_django_version () < (1 , 6 ),
57
+ reason = "shared_db_wrapper needs at least Django 1.6" )
58
+ def test_shared_db_wrapper (django_testdir ):
59
+ django_testdir .create_test_module ('''
60
+ from .app.models import Item
61
+ import pytest
102
62
103
- item1_fin ()
104
- assert not Item .objects .filter (pk = item1 .pk ).exists ()
105
- assert not Item .objects .filter (pk = item2 .pk ).exists ()
63
+ @pytest.fixture(scope='session')
64
+ def session_item(request, shared_db_wrapper):
65
+ with shared_db_wrapper(request):
66
+ return Item.objects.create(name='session')
67
+
68
+ @pytest.fixture(scope='module')
69
+ def module_item(request, shared_db_wrapper):
70
+ with shared_db_wrapper(request):
71
+ return Item.objects.create(name='module')
72
+
73
+ @pytest.fixture(scope='class')
74
+ def class_item(request, shared_db_wrapper):
75
+ with shared_db_wrapper(request):
76
+ return Item.objects.create(name='class')
77
+
78
+ class TestItems:
79
+ def test_save_the_items(
80
+ self, db, session_item, module_item, class_item):
81
+ global _session_item
82
+ global _module_item
83
+ global _class_item
84
+ assert session_item.pk
85
+ assert module_item.pk
86
+ assert class_item.pk
87
+ _session_item = session_item
88
+ _module_item = module_item
89
+ _class_item = class_item
90
+
91
+ def test_accessing_the_same_items(
92
+ self, db, session_item, module_item, class_item):
93
+ assert _session_item == session_item
94
+ assert _module_item == module_item
95
+ assert _class_item == class_item
96
+
97
+ class TestSharing:
98
+ def test_sharing_some_items(
99
+ self, db, session_item, module_item, class_item):
100
+ assert _session_item == session_item
101
+ assert _module_item == module_item
102
+ assert _class_item != class_item
103
+ ''' )
104
+ result = django_testdir .runpytest_subprocess ('-v' , '-s' , '--reuse-db' )
105
+ assert result .ret == 0
106
106
107
107
108
108
class TestDatabaseFixtures :
0 commit comments