Files
2025-08-09 03:09:17 +09:00

238 lines
7.6 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:lanebow/models/member_model.dart';
void main() {
group('Member 모델 테스트', () {
test('fromJson 메서드가 JSON 데이터를 올바르게 변환해야 함', () {
// given
final json = {
'id': 'member_id_1',
'userId': 'user_id_1',
'clubId': 'club_id_1',
'name': '홍길동',
'email': 'hong@example.com',
'role': '회원',
'profileImage': 'https://example.com/profile.jpg',
'phone': '010-1234-5678',
'address': '서울시 강남구',
'joinDate': '2022-01-01T09:00:00.000Z',
'isActive': true,
'gender': '남성',
'memberType': '정회원',
'handicap': 10,
'status': '활동중',
'createdAt': '2022-01-01T09:00:00.000Z',
'updatedAt': '2022-02-01T15:30:00.000Z',
};
// when
final member = Member.fromJson(json);
// then
expect(member.id, 'member_id_1');
expect(member.userId, 'user_id_1');
expect(member.clubId, 'club_id_1');
expect(member.name, '홍길동');
expect(member.email, 'hong@example.com');
expect(member.role, '회원');
expect(member.profileImage, 'https://example.com/profile.jpg');
expect(member.phone, '010-1234-5678');
expect(member.address, '서울시 강남구');
expect(member.joinDate, DateTime.parse('2022-01-01T09:00:00.000Z'));
expect(member.isActive, true);
expect(member.gender, '남성');
expect(member.memberType, '정회원');
expect(member.handicap, 10);
expect(member.status, '활동중');
expect(member.createdAt, DateTime.parse('2022-01-01T09:00:00.000Z'));
expect(member.updatedAt, DateTime.parse('2022-02-01T15:30:00.000Z'));
});
test('fromJson 메서드가 일부 필드가 null인 JSON 데이터를 처리해야 함', () {
// given
final json = {
'id': 'member_id_1',
'userId': 'user_id_1',
'clubId': 'club_id_1',
'name': '홍길동',
'email': 'hong@example.com',
'isActive': true,
// 나머지 필드는 null 또는 생략
};
// when
final member = Member.fromJson(json);
// then
expect(member.id, 'member_id_1');
expect(member.userId, 'user_id_1');
expect(member.clubId, 'club_id_1');
expect(member.name, '홍길동');
expect(member.email, 'hong@example.com');
expect(member.role, null);
expect(member.profileImage, null);
expect(member.phone, null);
expect(member.address, null);
expect(member.joinDate, null);
expect(member.isActive, true);
expect(member.gender, null);
expect(member.memberType, null);
expect(member.handicap, null);
expect(member.status, null);
expect(member.createdAt, null);
expect(member.updatedAt, null);
});
test('fromJson 메서드가 필수 필드가 null인 경우 기본값을 설정해야 함', () {
// given
final json = {
// 필수 필드가 null이거나 누락된 경우
'id': null,
'userId': null,
'clubId': null,
'name': null,
'email': null,
'isActive': null,
};
// when
final member = Member.fromJson(json);
// then
expect(member.id, '');
expect(member.userId, '');
expect(member.clubId, '');
expect(member.name, '');
expect(member.email, '');
expect(member.isActive, true); // 기본값이 true로 설정되어야 함
});
test('handicap이 문자열로 제공될 때 int로 변환되어야 함', () {
// given
final json = {
'id': 'member_id_1',
'userId': 'user_id_1',
'clubId': 'club_id_1',
'name': '홍길동',
'email': 'hong@example.com',
'isActive': true,
'handicap': '15', // 문자열로 제공
};
// when
final member = Member.fromJson(json);
// then
expect(member.handicap, 15);
});
test('toJson 메서드가 Member 객체를 JSON으로 올바르게 변환해야 함', () {
// given
final member = Member(
id: 'member_id_1',
userId: 'user_id_1',
clubId: 'club_id_1',
name: '홍길동',
email: 'hong@example.com',
role: '회원',
profileImage: 'https://example.com/profile.jpg',
phone: '010-1234-5678',
address: '서울시 강남구',
joinDate: DateTime.parse('2022-01-01T09:00:00.000Z'),
isActive: true,
gender: '남성',
memberType: '정회원',
handicap: 10,
status: '활동중',
createdAt: DateTime.parse('2022-01-01T09:00:00.000Z'),
updatedAt: DateTime.parse('2022-02-01T15:30:00.000Z'),
);
// when
final json = member.toJson();
// then
expect(json['id'], 'member_id_1');
expect(json['userId'], 'user_id_1');
expect(json['clubId'], 'club_id_1');
expect(json['name'], '홍길동');
expect(json['email'], 'hong@example.com');
expect(json['role'], '회원');
expect(json['profileImage'], 'https://example.com/profile.jpg');
expect(json['phone'], '010-1234-5678');
expect(json['address'], '서울시 강남구');
expect(json['joinDate'], '2022-01-01T09:00:00.000Z');
expect(json['isActive'], true);
expect(json['gender'], '남성');
expect(json['memberType'], '정회원');
expect(json['handicap'], 10);
expect(json['status'], '활동중');
expect(json['createdAt'], '2022-01-01T09:00:00.000Z');
expect(json['updatedAt'], '2022-02-01T15:30:00.000Z');
});
test('toJson 메서드가 null 필드를 포함하여 JSON으로 변환해야 함', () {
// given
final member = Member(
id: 'member_id_1',
userId: 'user_id_1',
clubId: 'club_id_1',
name: '홍길동',
email: 'hong@example.com',
isActive: true,
// 나머지 필드는 null
);
// when
final json = member.toJson();
// then
expect(json['id'], 'member_id_1');
expect(json['userId'], 'user_id_1');
expect(json['clubId'], 'club_id_1');
expect(json['name'], '홍길동');
expect(json['email'], 'hong@example.com');
expect(json['role'], null);
expect(json['profileImage'], null);
expect(json['phone'], null);
expect(json['address'], null);
expect(json['joinDate'], null);
expect(json['isActive'], true);
expect(json['gender'], null);
expect(json['memberType'], null);
expect(json['handicap'], null);
expect(json['status'], null);
expect(json['createdAt'], null);
expect(json['updatedAt'], null);
});
test('copyWith 메서드가 특정 필드만 업데이트된 새 객체를 반환해야 함', () {
// given
final member = Member(
id: 'member_id_1',
userId: 'user_id_1',
clubId: 'club_id_1',
name: '홍길동',
email: 'hong@example.com',
isActive: true,
);
// when
final updatedMember = member.copyWith(
name: '김철수',
email: 'kim@example.com',
role: '관리자',
);
// then
expect(updatedMember.id, 'member_id_1'); // 변경되지 않음
expect(updatedMember.userId, 'user_id_1'); // 변경되지 않음
expect(updatedMember.clubId, 'club_id_1'); // 변경되지 않음
expect(updatedMember.name, '김철수'); // 변경됨
expect(updatedMember.email, 'kim@example.com'); // 변경됨
expect(updatedMember.role, '관리자'); // 변경됨
expect(updatedMember.isActive, true); // 변경되지 않음
});
});
}