import re
+from typing import Any
from unittest.mock import patch
from click.testing import CliRunner
try:
import blackd
- from aiohttp.test_utils import AioHTTPTestCase, unittest_run_loop
+ from aiohttp.test_utils import AioHTTPTestCase
from aiohttp import web
+except ImportError as e:
+ raise RuntimeError("Please install Black with the 'd' extra") from e
+
+try:
+ from aiohttp.test_utils import unittest_run_loop
except ImportError:
- has_blackd_deps = False
-else:
- has_blackd_deps = True
+ # unittest_run_loop is unnecessary and a no-op since aiohttp 3.8, and aiohttp 4
+ # removed it. To maintain compatibility we can make our own no-op decorator.
+ def unittest_run_loop(func: Any, *args: Any, **kwargs: Any) -> Any:
+ return func
@pytest.mark.blackd
await check("ruby3.5")
await check("pyi3.6")
await check("py1.5")
+ await check("2")
+ await check("2.7")
+ await check("py2.7")
await check("2.8")
await check("py2.8")
await check("3.0")
await check("py36,py37", 200)
await check("36", 200)
await check("3.6.4", 200)
-
- await check("2", 204)
- await check("2.7", 204)
- await check("py2.7", 204)
await check("3.4", 204)
await check("py3.4", 204)
await check("py34,py36", 204)
async def test_blackd_response_black_version_header(self) -> None:
response = await self.client.post("/")
self.assertIsNotNone(response.headers.get(blackd.BLACK_VERSION_HEADER))
+
+ @unittest_run_loop
+ async def test_cors_preflight(self) -> None:
+ response = await self.client.options(
+ "/",
+ headers={
+ "Access-Control-Request-Method": "POST",
+ "Origin": "*",
+ "Access-Control-Request-Headers": "Content-Type",
+ },
+ )
+ self.assertEqual(response.status, 200)
+ self.assertIsNotNone(response.headers.get("Access-Control-Allow-Origin"))
+ self.assertIsNotNone(response.headers.get("Access-Control-Allow-Headers"))
+ self.assertIsNotNone(response.headers.get("Access-Control-Allow-Methods"))
+
+ @unittest_run_loop
+ async def test_cors_headers_present(self) -> None:
+ response = await self.client.post("/", headers={"Origin": "*"})
+ self.assertIsNotNone(response.headers.get("Access-Control-Allow-Origin"))
+ self.assertIsNotNone(response.headers.get("Access-Control-Expose-Headers"))