From 791653f45cd1a6cc7965ccdd725c5375f999a886 Mon Sep 17 00:00:00 2001 From: Marc Rejohn Castillano Date: Sun, 27 Sep 2026 22:27:11 +0800 Subject: [PATCH] fix(programmer): buildMonitorEntries accepts pre-computed leave/passSlip maps Changed buildMonitorEntries signature to accept Map and Map instead of List types, matching the spec requirement that callers pass pre-computed maps from activeLeaveByUser() and activePassSlipByUser(). - Updated function signature for both parameters - Removed internal calls to activeLeaveByUser/activePassSlipByUser - Updated state-determination to use direct map lookups - Updated all test cases to pass computed maps - All 19 tests passing - No new analyzer issues Co-Authored-By: claude-flow --- .../monitor/monitor_model.dart | 14 ++--- test/programmer_monitor_model_test.dart | 51 +++++++++++-------- 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/lib/screens/programmer_tasks/monitor/monitor_model.dart b/lib/screens/programmer_tasks/monitor/monitor_model.dart index 4e2714a9..407654a5 100644 --- a/lib/screens/programmer_tasks/monitor/monitor_model.dart +++ b/lib/screens/programmer_tasks/monitor/monitor_model.dart @@ -5,7 +5,6 @@ import 'package:tasq/models/programmer_task.model.dart'; import 'package:tasq/models/programmer_task_work_log.model.dart'; import 'package:tasq/providers/programmer_day_data_provider.dart'; import 'package:tasq/utils/programmer_day_rows.dart'; -import 'package:tasq/utils/staff_presence.dart'; enum MonitorState { working, paused, idle, onLeave, passSlip } @@ -99,20 +98,21 @@ class ProgrammerMonitorEntry { /// /// Sort order: working -> paused -> idle -> passSlip -> onLeave, /// then alphabetical by programmer.fullName within each state group. +/// +/// Parameters [leaves] and [passSlips] should be pre-computed maps from +/// activeLeaveByUser() and activePassSlipByUser() respectively. List buildMonitorEntries({ required List programmers, required DayActivityData today, required Map runStates, - required List leaves, - required List passSlips, + required Map leaves, + required Map passSlips, required Map sheetStatusByUser, required Map projectNames, required Map profileNames, required DateTime now, }) { final taskById = {for (final t in today.tasks) t.id: t}; - final activeLeaves = activeLeaveByUser(leaves, now); - final activePassSlips = activePassSlipByUser(passSlips); final entries = []; @@ -122,9 +122,9 @@ List buildMonitorEntries({ // Step 1: Determine state // Priority: onLeave > passSlip > working/paused/idle MonitorState state; - if (activeLeaves.containsKey(programmerId)) { + if (leaves.containsKey(programmerId)) { state = MonitorState.onLeave; - } else if (activePassSlips.containsKey(programmerId)) { + } else if (passSlips.containsKey(programmerId)) { state = MonitorState.passSlip; } else { // Determine from task states diff --git a/test/programmer_monitor_model_test.dart b/test/programmer_monitor_model_test.dart index da96177b..eb7e7b48 100644 --- a/test/programmer_monitor_model_test.dart +++ b/test/programmer_monitor_model_test.dart @@ -8,6 +8,7 @@ import 'package:tasq/models/programmer_task_work_log.model.dart'; import 'package:tasq/providers/programmer_day_data_provider.dart'; import 'package:tasq/screens/programmer_tasks/monitor/monitor_model.dart'; import 'package:tasq/utils/app_time.dart'; +import 'package:tasq/utils/staff_presence.dart'; void main() { setUpAll(AppTime.initialize); @@ -247,12 +248,13 @@ void main() { logsByTask: {}, workLogs: [], ); + final activeLeaves = activeLeaveByUser([leave], now); final entries = buildMonitorEntries( programmers: [programmer], today: data, runStates: {}, - leaves: [leave], - passSlips: [], + leaves: activeLeaves, + passSlips: {}, sheetStatusByUser: {}, projectNames: {}, profileNames: {}, @@ -286,12 +288,13 @@ void main() { logsByTask: {}, workLogs: [], ); + final activePassSlips = activePassSlipByUser([slip]); final entries = buildMonitorEntries( programmers: [programmer], today: data, runStates: {}, - leaves: [], - passSlips: [slip], + leaves: {}, + passSlips: activePassSlips, sheetStatusByUser: {}, projectNames: {}, profileNames: {}, @@ -329,8 +332,8 @@ void main() { programmers: [programmer], today: data, runStates: runStates, - leaves: [], - passSlips: [], + leaves: {}, + passSlips: {}, sheetStatusByUser: {}, projectNames: {}, profileNames: {}, @@ -369,8 +372,8 @@ void main() { programmers: [programmer], today: data, runStates: runStates, - leaves: [], - passSlips: [], + leaves: {}, + passSlips: {}, sheetStatusByUser: {}, projectNames: {}, profileNames: {}, @@ -396,8 +399,8 @@ void main() { programmers: [programmer], today: data, runStates: {}, - leaves: [], - passSlips: [], + leaves: {}, + passSlips: {}, sheetStatusByUser: {}, projectNames: {}, profileNames: {}, @@ -443,12 +446,13 @@ void main() { final runStates = { 't1': (state: ProgrammerRunState.running, since: DateTime.utc(2026, 9, 27, 10, 0)), }; + final activeLeaves = activeLeaveByUser([leave], now); final entries = buildMonitorEntries( programmers: [programmer], today: data, runStates: runStates, - leaves: [leave], - passSlips: [], + leaves: activeLeaves, + passSlips: {}, sheetStatusByUser: {}, projectNames: {}, profileNames: {}, @@ -546,12 +550,15 @@ void main() { 't2': (state: ProgrammerRunState.paused, since: DateTime.utc(2026, 9, 27, 11, 0)), }; + final activeLeaves = activeLeaveByUser([leave], now); + final activePassSlips = activePassSlipByUser([slip]); + final entries = buildMonitorEntries( programmers: [p1, p2, p3, p4, p5], today: data, runStates: runStates, - leaves: [leave], - passSlips: [slip], + leaves: activeLeaves, + passSlips: activePassSlips, sheetStatusByUser: {}, projectNames: {}, profileNames: {}, @@ -595,8 +602,8 @@ void main() { programmers: [p1, p2, p3], today: data, runStates: {}, - leaves: [], - passSlips: [], + leaves: {}, + passSlips: {}, sheetStatusByUser: {}, projectNames: {}, profileNames: {}, @@ -672,8 +679,8 @@ void main() { programmers: [programmer], today: data, runStates: runStates, - leaves: [], - passSlips: [], + leaves: {}, + passSlips: {}, sheetStatusByUser: {}, projectNames: {}, profileNames: {}, @@ -733,8 +740,8 @@ void main() { programmers: [programmer], today: data, runStates: runStates, - leaves: [], - passSlips: [], + leaves: {}, + passSlips: {}, sheetStatusByUser: {}, projectNames: {}, profileNames: {}, @@ -764,8 +771,8 @@ void main() { programmers: [programmer], today: data, runStates: {}, - leaves: [], - passSlips: [], + leaves: {}, + passSlips: {}, sheetStatusByUser: {}, projectNames: {}, profileNames: {},