seitime-frappe/frappe/tests/test_cors.py
2022-09-05 15:51:41 +05:30

67 lines
1.8 KiB
Python

# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
# License: MIT. See LICENSE
from werkzeug.wrappers import Response
import frappe
from frappe.app import process_response
from frappe.tests.utils import FrappeTestCase
HEADERS = (
"Access-Control-Allow-Origin",
"Access-Control-Allow-Credentials",
"Access-Control-Allow-Methods",
"Access-Control-Allow-Headers",
"Vary",
)
class TestCORS(FrappeTestCase):
def make_request_and_test(self, origin="http://example.com", absent=False):
self.origin = origin
headers = {}
if origin:
headers = {
"Origin": origin,
"Access-Control-Request-Method": "POST",
"Access-Control-Request-Headers": "X-Test-Header",
}
frappe.utils.set_request(method="OPTIONS", headers=headers)
self.response = Response()
process_response(self.response)
for header in HEADERS:
if absent:
self.assertNotIn(header, self.response.headers)
else:
if header == "Access-Control-Allow-Origin":
self.assertEqual(self.response.headers.get(header), self.origin)
else:
self.assertIn(header, self.response.headers)
def test_cors_disabled(self):
frappe.conf.allow_cors = None
self.make_request_and_test("http://example.com", True)
def test_request_without_origin(self):
frappe.conf.allow_cors = "http://example.com"
self.make_request_and_test(None, True)
def test_valid_origin(self):
frappe.conf.allow_cors = "http://example.com"
self.make_request_and_test()
frappe.conf.allow_cors = "*"
self.make_request_and_test()
frappe.conf.allow_cors = ["http://example.com", "https://example.com"]
self.make_request_and_test()
def test_invalid_origin(self):
frappe.conf.allow_cors = "http://example1.com"
self.make_request_and_test(absent=True)
frappe.conf.allow_cors = ["http://example1.com", "https://example.com"]
self.make_request_and_test(absent=True)