feat: Introduce comprehensive unit tests for models and BLoCs using mockito and bloc_test, and refine TripBloc error handling.
Some checks failed
Deploy to Play Store / build_and_deploy (push) Has been cancelled

This commit is contained in:
Van Leemput Dayron
2025-12-05 11:55:20 +01:00
parent 9b11836409
commit cac0770467
17 changed files with 1608 additions and 48 deletions

139
test/models/user_test.dart Normal file
View File

@@ -0,0 +1,139 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:travel_mate/models/user.dart';
void main() {
group('User Model Tests', () {
const userId = '123';
const email = 'test@example.com';
const nom = 'Doe';
const prenom = 'John';
const platform = 'email';
const phoneNumber = '1234567890';
const profilePictureUrl = 'http://example.com/pic.jpg';
final user = User(
id: userId,
nom: nom,
prenom: prenom,
email: email,
platform: platform,
phoneNumber: phoneNumber,
profilePictureUrl: profilePictureUrl,
);
test('supports value equality', () {
final user2 = User(
id: userId,
nom: nom,
prenom: prenom,
email: email,
platform: platform,
phoneNumber: phoneNumber,
profilePictureUrl: profilePictureUrl,
);
expect(user, equals(user2));
});
test('props correct', () {
expect(user.id, userId);
expect(user.nom, nom);
expect(user.prenom, prenom);
expect(user.email, email);
expect(user.platform, platform);
expect(user.phoneNumber, phoneNumber);
expect(user.profilePictureUrl, profilePictureUrl);
expect(user.fullName, '$prenom $nom');
});
group('fromJson', () {
test('returns correct user from valid json', () {
final jsonStr =
'''
{
"id": "$userId",
"nom": "$nom",
"prenom": "$prenom",
"email": "$email",
"platform": "$platform",
"phoneNumber": "$phoneNumber",
"profilePictureUrl": "$profilePictureUrl"
}
''';
expect(User.fromJson(jsonStr), equals(user));
});
});
group('fromMap', () {
test('returns correct user from valid map', () {
final map = {
'id': userId,
'nom': nom,
'prenom': prenom,
'email': email,
'platform': platform,
'phoneNumber': phoneNumber,
'profilePictureUrl': profilePictureUrl,
};
expect(User.fromMap(map), equals(user));
});
test('handles null/missing values gracefully', () {
final map = {
'id': userId,
// Missing nom
// Missing prenom
// Missing email
// Missing platform
// Missing phoneNumber
// Missing profilePictureUrl
};
final userFromMap = User.fromMap(map);
expect(userFromMap.id, userId);
expect(userFromMap.nom, '');
expect(userFromMap.prenom, '');
expect(userFromMap.email, '');
expect(userFromMap.platform, '');
expect(userFromMap.phoneNumber, null);
expect(userFromMap.profilePictureUrl, null);
});
});
group('toJson', () {
test('returns correct json string', () {
final expectedJson =
'{"id":"$userId","nom":"$nom","prenom":"$prenom","email":"$email","profilePictureUrl":"$profilePictureUrl","phoneNumber":"$phoneNumber","platform":"$platform"}';
expect(user.toJson(), expectedJson);
});
});
group('toMap', () {
test('returns correct map', () {
final expectedMap = {
'id': userId,
'nom': nom,
'prenom': prenom,
'email': email,
'profilePictureUrl': profilePictureUrl,
'phoneNumber': phoneNumber,
'platform': platform,
};
expect(user.toMap(), expectedMap);
});
});
group('copyWith', () {
test('returns object with updated values', () {
const newNom = 'Smith';
final updatedUser = user.copyWith(nom: newNom);
expect(updatedUser.nom, newNom);
expect(updatedUser.prenom, prenom);
expect(updatedUser.email, email);
});
test('returns same object if no values provided', () {
final updatedUser = user.copyWith();
expect(updatedUser, equals(user));
});
});
});
}