2
0
Эх сурвалжийг харах

Added more tests for http decorators.

th3nn3ss 1 жил өмнө
parent
commit
cd4c4c1905

+ 49 - 1
tests/decorators/test_http.py

@@ -1,6 +1,27 @@
+import datetime
+
 from django.http import HttpRequest, HttpResponse, HttpResponseNotAllowed
 from django.test import SimpleTestCase
-from django.views.decorators.http import require_safe
+from django.views.decorators.http import condition, require_http_methods, require_safe
+
+
+class RequireHttpMethodsTest(SimpleTestCase):
+    def test_require_http_methods_methods(self):
+        @require_http_methods(["GET", "PUT"])
+        def my_view(request):
+            return HttpResponse("OK")
+
+        request = HttpRequest()
+        request.method = "GET"
+        self.assertIsInstance(my_view(request), HttpResponse)
+        request.method = "PUT"
+        self.assertIsInstance(my_view(request), HttpResponse)
+        request.method = "HEAD"
+        self.assertIsInstance(my_view(request), HttpResponseNotAllowed)
+        request.method = "POST"
+        self.assertIsInstance(my_view(request), HttpResponseNotAllowed)
+        request.method = "DELETE"
+        self.assertIsInstance(my_view(request), HttpResponseNotAllowed)
 
 
 class RequireSafeDecoratorTest(SimpleTestCase):
@@ -20,3 +41,30 @@ class RequireSafeDecoratorTest(SimpleTestCase):
         self.assertIsInstance(my_safe_view(request), HttpResponseNotAllowed)
         request.method = "DELETE"
         self.assertIsInstance(my_safe_view(request), HttpResponseNotAllowed)
+
+
+class ConditionDecoratorTest(SimpleTestCase):
+    def etag_func(request, *args, **kwargs):
+        return '"b4246ffc4f62314ca13147c9d4f76974"'
+
+    def latest_entry(request, *args, **kwargs):
+        return datetime.datetime(2023, 1, 2, 23, 21, 47)
+
+    def test_condition_decorator(self):
+        @condition(
+            etag_func=self.etag_func,
+            last_modified_func=self.latest_entry,
+        )
+        def my_view(request):
+            return HttpResponse()
+
+        request = HttpRequest()
+        request.method = "GET"
+        response = my_view(request)
+
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.headers["ETag"], '"b4246ffc4f62314ca13147c9d4f76974"')
+        self.assertEqual(
+            response.headers["Last-Modified"],
+            "Mon, 02 Jan 2023 23:21:47 GMT",
+        )