-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathtest_module.py
More file actions
117 lines (89 loc) · 3.79 KB
/
Copy pathtest_module.py
File metadata and controls
117 lines (89 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import os
from ellar.core import (
AppFactory,
Config,
ExecutionContext,
GuardCanActivate,
TestClient,
)
from ellar.core.modules.ref import create_module_ref_factor
from ellar.di import EllarInjector
from ellar.openapi import OpenAPIDocumentBuilder, OpenAPIDocumentModule
class CustomDocsGuard(GuardCanActivate):
detail: str = "Not Allowed"
async def can_activate(self, context: ExecutionContext) -> bool:
return False
def test_openapi_module_template_path_exist():
injector = EllarInjector()
config = Config()
module_ref = create_module_ref_factor(
OpenAPIDocumentModule,
container=injector.container,
config=config,
)
path = module_ref.jinja_loader.searchpath[0]
assert os.path.exists(path)
list_of_html_contained_in_path = ["swagger.html", "redocs.html"]
for item in os.listdir(path):
if os.path.isfile(os.path.join(path, item)):
list_of_html_contained_in_path.remove(item)
assert len(list_of_html_contained_in_path) == 0
def test_openapi_module_with_openapi_url_doesnot_exist_new_openapi_url():
app = AppFactory.create_app()
document = OpenAPIDocumentBuilder().build_document(app)
module_instance = app.install_module(
OpenAPIDocumentModule, openapi_url="/openapi_url.json", document=document
)
assert module_instance._openapi_url == "/openapi_url.json"
def test_openapi_module_creates_openapi_url():
app = AppFactory.create_app()
document = OpenAPIDocumentBuilder().build_document(app)
module_instance = app.install_module(OpenAPIDocumentModule, document=document)
assert module_instance._openapi_url == "/openapi.json"
def test_openapi_module_creates_swagger_endpoint():
app = AppFactory.create_app()
document = OpenAPIDocumentBuilder().build_document(app)
module_instance = app.install_module(
OpenAPIDocumentModule, document=document, openapi_url="/openapi_url.json"
)
module_instance.setup_swagger_doc(
title="Swagger Doc Test", path="docs-swagger-test"
)
client = TestClient(app)
response = client.get("docs-swagger-test")
assert response.status_code == 200
assert "Swagger Doc Test" in response.text
assert "openapi_url.json" in response.text
assert '<div id="swagger-ui"></div>' in response.text
assert "const ui = SwaggerUIBundle({" in response.text
def test_openapi_module_creates_redocs_endpoint():
app = AppFactory.create_app()
document = OpenAPIDocumentBuilder().build_document(app)
module_instance = app.install_module(
OpenAPIDocumentModule, document=document, openapi_url="/openapi_url.json"
)
module_instance.setup_redocs(title="Redocs Doc Test", path="docs-redocs-test")
client = TestClient(app)
response = client.get("docs-redocs-test")
assert response.status_code == 200
assert "Redocs Doc Test" in response.text
assert "openapi_url.json" in response.text
assert '<redoc spec-url="/openapi_url.json"></redoc>' in response.text
def test_openapi_module_with_route_guards():
app = AppFactory.create_app()
document = OpenAPIDocumentBuilder().build_document(app)
module_instance = app.install_module(
OpenAPIDocumentModule, document=document, guards=[CustomDocsGuard]
)
module_instance.setup_redocs()
module_instance.setup_swagger_doc()
client = TestClient(app)
response = client.get("openapi.json")
assert response.status_code == 403
assert response.json() == {"detail": "Not Allowed", "status_code": 403}
response = client.get("docs")
assert response.status_code == 403
assert response.json() == {"detail": "Not Allowed", "status_code": 403}
response = client.get("redoc")
assert response.status_code == 403
assert response.json() == {"detail": "Not Allowed", "status_code": 403}