Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Fitx TestCase due Django interals.
  • Loading branch information
hellysmile committed Jun 8, 2015
commit cbfce931292cff23ba77f6e665ee06ba6c5af8c8
31 changes: 18 additions & 13 deletions tests/test_atomic_requests.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from __future__ import unicode_literals

from django.conf.urls import patterns, url
from django.db import connection, connections, transaction
from django.test import TestCase
from django.test import TestCase, TransactionTestCase
from django.http import Http404
from django.utils.decorators import method_decorator
from django.utils.unittest import skipUnless
from rest_framework import status
from rest_framework.exceptions import APIException, PermissionDenied
from rest_framework.exceptions import APIException
from rest_framework.response import Response
from rest_framework.test import APIRequestFactory
from rest_framework.views import APIView
Expand Down Expand Up @@ -113,30 +115,33 @@ def test_api_exception_rollback_transaction(self):

@skipUnless(connection.features.uses_savepoints,
"'atomic' requires transactions and savepoints.")
class NonAtomicDBTransactionAPIExceptionTests(TestCase):
def setUp(self):
# only Django >= 1.6 provides @transaction.non_atomic_requests
class NonAtomicDBTransactionAPIExceptionTests(TransactionTestCase):
@property
def urls(self):
class NonAtomicAPIExceptionView(APIView):
@method_decorator(transaction.non_atomic_requests)
def dispatch(self, *args, **kwargs):
return super(NonAtomicAPIExceptionView, self).dispatch(*args, **kwargs)

def post(self, request, *args, **kwargs):
BasicModel.objects.create()
raise PermissionDenied
def get(self, request, *args, **kwargs):
BasicModel.objects.all()
raise Http404

return patterns(
'',
url(r'^$', NonAtomicAPIExceptionView.as_view())
)

self.view = NonAtomicAPIExceptionView.as_view()
def setUp(self):
connections.databases['default']['ATOMIC_REQUESTS'] = True

def tearDown(self):
connections.databases['default']['ATOMIC_REQUESTS'] = False

def test_api_exception_rollback_transaction_non_atomic_view(self):
request = factory.post('/')

response = self.view(request)
response = self.client.get('/')

# without checking connection.in_atomic_block view raises 500
# due attempt to rollback without transaction
self.assertEqual(response.status_code,
status.HTTP_403_FORBIDDEN)
status.HTTP_404_NOT_FOUND)