import 'dart:convert'; import 'package:aioa_mobile/features/assistant/data/leave_progress_repository.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:http/http.dart' as http; import 'package:http/testing.dart'; void main() { test('parses ambiguous own request candidates', () async { final repository = LeaveProgressRepository( baseUrl: 'https://api.example.test/api/v1', client: MockClient((request) async { expect(request.url.path, '/api/v1/ai/leave-progress-answers'); return http.Response( jsonEncode({ 'requiresSelection': true, 'candidates': [ { 'id': 'leave-1', 'type': 'ANNUAL', 'status': 'PENDING', 'startsAt': '2026-07-20T01:00:00Z', 'endsAt': '2026-07-20T09:00:00Z', 'createdAt': '2026-07-18T01:00:00Z', }, ], }), 200, headers: {'content-type': 'application/json; charset=utf-8'}, ); }), ); final result = await repository.ask('我的年假进度?'); expect(result.requiresSelection, isTrue); expect(result.candidates.single.id, 'leave-1'); }); test('sends selected request id and parses active tasks', () async { final repository = LeaveProgressRepository( baseUrl: 'https://api.example.test/api/v1', client: MockClient((request) async { expect(jsonDecode(request.body)['selectedRequestId'], 'leave-1'); return http.Response( jsonEncode({ 'requiresSelection': false, 'answer': '正在主管审批', 'request': { 'id': 'leave-1', 'type': 'ANNUAL', 'status': 'PENDING', 'startsAt': '2026-07-20T01:00:00Z', 'endsAt': '2026-07-20T09:00:00Z', 'createdAt': '2026-07-18T01:00:00Z', }, 'progress': { 'activeTaskNames': ['主管审批'], 'completedTaskNames': [], 'processEnded': false, }, }), 200, headers: {'content-type': 'application/json; charset=utf-8'}, ); }), ); final result = await repository.ask('进度?', selectedRequestId: 'leave-1'); expect(result.activeTasks, ['主管审批']); expect(result.answer, '正在主管审批'); }); }