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); }); }