summaryrefslogtreecommitdiff
path: root/tests/async/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/async/tests.py')
-rw-r--r--tests/async/tests.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/async/tests.py b/tests/async/tests.py
new file mode 100644
index 0000000000..1e1cabc1c6
--- /dev/null
+++ b/tests/async/tests.py
@@ -0,0 +1,36 @@
+from asgiref.sync import async_to_sync
+
+from django.core.exceptions import SynchronousOnlyOperation
+from django.test import SimpleTestCase
+from django.utils.asyncio import async_unsafe
+
+from .models import SimpleModel
+
+
+class DatabaseConnectionTest(SimpleTestCase):
+ """A database connection cannot be used in an async context."""
+ @async_to_sync
+ async def test_get_async_connection(self):
+ with self.assertRaises(SynchronousOnlyOperation):
+ list(SimpleModel.objects.all())
+
+
+class AsyncUnsafeTest(SimpleTestCase):
+ """
+ async_unsafe decorator should work correctly and returns the correct
+ message.
+ """
+ @async_unsafe
+ def dangerous_method(self):
+ return True
+
+ @async_to_sync
+ async def test_async_unsafe(self):
+ # async_unsafe decorator catches bad access and returns the right
+ # message.
+ msg = (
+ 'You cannot call this from an async context - use a thread or '
+ 'sync_to_async.'
+ )
+ with self.assertRaisesMessage(SynchronousOnlyOperation, msg):
+ self.dangerous_method()