f8c3422715
Extract _TaskCard from the list screen into ProgrammerTaskCard, a shared ConsumerWidget that reads programmerRunStatesProvider so the paused-task pill and Start/Resume/Complete buttons are consistent across any surface that embeds it. Move the _complete body verbatim to completeProgrammerTaskWithConfirm in programmer_task_actions.dart; the detail screen's _ActionBar now calls the shared function. Co-Authored-By: claude-flow <ruv@ruv.net>
65 lines
2.0 KiB
Dart
65 lines
2.0 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:tasq/models/programmer_task.model.dart';
|
|
import 'package:tasq/providers/programmer_day_data_provider.dart';
|
|
import 'package:tasq/screens/programmer_tasks/widgets/programmer_task_card.dart';
|
|
import 'package:tasq/utils/app_time.dart';
|
|
|
|
ProgrammerTask _task() => ProgrammerTask(
|
|
id: 't1',
|
|
title: 'Test Task',
|
|
category: ProgrammerTaskCategory.bugFix,
|
|
status: ProgrammerTaskStatus.inProgress,
|
|
createdAt: DateTime(2026, 1, 1),
|
|
updatedAt: DateTime(2026, 1, 1),
|
|
);
|
|
|
|
Widget _buildCard({required bool isMine, bool readOnly = false}) {
|
|
return ProviderScope(
|
|
overrides: [
|
|
programmerRunStatesProvider.overrideWithValue({
|
|
't1': (
|
|
state: ProgrammerRunState.paused,
|
|
since: DateTime(2026, 1, 1),
|
|
),
|
|
}),
|
|
],
|
|
child: MaterialApp(
|
|
home: Scaffold(
|
|
body: ProgrammerTaskCard(
|
|
task: _task(),
|
|
isMine: isMine,
|
|
readOnly: readOnly,
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
void main() {
|
|
setUpAll(AppTime.initialize);
|
|
|
|
testWidgets(
|
|
'paused pill shows for any assignee; Resume only for mine and not read-only',
|
|
(tester) async {
|
|
// Case 1: isMine: false -> Paused pill shown, Resume not shown
|
|
await tester.pumpWidget(_buildCard(isMine: false));
|
|
await tester.pump();
|
|
expect(find.text('PAUSED'), findsOneWidget);
|
|
expect(find.text('Resume'), findsNothing);
|
|
|
|
// Case 2: isMine: true -> Resume shown
|
|
await tester.pumpWidget(_buildCard(isMine: true));
|
|
await tester.pump();
|
|
expect(find.text('PAUSED'), findsOneWidget);
|
|
expect(find.text('Resume'), findsOneWidget);
|
|
|
|
// Case 3: isMine: true, readOnly: true -> Resume not shown
|
|
await tester.pumpWidget(_buildCard(isMine: true, readOnly: true));
|
|
await tester.pump();
|
|
expect(find.text('PAUSED'), findsOneWidget);
|
|
expect(find.text('Resume'), findsNothing);
|
|
});
|
|
}
|