AgendaTasks/test/features/auth/data/models/user_model_test.dart
m3mo 329ea29966 Add unit tests for auth feature
Tests for UserEntity, UserModel, and TokenModel covering
serialization, parsing, and equality.
2026-02-03 19:45:17 +01:00

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']);
});
});
});
}