snapshot of https://github.com/ActivityWatch/aw-core.git (master, 2026-09-16; blobs > 131072B omitted)
Some checks failed
Build / Test on ubuntu-latest, py-3.8 (push) Successful in 4m21s
Lint / lint (push) Successful in 25s
Build / Test on macOS-latest, py-3.8 (push) Has been cancelled
Build / Test on windows-latest, py-3.8 (push) Has been cancelled
CodeQL / Analyze (python) (push) Failing after 1s
Some checks failed
Build / Test on ubuntu-latest, py-3.8 (push) Successful in 4m21s
Lint / lint (push) Successful in 25s
Build / Test on macOS-latest, py-3.8 (push) Has been cancelled
Build / Test on windows-latest, py-3.8 (push) Has been cancelled
CodeQL / Analyze (python) (push) Failing after 1s
This commit is contained in:
84
tests/test_heartbeat.py
Normal file
84
tests/test_heartbeat.py
Normal file
@@ -0,0 +1,84 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from aw_core.models import Event
|
||||
from aw_transform import heartbeat_merge, heartbeat_reduce
|
||||
|
||||
|
||||
def test_heartbeat_merge():
|
||||
"""Events should merge"""
|
||||
now = datetime.now()
|
||||
td_1s = timedelta(seconds=1)
|
||||
|
||||
last_event, heartbeat = Event(timestamp=now), Event(timestamp=now + td_1s)
|
||||
merged = heartbeat_merge(last_event, heartbeat, pulsetime=2)
|
||||
assert merged is not None
|
||||
|
||||
|
||||
def test_heartbeat_merge_fail():
|
||||
"""Merge should not happen"""
|
||||
now = datetime.now()
|
||||
td_1s = timedelta(seconds=1)
|
||||
|
||||
# timestamp of heartbeat more than pulsetime away
|
||||
last_event, heartbeat = (
|
||||
Event(timestamp=now, data={"label": "test"}),
|
||||
Event(timestamp=now + 3 * td_1s, data={"label": "test"}),
|
||||
)
|
||||
merged = heartbeat_merge(last_event, heartbeat, pulsetime=2)
|
||||
assert merged is None
|
||||
|
||||
# labels not identical
|
||||
last_event, heartbeat = (
|
||||
Event(timestamp=now, data={"label": "test"}),
|
||||
Event(timestamp=now + td_1s, data={"label": "test2"}),
|
||||
)
|
||||
merged = heartbeat_merge(last_event, heartbeat, pulsetime=2)
|
||||
assert merged is None
|
||||
|
||||
|
||||
def test_heartbeat_reduce():
|
||||
"""Events should reduce"""
|
||||
now = datetime.now()
|
||||
td_1s = timedelta(seconds=1)
|
||||
|
||||
# Check that empty list works
|
||||
assert not heartbeat_reduce([], pulsetime=1)
|
||||
|
||||
events = [
|
||||
Event(timestamp=now, data={"label": "test"}),
|
||||
Event(timestamp=now + td_1s, data={"label": "test"}),
|
||||
]
|
||||
reduced_events = heartbeat_reduce(events, pulsetime=2)
|
||||
assert len(reduced_events) == 1
|
||||
|
||||
|
||||
def test_heartbeat_same_timestamp():
|
||||
now = datetime.now()
|
||||
td_1s = timedelta(seconds=1)
|
||||
td_0s = timedelta(seconds=0)
|
||||
|
||||
e1 = Event(timestamp=now, duration=td_1s, data={"label": "test"})
|
||||
e2 = Event(timestamp=now, duration=td_0s, data={"label": "test"})
|
||||
|
||||
# Should merge
|
||||
res = heartbeat_reduce(list([e1, e2]), pulsetime=5)
|
||||
assert len(res) == 1
|
||||
assert res[0].duration == td_1s
|
||||
|
||||
# Order shouldn't matter, should merge
|
||||
res = heartbeat_reduce([e2, e1], pulsetime=5)
|
||||
assert len(res) == 1
|
||||
assert res[0].duration == td_1s
|
||||
|
||||
|
||||
def test_heartbeat_reduce_fail():
|
||||
"""Events should not reduce"""
|
||||
now = datetime.now()
|
||||
td_1s = timedelta(seconds=1)
|
||||
|
||||
events = [
|
||||
Event(timestamp=now, data={"label": "test"}),
|
||||
Event(timestamp=now + 3 * td_1s, data={"label": "test"}),
|
||||
]
|
||||
reduced_events = heartbeat_reduce(events, pulsetime=2)
|
||||
assert len(reduced_events) == 2
|
||||
Reference in New Issue
Block a user