Add sub-app to generate open api spec
This commit is contained in:
		
							
								
								
									
										129
									
								
								tests/test_oas/test_view.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								tests/test_oas/test_view.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,129 @@ | ||||
| from pydantic.main import BaseModel | ||||
| from aiohttp_pydantic import PydanticView, oas | ||||
| from aiohttp import web | ||||
|  | ||||
| import pytest | ||||
|  | ||||
|  | ||||
| class Pet(BaseModel): | ||||
|     id: int | ||||
|     name: str | ||||
|  | ||||
|  | ||||
| class PetCollectionView(PydanticView): | ||||
|     async def get(self): | ||||
|         return web.json_response() | ||||
|  | ||||
|     async def post(self, pet: Pet): | ||||
|         return web.json_response() | ||||
|  | ||||
|  | ||||
| class PetItemView(PydanticView): | ||||
|     async def get(self, id: int, /): | ||||
|         return web.json_response() | ||||
|  | ||||
|     async def put(self, id: int, /, pet: Pet): | ||||
|         return web.json_response() | ||||
|  | ||||
|     async def delete(self, id: int, /): | ||||
|         return web.json_response() | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| async def generated_oas(aiohttp_client, loop) -> web.Application: | ||||
|     app = web.Application() | ||||
|     app.router.add_view("/pets", PetCollectionView) | ||||
|     app.router.add_view("/pets/{id}", PetItemView) | ||||
|     oas.setup(app) | ||||
|  | ||||
|     client = await aiohttp_client(app) | ||||
|     response = await client.get("/oas/spec") | ||||
|     assert response.status == 200 | ||||
|     assert response.content_type == "application/json" | ||||
|     return await response.json() | ||||
|  | ||||
|  | ||||
| async def test_generated_oas_should_have_pets_paths(generated_oas): | ||||
|     assert "/pets" in generated_oas["paths"] | ||||
|  | ||||
|  | ||||
| async def test_pets_route_should_have_get_method(generated_oas): | ||||
|     assert generated_oas["paths"]["/pets"]["get"] == {} | ||||
|  | ||||
|  | ||||
| async def test_pets_route_should_have_post_method(generated_oas): | ||||
|     assert generated_oas["paths"]["/pets"]["post"] == { | ||||
|         "requestBody": { | ||||
|             "content": { | ||||
|                 "application/json": { | ||||
|                     "schema": { | ||||
|                         "properties": { | ||||
|                             "id": {"title": "Id", "type": "integer"}, | ||||
|                             "name": {"title": "Name", "type": "string"}, | ||||
|                         }, | ||||
|                         "required": ["id", "name"], | ||||
|                         "title": "Pet", | ||||
|                         "type": "object", | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
| async def test_generated_oas_should_have_pets_id_paths(generated_oas): | ||||
|     assert "/pets/{id}" in generated_oas["paths"] | ||||
|  | ||||
|  | ||||
| async def test_pets_id_route_should_have_delete_method(generated_oas): | ||||
|     assert generated_oas["paths"]["/pets/{id}"]["delete"] == { | ||||
|         "parameters": [ | ||||
|             { | ||||
|                 "in": "path", | ||||
|                 "name": "id", | ||||
|                 "required": True, | ||||
|                 "schema": {"type": "integer"}, | ||||
|             } | ||||
|         ] | ||||
|     } | ||||
|  | ||||
|  | ||||
| async def test_pets_id_route_should_have_get_method(generated_oas): | ||||
|     assert generated_oas["paths"]["/pets/{id}"]["get"] == { | ||||
|         "parameters": [ | ||||
|             { | ||||
|                 "in": "path", | ||||
|                 "name": "id", | ||||
|                 "required": True, | ||||
|                 "schema": {"type": "integer"}, | ||||
|             } | ||||
|         ] | ||||
|     } | ||||
|  | ||||
|  | ||||
| async def test_pets_id_route_should_have_put_method(generated_oas): | ||||
|     assert generated_oas["paths"]["/pets/{id}"]["put"] == { | ||||
|         "parameters": [ | ||||
|             { | ||||
|                 "in": "path", | ||||
|                 "name": "id", | ||||
|                 "required": True, | ||||
|                 "schema": {"type": "integer"}, | ||||
|             } | ||||
|         ], | ||||
|         "requestBody": { | ||||
|             "content": { | ||||
|                 "application/json": { | ||||
|                     "schema": { | ||||
|                         "properties": { | ||||
|                             "id": {"title": "Id", "type": "integer"}, | ||||
|                             "name": {"title": "Name", "type": "string"}, | ||||
|                         }, | ||||
|                         "required": ["id", "name"], | ||||
|                         "title": "Pet", | ||||
|                         "type": "object", | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|     } | ||||
		Reference in New Issue
	
	Block a user