File: test_timestamp_dict_encode.py

package info (click to toggle)
python-aristaproto 1.2%2Breally0.1.4-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,600 kB
  • sloc: python: 6,521; java: 106; xml: 84; makefile: 6
file content (82 lines) | stat: -rw-r--r-- 2,736 bytes parent folder | download | duplicates (2)
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
from datetime import (
    datetime,
    timedelta,
    timezone,
)

import pytest

from tests.output_aristaproto.timestamp_dict_encode import Test


# Current World Timezone range (UTC-12 to UTC+14)
MIN_UTC_OFFSET_MIN = -12 * 60
MAX_UTC_OFFSET_MIN = 14 * 60

# Generate all timezones in range in 15 min increments
timezones = [
    timezone(timedelta(minutes=x))
    for x in range(MIN_UTC_OFFSET_MIN, MAX_UTC_OFFSET_MIN + 1, 15)
]


@pytest.mark.parametrize("tz", timezones)
def test_timezone_aware_datetime_dict_encode(tz: timezone):
    original_time = datetime.now(tz=tz)
    original_message = Test()
    original_message.ts = original_time
    encoded = original_message.to_dict()
    decoded_message = Test()
    decoded_message.from_dict(encoded)

    # check that the timestamps are equal after decoding from dict
    assert original_message.ts.tzinfo is not None
    assert decoded_message.ts.tzinfo is not None
    assert original_message.ts == decoded_message.ts


def test_naive_datetime_dict_encode():
    # make suer naive datetime objects are still treated as utc
    original_time = datetime.now()
    assert original_time.tzinfo is None
    original_message = Test()
    original_message.ts = original_time
    original_time_utc = original_time.replace(tzinfo=timezone.utc)
    encoded = original_message.to_dict()
    decoded_message = Test()
    decoded_message.from_dict(encoded)

    # check that the timestamps are equal after decoding from dict
    assert decoded_message.ts.tzinfo is not None
    assert original_time_utc == decoded_message.ts


@pytest.mark.parametrize("tz", timezones)
def test_timezone_aware_json_serialize(tz: timezone):
    original_time = datetime.now(tz=tz)
    original_message = Test()
    original_message.ts = original_time
    json_serialized = original_message.to_json()
    decoded_message = Test()
    decoded_message.from_json(json_serialized)

    # check that the timestamps are equal after decoding from dict
    assert original_message.ts.tzinfo is not None
    assert decoded_message.ts.tzinfo is not None
    assert original_message.ts == decoded_message.ts


def test_naive_datetime_json_serialize():
    # make suer naive datetime objects are still treated as utc
    original_time = datetime.now()
    assert original_time.tzinfo is None
    original_message = Test()
    original_message.ts = original_time
    original_time_utc = original_time.replace(tzinfo=timezone.utc)
    json_serialized = original_message.to_json()
    decoded_message = Test()
    decoded_message.from_json(json_serialized)

    # check that the timestamps are equal after decoding from dict
    assert decoded_message.ts.tzinfo is not None
    assert original_time_utc == decoded_message.ts