streamd/test/test_localize.py
Konstantin Fickel 4dbd142c74
feat: better localization of shards
Signed-off-by: Konstantin Fickel <mail@konstantinfickel.de>
2026-01-31 17:54:50 +01:00

87 lines
2.6 KiB
Python

from datetime import datetime
from streamer.localize.localize import localize_stream_file
from streamer.localize.localized_shard import LocalizedShard
from streamer.localize.repostory_configuration import (
Dimension,
Marker,
MarkerPlacement,
RepositoryConfiguration,
)
from streamer.parse.shard import Shard, StreamFile
repository_configuration = RepositoryConfiguration(
dimensions={
"project": Dimension(
display_name="Project",
comment="GTD Project that is being worked on",
propagate=True,
),
"moment": Dimension(
display_name="Moment",
comment="Timestamp this entry was created at",
propagate=True,
),
"timesheet": Dimension(
display_name="Timesheet",
comment="Time Cards for Time Tracking",
propagate=True,
),
},
markers={
"Streamer": Marker(
display_name="Streamer",
placements=[
MarkerPlacement(dimension="project"),
MarkerPlacement(
if_with=["Timesheet"], dimension="timesheet", value="coding"
),
],
),
"JobHunting": Marker(
display_name="JobHunting", placements=[MarkerPlacement(dimension="project")]
),
},
)
class TestLocalize:
def test_project_simple_stream_file(self):
stream_file = StreamFile(
file_name="20250622-121000 Test File.md",
shard=Shard(start_line=1, end_line=1, markers=["Streamer"]),
)
assert localize_stream_file(
stream_file, repository_configuration
) == LocalizedShard(
moment=datetime(2025, 6, 22, 12, 10, 0, 0),
markers=["Streamer"],
tags=[],
start_line=1,
end_line=1,
children=[],
location={"project": "Streamer", "file": stream_file.file_name},
)
def test_timesheet_use_case(self):
stream_file = StreamFile(
file_name="20260131-210000 Test File.md",
shard=Shard(start_line=1, end_line=1, markers=["Timesheet", "Streamer"]),
)
assert localize_stream_file(
stream_file, repository_configuration
) == LocalizedShard(
moment=datetime(2026, 1, 31, 21, 0, 0, 0),
markers=["Timesheet", "Streamer"],
tags=[],
start_line=1,
end_line=1,
children=[],
location={
"file": stream_file.file_name,
"project": "Streamer",
"timesheet": "coding",
},
)