Files
AIOA/mobile/test/features/assistant/leave_progress_repository_test.dart
T
2026-07-18 19:20:07 +08:00

70 lines
2.4 KiB
Dart

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, '正在主管审批');
});
}