Update tenders recommendations view
continuous-integration/drone/push Build is passing

This commit is contained in:
AmirReza Jamali
2026-06-29 13:27:21 +03:30
parent 17ccd9d464
commit 6cd8d7cc7f
9 changed files with 124 additions and 492 deletions
@@ -15,34 +15,39 @@ import 'package:tm_app/view_models/ai_recommendations_view_model.dart';
void main() {
group('AiRecommendationsViewModel', () {
test('loads recommended tenders from GET /api/v1/tenders/recommend', () async {
final prefs = await _prefs();
final homeRepository = _FakeHomeRepository(
prefs,
result: Result.ok(
RecommendedTendersResponse(
succes: true,
message: 'ok',
error: null,
data: RecommendedTendersData(
tenders: [_sampleTender(id: 'tender-1', title: 'Bridge repair')],
metadata: null,
test(
'loads recommended tenders from GET /api/v1/tenders/recommend',
() async {
final prefs = await _prefs();
final homeRepository = _FakeHomeRepository(
prefs,
result: Result.ok(
RecommendedTendersResponse(
success: true,
message: 'ok',
error: null,
data: RecommendedTendersData(
tenders: [
_sampleTender(id: 'tender-1', title: 'Bridge repair'),
],
metadata: null,
),
),
),
),
);
final viewModel = AiRecommendationsViewModel(
companyAiRepository: _FakeCompanyAiRepository(prefs),
homeRepository: homeRepository,
);
);
final viewModel = AiRecommendationsViewModel(
companyAiRepository: _FakeCompanyAiRepository(prefs),
homeRepository: homeRepository,
);
await viewModel.loadRecommendations();
await viewModel.loadRecommendations();
expect(viewModel.hasLoaded, isTrue);
expect(viewModel.errorMessage, isNull);
expect(homeRepository.recommendedTendersCalls, 1);
expect(viewModel.recommendedTenders.single.id, 'tender-1');
});
expect(viewModel.hasLoaded, isTrue);
expect(viewModel.errorMessage, isNull);
expect(homeRepository.recommendedTendersCalls, 1);
expect(viewModel.recommendedTenders.single.id, 'tender-1');
},
);
test('keeps failed transient loads retryable for loadIfNeeded', () async {
final prefs = await _prefs();
@@ -52,11 +57,13 @@ void main() {
Result.error(Exception('network failed')),
Result.ok(
RecommendedTendersResponse(
succes: true,
success: true,
message: 'ok',
error: null,
data: RecommendedTendersData(
tenders: [_sampleTender(id: 'tender-1', title: 'Bridge repair')],
tenders: [
_sampleTender(id: 'tender-1', title: 'Bridge repair'),
],
metadata: null,
),
),
@@ -128,7 +135,7 @@ class _FakeHomeRepository extends HomeRepository {
result ??
const Result.ok(
RecommendedTendersResponse(
succes: true,
success: true,
message: 'ok',
error: null,
data: RecommendedTendersData(tenders: [], metadata: null),