|
1 | 1 | from dataclasses import dataclass |
| 2 | +from datetime import datetime, timezone |
2 | 3 | from unittest import TestCase |
3 | 4 | from typing import Any, List, Optional |
4 | 5 | from os import remove |
@@ -30,21 +31,48 @@ class DataModel: |
30 | 31 | test: int |
31 | 32 | nested: NestedModel |
32 | 33 | array: List[NestedModel] |
| 34 | + datetime: datetime |
33 | 35 | from_json_file: Optional[Any] = None |
34 | 36 |
|
35 | 37 |
|
36 | 38 | JSON_DATA: DataModel = DataModel( |
37 | | - test=1, nested=NestedModel(test=1), array=[NestedModel(test=1)] |
| 39 | + test=1, |
| 40 | + nested=NestedModel(test=1), |
| 41 | + datetime=datetime(2020, 9, 28, 20, 11, 31, tzinfo=timezone.utc), |
| 42 | + array=[NestedModel(test=1)], |
38 | 43 | ) |
39 | | -EXPECTED_JSON_STRING = '{"array": [{"test": 1}], "nested": {"test": 1}, "test": 1}' |
| 44 | +EXPECTED_JSON_STRING = '{"array": [{"test": 1}], "datetime": "2020-09-28T20:11:31+00:00", "nested": {"test": 1}, "test": 1}' |
40 | 45 | EXPECTED_JSON_OBJECT = { |
41 | 46 | "test": 1, |
| 47 | + "datetime": "2020-09-28T20:11:31+00:00", |
42 | 48 | "nested": {"test": 1}, |
43 | 49 | "array": [{"test": 1}], |
44 | 50 | } |
45 | 51 |
|
46 | 52 |
|
47 | 53 | class TestSerializable(TestCase): |
| 54 | + def test_read_iso_date(self) -> None: |
| 55 | + # Arrange |
| 56 | + target_date = datetime(2020, 9, 28, 20, 11, 31, tzinfo=timezone.utc) |
| 57 | + representations = [ |
| 58 | + # UTC |
| 59 | + '"2020-09-28T20:11:31+00:00"', |
| 60 | + '"2020-09-28T20:11:31.000+00:00"', |
| 61 | + '"2020-09-28T20:11:31.000Z"', |
| 62 | + '"2020-09-28T20:11:31Z"', |
| 63 | + # Other time zone |
| 64 | + '"2020-09-28T21:11:31+01:00"', |
| 65 | + '"2020-09-28T21:11:31.000+01:00"', |
| 66 | + ] |
| 67 | + |
| 68 | + # Act |
| 69 | + results = [read_json(value, datetime) for value in representations] |
| 70 | + |
| 71 | + # Assert |
| 72 | + # expected_timestamp = target_date.timestamp() |
| 73 | + for result in results: |
| 74 | + self.assertEqual(target_date, result) |
| 75 | + |
48 | 76 | def test_read_and_write_json(self) -> None: |
49 | 77 | # Act |
50 | 78 | json_string = write_json(JSON_DATA) |
|
0 commit comments