feat(programmer): dated work-log corrections

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
2026-09-28 14:08:28 +08:00
parent cc8d8ab8bf
commit be16a3cd0d
4 changed files with 85 additions and 13 deletions
+29
View File
@@ -326,5 +326,34 @@ void main() {
expect(result.workLogs, hasLength(1));
expect(result.workLogs.first.taskId, 'helper-task');
});
test('excludes work logs with a different work_date', () async {
final tTask = _task(
id: 'some-task',
status: ProgrammerTaskStatus.inProgress,
startedAt: DateTime.utc(2026, 9, 27, 0, 0),
);
final client = _FakeClient(tables: {
'programmer_task_work_logs': [
{
'id': 'wl-old',
'task_id': 'some-task',
'author_id': 'u1',
'description': 'yesterday',
'minutes': 60,
'created_at': '2026-09-26T10:00:00Z',
'work_date': '2026-09-26',
},
],
'programmer_task_activity_logs': [],
});
final result = await fetchDayActivityData(
client,
day: day,
tasks: [tTask],
now: now,
);
expect(result.workLogs, isEmpty);
});
});
}
@@ -526,6 +526,28 @@ void main() {
expect(rows[1].containsKey('minutes'), isFalse); // null minutes omitted
});
test('addWorkLog with workDate inserts work_date key', () async {
final fake = _FakeClient('u1');
final wl = ProgrammerTaskWorkLogsController(fake as dynamic);
await wl.addWorkLog(
taskId: 't1',
description: 'correction',
workDate: DateTime.utc(2026, 9, 25),
);
final rows = fake.tables['programmer_task_work_logs']!;
expect(rows.length, 1);
expect(rows.first['work_date'], '2026-09-25');
});
test('addWorkLog without workDate omits work_date key', () async {
final fake = _FakeClient('u1');
final wl = ProgrammerTaskWorkLogsController(fake as dynamic);
await wl.addWorkLog(taskId: 't1', description: 'progress');
final rows = fake.tables['programmer_task_work_logs']!;
expect(rows.length, 1);
expect(rows.first.containsKey('work_date'), isFalse);
});
test('addComment stores body + author with empty attachments', () async {
final fake = _FakeClient('u1');
final cc = ProgrammerTaskCommentsController(fake as dynamic);