From cd4c4c1905a838bda63d401bf93cfb77cb97ea95 Mon Sep 17 00:00:00 2001
From: th3nn3ss <chuksmcdennis@yahoo.com>
Date: Mon, 26 Jun 2023 09:12:57 +0200
Subject: [PATCH] Added more tests for http decorators.

---
 tests/decorators/test_http.py | 50 ++++++++++++++++++++++++++++++++++-
 1 file changed, 49 insertions(+), 1 deletion(-)

diff --git a/tests/decorators/test_http.py b/tests/decorators/test_http.py
index 344e66f417..28f13ab8ce 100644
--- a/tests/decorators/test_http.py
+++ b/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",
+        )