|
| 1 | +import os |
1 | 2 | from abc import abstractmethod |
2 | 3 | from dataclasses import dataclass |
3 | 4 | from datetime import date, datetime, time |
|
7 | 8 | from uuid import UUID |
8 | 9 |
|
9 | 10 | import pytest |
| 11 | +import yaml |
10 | 12 | from pydantic import BaseModel |
11 | 13 |
|
12 | 14 | from openapidocs.common import Format, Serializer |
| 15 | +from openapidocs.mk.contents import JSONContentWriter |
13 | 16 | from openapidocs.v3 import ( |
14 | 17 | APIKeySecurity, |
15 | 18 | Callback, |
@@ -2293,3 +2296,110 @@ def test_equality(example_type: Type[TestItem]) -> None: |
2293 | 2296 | one = example.get_instance() |
2294 | 2297 | two = example.get_instance() |
2295 | 2298 | assert one == two |
| 2299 | + |
| 2300 | + |
| 2301 | +def test_serialize_datetimes_examples(): |
| 2302 | + """ |
| 2303 | + Tests serialization using the default formatter for datetime. |
| 2304 | + """ |
| 2305 | + writer = JSONContentWriter() |
| 2306 | + |
| 2307 | + yaml_text = """ |
| 2308 | +description: Start time stamp of the returned data interval |
| 2309 | +example: 2022-08-17T18:00:00Z |
| 2310 | +in: query |
| 2311 | +name: fromInstant |
| 2312 | +required: false |
| 2313 | +schema: |
| 2314 | + format: date-time |
| 2315 | + type: string |
| 2316 | + """ |
| 2317 | + data = yaml.safe_load(yaml_text) |
| 2318 | + json_text = writer.write(data) |
| 2319 | + |
| 2320 | + expected_json = """ |
| 2321 | +{ |
| 2322 | + "description": "Start time stamp of the returned data interval", |
| 2323 | + "example": "2022-08-17T18:00:00+00:00", |
| 2324 | + "in": "query", |
| 2325 | + "name": "fromInstant", |
| 2326 | + "required": false, |
| 2327 | + "schema": { |
| 2328 | + "format": "date-time", |
| 2329 | + "type": "string" |
| 2330 | + } |
| 2331 | +} |
| 2332 | + """.strip() |
| 2333 | + |
| 2334 | + assert json_text == expected_json |
| 2335 | + |
| 2336 | + |
| 2337 | +def test_serialize_datetimes_examples_exact_format(): |
| 2338 | + writer = JSONContentWriter() |
| 2339 | + |
| 2340 | + yaml_text = """ |
| 2341 | +description: Start time stamp of the returned data interval |
| 2342 | +example: '2022-08-17T18:00:00Z' |
| 2343 | +in: query |
| 2344 | +name: fromInstant |
| 2345 | +required: false |
| 2346 | +schema: |
| 2347 | + format: date-time |
| 2348 | + type: string |
| 2349 | + """ |
| 2350 | + data = yaml.safe_load(yaml_text) |
| 2351 | + json_text = writer.write(data) |
| 2352 | + |
| 2353 | + expected_json = """ |
| 2354 | +{ |
| 2355 | + "description": "Start time stamp of the returned data interval", |
| 2356 | + "example": "2022-08-17T18:00:00Z", |
| 2357 | + "in": "query", |
| 2358 | + "name": "fromInstant", |
| 2359 | + "required": false, |
| 2360 | + "schema": { |
| 2361 | + "format": "date-time", |
| 2362 | + "type": "string" |
| 2363 | + } |
| 2364 | +} |
| 2365 | + """.strip() |
| 2366 | + |
| 2367 | + assert json_text == expected_json |
| 2368 | + |
| 2369 | + |
| 2370 | +def test_serialize_datetimes_examples_exact_format_env(): |
| 2371 | + os.environ["OPENAPI_DATETIME_FORMAT"] = "%Y-%m-%dT%H:%M:%SZ" |
| 2372 | + |
| 2373 | + try: |
| 2374 | + writer = JSONContentWriter() |
| 2375 | + |
| 2376 | + yaml_text = """ |
| 2377 | + description: Start time stamp of the returned data interval |
| 2378 | + example: 2022-08-17T18:00:00Z |
| 2379 | + in: query |
| 2380 | + name: fromInstant |
| 2381 | + required: false |
| 2382 | + schema: |
| 2383 | + format: date-time |
| 2384 | + type: string |
| 2385 | + """ |
| 2386 | + data = yaml.safe_load(yaml_text) |
| 2387 | + json_text = writer.write(data) |
| 2388 | + |
| 2389 | + expected_json = """ |
| 2390 | +{ |
| 2391 | + "description": "Start time stamp of the returned data interval", |
| 2392 | + "example": "2022-08-17T18:00:00Z", |
| 2393 | + "in": "query", |
| 2394 | + "name": "fromInstant", |
| 2395 | + "required": false, |
| 2396 | + "schema": { |
| 2397 | + "format": "date-time", |
| 2398 | + "type": "string" |
| 2399 | + } |
| 2400 | +} |
| 2401 | + """.strip() |
| 2402 | + |
| 2403 | + assert json_text == expected_json |
| 2404 | + finally: |
| 2405 | + os.environ["OPENAPI_DATETIME_FORMAT"] = "" |
0 commit comments