raubatz's picture
download
raw
6.65 kB
#import pytest
from datetime import datetime, timedelta
from src.basic_data_handling.time_nodes import (
TimeNow,
TimeNowUTC,
TimeToUnix,
UnixToTime,
TimeFormat,
TimeParse,
TimeDelta,
TimeAddDelta,
TimeSubtractDelta,
TimeDifference,
TimeExtract,
)
def test_time_now():
node = TimeNow()
result = node.get_now()
assert isinstance(result, tuple)
assert len(result) == 1
assert isinstance(result[0], datetime)
# Test with trigger parameter
result_with_trigger = node.get_now(trigger="any value")
assert isinstance(result_with_trigger, tuple)
assert len(result_with_trigger) == 1
assert isinstance(result_with_trigger[0], datetime)
def test_time_now_utc():
node = TimeNowUTC()
result = node.get_now_utc()
assert isinstance(result, tuple)
assert len(result) == 1
assert isinstance(result[0], datetime)
# Test with trigger parameter
result_with_trigger = node.get_now_utc(trigger="any value")
assert isinstance(result_with_trigger, tuple)
assert len(result_with_trigger) == 1
assert isinstance(result_with_trigger[0], datetime)
def test_time_to_unix():
node = TimeToUnix()
test_datetime = datetime(2023, 1, 1, 12, 0, 0)
result = node.to_unix(test_datetime)
assert isinstance(result, tuple)
assert len(result) == 1
assert isinstance(result[0], float)
# 2023-01-01 12:00:00 should convert to a specific timestamp
expected_timestamp = test_datetime.timestamp()
assert result[0] == expected_timestamp
def test_unix_to_time():
node = UnixToTime()
# Test with a specific timestamp (2023-01-01 12:00:00)
test_timestamp = 1672574400.0 # This is 2023-01-01 12:00:00 in UTC
result = node.from_unix(test_timestamp)
assert isinstance(result, tuple)
assert len(result) == 1
assert isinstance(result[0], datetime)
# The returned datetime will be in local timezone, so hours might differ
# Just check that the date is correct and hours are reasonable
returned_dt = result[0]
assert returned_dt.year == 2023
assert returned_dt.month == 1
assert returned_dt.day == 1
# Allow for timezone differences (typically within ±12 hours)
assert 0 <= returned_dt.hour < 24
assert returned_dt.minute == 0
assert returned_dt.second == 0
def test_time_format():
node = TimeFormat()
test_datetime = datetime(2023, 1, 1, 12, 30, 45)
# Test with default format
result = node.format_time(test_datetime, "%Y-%m-%d %H:%M:%S")
assert result == ("2023-01-01 12:30:45",)
# Test with custom format
result = node.format_time(test_datetime, "%d/%m/%Y")
assert result == ("01/01/2023",)
# Test with time-only format
result = node.format_time(test_datetime, "%H:%M")
assert result == ("12:30",)
def test_time_parse():
node = TimeParse()
# Test standard format
result = node.parse_time("2023-01-01 12:30:45", "%Y-%m-%d %H:%M:%S")
assert isinstance(result, tuple)
assert len(result) == 1
assert isinstance(result[0], datetime)
assert result[0] == datetime(2023, 1, 1, 12, 30, 45)
# Test custom format
result = node.parse_time("01/01/2023", "%d/%m/%Y")
assert result[0] == datetime(2023, 1, 1, 0, 0, 0)
# Test time-only format
result = node.parse_time("12:30", "%H:%M")
parsed_datetime = result[0]
assert parsed_datetime.hour == 12
assert parsed_datetime.minute == 30
def test_time_delta():
node = TimeDelta()
# Test with days only
result = node.create_delta(days=5)
assert isinstance(result, tuple)
assert len(result) == 1
assert isinstance(result[0], timedelta)
assert result[0].days == 5
# Test with multiple parameters
result = node.create_delta(days=1, hours=2, minutes=30)
delta = result[0]
# Convert to seconds for easier comparison
total_seconds = delta.total_seconds()
expected_seconds = 24*60*60 + 2*60*60 + 30*60 # 1 day, 2 hours, 30 minutes
assert total_seconds == expected_seconds
# Test with all parameters
result = node.create_delta(
days=1,
seconds=30,
microseconds=500,
milliseconds=100,
minutes=5,
hours=2,
weeks=1
)
delta = result[0]
# A week plus a day
assert delta.days == 8
# Convert the remainder to seconds for comparison
remainder_seconds = delta.seconds
expected_remainder = 2*60*60 + 5*60 + 30 + 0.1 # 2 hours, 5 minutes, 30 seconds, 100 milliseconds
assert abs(remainder_seconds - expected_remainder) < 1
assert delta.microseconds == 100500
def test_time_add_delta():
node = TimeAddDelta()
test_datetime = datetime(2023, 1, 1, 12, 0, 0)
test_delta = timedelta(days=1, hours=2, minutes=30)
result = node.add(test_datetime, test_delta)
assert isinstance(result, tuple)
assert len(result) == 1
assert isinstance(result[0], datetime)
expected_datetime = datetime(2023, 1, 2, 14, 30, 0) # 1 day, 2 hours, 30 minutes later
assert result[0] == expected_datetime
def test_time_subtract_delta():
node = TimeSubtractDelta()
test_datetime = datetime(2023, 1, 2, 14, 30, 0)
test_delta = timedelta(days=1, hours=2, minutes=30)
result = node.subtract(test_datetime, test_delta)
assert isinstance(result, tuple)
assert len(result) == 1
assert isinstance(result[0], datetime)
expected_datetime = datetime(2023, 1, 1, 12, 0, 0) # 1 day, 2 hours, 30 minutes earlier
assert result[0] == expected_datetime
def test_time_difference():
node = TimeDifference()
datetime1 = datetime(2023, 1, 2, 14, 30, 0)
datetime2 = datetime(2023, 1, 1, 12, 0, 0)
result = node.difference(datetime1, datetime2)
assert isinstance(result, tuple)
assert len(result) == 1
assert isinstance(result[0], timedelta)
expected_delta = timedelta(days=1, hours=2, minutes=30)
assert result[0] == expected_delta
# Test reverse order (should give negative timedelta)
result = node.difference(datetime2, datetime1)
assert result[0] == -expected_delta
def test_time_extract():
node = TimeExtract()
test_datetime = datetime(2023, 1, 2, 14, 30, 45, 123456)
result = node.extract(test_datetime)
assert isinstance(result, tuple)
assert len(result) == 8
year, month, day, hour, minute, second, microsecond, weekday = result
assert year == 2023
assert month == 1
assert day == 2
assert hour == 14
assert minute == 30
assert second == 45
assert microsecond == 123456
# January 2, 2023 was a Monday (weekday 0)
assert weekday == 0

Xet Storage Details

Size:
6.65 kB
·
Xet hash:
019001e33bd99b7dba1fe7affe66169dccf402cd0582778c57ce91bbc2b963b5

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.