Tests for UserEntity, UserModel, and TokenModel covering serialization, parsing, and equality.
139 lines
3.9 KiB
Dart
139 lines
3.9 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:agenda_tasks/features/auth/data/models/user_model.dart';
|
|
import 'package:agenda_tasks/features/auth/domain/entities/user_entity.dart';
|
|
|
|
void main() {
|
|
group('UserModel', () {
|
|
final testCreatedAt = DateTime(2026, 1, 1, 10, 30, 0);
|
|
|
|
group('fromJson', () {
|
|
test('should parse complete JSON correctly', () {
|
|
final json = {
|
|
'id': 'user-123',
|
|
'email': 'test@example.com',
|
|
'name': 'Test User',
|
|
'created_at': '2026-01-01T10:30:00.000',
|
|
};
|
|
|
|
final user = UserModel.fromJson(json);
|
|
|
|
expect(user.id, 'user-123');
|
|
expect(user.email, 'test@example.com');
|
|
expect(user.name, 'Test User');
|
|
expect(user.createdAt, testCreatedAt);
|
|
});
|
|
|
|
test('should parse JSON without created_at', () {
|
|
final json = {
|
|
'id': 'user-123',
|
|
'email': 'test@example.com',
|
|
'name': 'Test User',
|
|
};
|
|
|
|
final user = UserModel.fromJson(json);
|
|
|
|
expect(user.id, 'user-123');
|
|
expect(user.email, 'test@example.com');
|
|
expect(user.name, 'Test User');
|
|
expect(user.createdAt, isNull);
|
|
});
|
|
|
|
test('should parse JSON with null created_at', () {
|
|
final json = {
|
|
'id': 'user-123',
|
|
'email': 'test@example.com',
|
|
'name': 'Test User',
|
|
'created_at': null,
|
|
};
|
|
|
|
final user = UserModel.fromJson(json);
|
|
|
|
expect(user.createdAt, isNull);
|
|
});
|
|
});
|
|
|
|
group('toJson', () {
|
|
test('should serialize to JSON correctly with all fields', () {
|
|
final user = UserModel(
|
|
id: 'user-123',
|
|
email: 'test@example.com',
|
|
name: 'Test User',
|
|
createdAt: testCreatedAt,
|
|
);
|
|
|
|
final json = user.toJson();
|
|
|
|
expect(json['id'], 'user-123');
|
|
expect(json['email'], 'test@example.com');
|
|
expect(json['name'], 'Test User');
|
|
expect(json['created_at'], isNotNull);
|
|
});
|
|
|
|
test('should serialize to JSON with null created_at', () {
|
|
const user = UserModel(
|
|
id: 'user-123',
|
|
email: 'test@example.com',
|
|
name: 'Test User',
|
|
);
|
|
|
|
final json = user.toJson();
|
|
|
|
expect(json['id'], 'user-123');
|
|
expect(json['email'], 'test@example.com');
|
|
expect(json['name'], 'Test User');
|
|
expect(json['created_at'], isNull);
|
|
});
|
|
});
|
|
|
|
group('fromEntity', () {
|
|
test('should create UserModel from UserEntity with all fields', () {
|
|
final entity = UserEntity(
|
|
id: 'entity-123',
|
|
email: 'entity@example.com',
|
|
name: 'Entity User',
|
|
createdAt: testCreatedAt,
|
|
);
|
|
|
|
final model = UserModel.fromEntity(entity);
|
|
|
|
expect(model.id, entity.id);
|
|
expect(model.email, entity.email);
|
|
expect(model.name, entity.name);
|
|
expect(model.createdAt, entity.createdAt);
|
|
});
|
|
|
|
test('should create UserModel from UserEntity without createdAt', () {
|
|
const entity = UserEntity(
|
|
id: 'entity-123',
|
|
email: 'entity@example.com',
|
|
name: 'Entity User',
|
|
);
|
|
|
|
final model = UserModel.fromEntity(entity);
|
|
|
|
expect(model.id, entity.id);
|
|
expect(model.email, entity.email);
|
|
expect(model.name, entity.name);
|
|
expect(model.createdAt, isNull);
|
|
});
|
|
});
|
|
|
|
group('round-trip serialization', () {
|
|
test('should maintain data after fromJson -> toJson', () {
|
|
final originalJson = {
|
|
'id': 'user-123',
|
|
'email': 'test@example.com',
|
|
'name': 'Test User',
|
|
};
|
|
|
|
final user = UserModel.fromJson(originalJson);
|
|
final resultJson = user.toJson();
|
|
|
|
expect(resultJson['id'], originalJson['id']);
|
|
expect(resultJson['email'], originalJson['email']);
|
|
expect(resultJson['name'], originalJson['name']);
|
|
});
|
|
});
|
|
});
|
|
}
|