feat: add tests, update configs, fix state.py return, update gitignore
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
from diff import parse_ics_events, compute_diff, parse_ics_events_with_data
|
||||
|
||||
class TestParseIcsEvents:
|
||||
def test_parse_basic(self, ics_sample):
|
||||
result = parse_ics_events(ics_sample)
|
||||
assert "evt-001@test.com" in result
|
||||
assert "evt-002@test.com" in result
|
||||
assert len(result) == 2
|
||||
|
||||
def test_parse_no_uid(self):
|
||||
ics = """BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
DTSTAMP:20240101T000000Z
|
||||
DTSTART:20240101T100000Z
|
||||
SUMMARY:No UID
|
||||
END:VEVENT
|
||||
END:VCALENDAR"""
|
||||
result = parse_ics_events(ics)
|
||||
assert len(result) == 0
|
||||
|
||||
def test_hashes_are_sha256(self, ics_sample):
|
||||
result = parse_ics_events(ics_sample)
|
||||
for uid, h in result.items():
|
||||
assert len(h) == 64
|
||||
int(h, 16)
|
||||
|
||||
def test_same_event_same_hash(self, ics_sample):
|
||||
r1 = parse_ics_events(ics_sample)
|
||||
r2 = parse_ics_events(ics_sample)
|
||||
for uid in r1:
|
||||
assert r1[uid] == r2[uid]
|
||||
|
||||
def test_modified_event_different_hash(self, ics_sample, ics_sample_modified):
|
||||
r1 = parse_ics_events(ics_sample)
|
||||
r2 = parse_ics_events(ics_sample_modified)
|
||||
assert r1["evt-001@test.com"] != r2["evt-001@test.com"]
|
||||
|
||||
class TestComputeDiff:
|
||||
def test_no_changes(self, ics_sample):
|
||||
ics_uids = parse_ics_events(ics_sample)
|
||||
deltas = compute_diff(ics_uids, ics_uids)
|
||||
assert len(deltas["to_add"]) == 0
|
||||
assert len(deltas["to_update"]) == 0
|
||||
assert len(deltas["to_delete"]) == 0
|
||||
|
||||
def test_add_events(self, ics_sample, ics_sample_modified):
|
||||
original = parse_ics_events(ics_sample)
|
||||
modified = parse_ics_events(ics_sample_modified)
|
||||
deltas = compute_diff(modified, original)
|
||||
assert ("evt-003@test.com", modified["evt-003@test.com"]) in deltas["to_add"]
|
||||
|
||||
def test_delete_events(self, ics_sample, ics_sample_modified):
|
||||
original = parse_ics_events(ics_sample)
|
||||
modified = parse_ics_events(ics_sample_modified)
|
||||
deltas = compute_diff(modified, original)
|
||||
assert "evt-002@test.com" in deltas["to_delete"]
|
||||
|
||||
def test_update_events(self, ics_sample, ics_sample_modified):
|
||||
original = parse_ics_events(ics_sample)
|
||||
modified = parse_ics_events(ics_sample_modified)
|
||||
deltas = compute_diff(modified, original)
|
||||
uid, new_hash = deltas["to_update"][0]
|
||||
assert uid == "evt-001@test.com"
|
||||
assert new_hash == modified["evt-001@test.com"]
|
||||
|
||||
class TestParseIcsEventsWithData:
|
||||
def test_returns_bytes(self, ics_sample):
|
||||
result = parse_ics_events_with_data(ics_sample)
|
||||
assert len(result) == 2
|
||||
for uid, data in result.items():
|
||||
assert isinstance(data, bytes)
|
||||
assert b"VEVENT" in data
|
||||
Reference in New Issue
Block a user