140 lines
3.9 KiB
Dart
140 lines
3.9 KiB
Dart
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));
|
|
});
|
|
});
|
|
});
|
|
}
|