forked from datafold/data-diff
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtest_datetime_parsing.py
More file actions
73 lines (54 loc) · 2.93 KB
/
test_datetime_parsing.py
File metadata and controls
73 lines (54 loc) · 2.93 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
from datetime import datetime, timedelta, timezone
import pytest
from data_diff.databases.base import _parse_datetime
class TestParseDatetime:
def test_standard_microsecond_format(self):
result = _parse_datetime("2022-06-03 12:24:35.123456")
assert result == datetime(2022, 6, 3, 12, 24, 35, 123456)
def test_millisecond_precision(self):
result = _parse_datetime("2022-06-03 12:24:35.123")
assert result == datetime(2022, 6, 3, 12, 24, 35, 123000)
def test_no_fractional_seconds(self):
result = _parse_datetime("2022-06-03 12:24:35")
assert result == datetime(2022, 6, 3, 12, 24, 35)
def test_nanosecond_precision_truncated(self):
result = _parse_datetime("2022-06-03 12:24:35.123456789")
assert result == datetime(2022, 6, 3, 12, 24, 35, 123456)
def test_seven_fractional_digits_truncated(self):
result = _parse_datetime("2022-06-03 12:24:35.1234567")
assert result == datetime(2022, 6, 3, 12, 24, 35, 123456)
def test_trailing_whitespace(self):
result = _parse_datetime("2022-06-03 12:24:35.123456 ")
assert result == datetime(2022, 6, 3, 12, 24, 35, 123456)
def test_leading_whitespace(self):
result = _parse_datetime(" 2022-06-03 12:24:35.123456")
assert result == datetime(2022, 6, 3, 12, 24, 35, 123456)
def test_timezone_offset(self):
result = _parse_datetime("2022-06-03T12:24:35+00:00")
assert result == datetime(2022, 6, 3, 12, 24, 35, tzinfo=timezone.utc)
def test_z_suffix_utc(self):
result = _parse_datetime("2022-06-03T12:24:35Z")
assert result == datetime(2022, 6, 3, 12, 24, 35, tzinfo=timezone.utc)
def test_nanosecond_precision_with_timezone(self):
result = _parse_datetime("2022-06-03T12:24:35.123456789+05:30")
expected_tz = timezone(timedelta(hours=5, minutes=30))
assert result == datetime(2022, 6, 3, 12, 24, 35, 123456, tzinfo=expected_tz)
def test_nanosecond_precision_with_z_suffix(self):
result = _parse_datetime("2022-06-03T12:24:35.123456789Z")
assert result == datetime(2022, 6, 3, 12, 24, 35, 123456, tzinfo=timezone.utc)
def test_all_nines_nanoseconds_truncates_not_rounds(self):
result = _parse_datetime("2022-06-03 23:59:59.999999999")
assert result == datetime(2022, 6, 3, 23, 59, 59, 999999)
def test_negative_timezone_offset(self):
result = _parse_datetime("2022-06-03T12:24:35-05:00")
expected_tz = timezone(timedelta(hours=-5))
assert result == datetime(2022, 6, 3, 12, 24, 35, tzinfo=expected_tz)
def test_trailing_dot_raises(self):
with pytest.raises(ValueError):
_parse_datetime("2022-06-03T12:24:35.")
def test_invalid_string_raises(self):
with pytest.raises(ValueError):
_parse_datetime("not-a-date")
def test_empty_string_raises(self):
with pytest.raises(ValueError):
_parse_datetime("")