tdd 진행
This commit is contained in:
@@ -0,0 +1,237 @@
|
||||
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); // 변경되지 않음
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user