tdd 진행

This commit is contained in:
2025-08-09 03:09:17 +09:00
parent ed8c7eacba
commit 6033d59590
74 changed files with 17804 additions and 395 deletions
+213
View File
@@ -0,0 +1,213 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:lanebow/models/score_model.dart';
void main() {
group('Score 모델 테스트', () {
test('fromJson 메서드가 JSON 데이터를 올바르게 변환해야 함', () {
// given
final json = {
'id': 'test_id',
'memberId': 'test_member_id',
'eventId': 'test_event_id',
'clubId': 'test_club_id',
'frames': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
'totalScore': 55,
'date': '2023-01-01T12:00:00.000Z',
'notes': '테스트 노트',
'participantName': '테스트 참가자',
};
// when
final score = Score.fromJson(json);
// then
expect(score.id, 'test_id');
expect(score.memberId, 'test_member_id');
expect(score.eventId, 'test_event_id');
expect(score.clubId, 'test_club_id');
expect(score.frames, [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]);
expect(score.totalScore, 55);
expect(score.date, DateTime.parse('2023-01-01T12:00:00.000Z'));
expect(score.notes, '테스트 노트');
expect(score.participantName, '테스트 참가자');
});
test('fromJson 메서드가 일부 필드가 null인 JSON 데이터를 처리해야 함', () {
// given
final json = {
'id': 'test_id',
'memberId': 'test_member_id',
'eventId': 'test_event_id',
'clubId': 'test_club_id',
'frames': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
'totalScore': 55,
'date': '2023-01-01T12:00:00.000Z',
// notes와 participantName은 생략
};
// when
final score = Score.fromJson(json);
// then
expect(score.id, 'test_id');
expect(score.memberId, 'test_member_id');
expect(score.eventId, 'test_event_id');
expect(score.clubId, 'test_club_id');
expect(score.frames, [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]);
expect(score.totalScore, 55);
expect(score.date, DateTime.parse('2023-01-01T12:00:00.000Z'));
expect(score.notes, null);
expect(score.participantName, null);
});
test('fromJson 메서드가 필수 필드가 null인 경우 기본값을 설정해야 함', () {
// given
final json = {
// 필수 필드가 null이거나 누락된 경우
'id': null,
'memberId': null,
'eventId': null,
'clubId': null,
'frames': null,
'totalScore': null,
'date': null,
};
// when
final score = Score.fromJson(json);
// then
expect(score.id, '');
expect(score.memberId, '');
expect(score.eventId, '');
expect(score.clubId, '');
expect(score.frames, []);
expect(score.totalScore, 0);
expect(score.date.year, DateTime.now().year); // 현재 날짜로 설정되었는지 확인
expect(score.notes, null);
expect(score.participantName, null);
});
test('toJson 메서드가 Score 객체를 JSON으로 올바르게 변환해야 함', () {
// given
final score = Score(
id: 'test_id',
memberId: 'test_member_id',
eventId: 'test_event_id',
clubId: 'test_club_id',
frames: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
totalScore: 55,
date: DateTime.parse('2023-01-01T12:00:00.000Z'),
notes: '테스트 노트',
participantName: '테스트 참가자',
);
// when
final json = score.toJson();
// then
expect(json['id'], 'test_id');
expect(json['memberId'], 'test_member_id');
expect(json['eventId'], 'test_event_id');
expect(json['clubId'], 'test_club_id');
expect(json['frames'], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]);
expect(json['totalScore'], 55);
expect(json['date'], '2023-01-01T12:00:00.000Z');
expect(json['notes'], '테스트 노트');
expect(json['participantName'], '테스트 참가자');
});
});
group('ScoreStatistics 모델 테스트', () {
test('fromJson 메서드가 JSON 데이터를 올바르게 변환해야 함', () {
// given
final json = {
'average': 150.5,
'highScore': 200,
'lowScore': 100,
'gamesPlayed': 10,
'additionalStats': {
'strikes': 5,
'spares': 3,
},
};
// when
final stats = ScoreStatistics.fromJson(json);
// then
expect(stats.average, 150.5);
expect(stats.highScore, 200);
expect(stats.lowScore, 100);
expect(stats.gamesPlayed, 10);
expect(stats.additionalStats?['strikes'], 5);
expect(stats.additionalStats?['spares'], 3);
});
test('fromJson 메서드가 average가 int 타입인 경우도 처리해야 함', () {
// given
final json = {
'average': 150, // int 타입
'highScore': 200,
'lowScore': 100,
'gamesPlayed': 10,
};
// when
final stats = ScoreStatistics.fromJson(json);
// then
expect(stats.average, 150.0); // double 타입으로 변환되어야 함
expect(stats.highScore, 200);
expect(stats.lowScore, 100);
expect(stats.gamesPlayed, 10);
expect(stats.additionalStats, null);
});
test('fromJson 메서드가 필수 필드가 null인 경우 기본값을 설정해야 함', () {
// given
final json = {
// 필수 필드가 null이거나 누락된 경우
'average': null,
'highScore': null,
'lowScore': null,
'gamesPlayed': null,
};
// when
final stats = ScoreStatistics.fromJson(json);
// then
expect(stats.average, 0.0);
expect(stats.highScore, 0);
expect(stats.lowScore, 0);
expect(stats.gamesPlayed, 0);
expect(stats.additionalStats, null);
});
test('toJson 메서드가 ScoreStatistics 객체를 JSON으로 올바르게 변환해야 함', () {
// given
final stats = ScoreStatistics(
average: 150.5,
highScore: 200,
lowScore: 100,
gamesPlayed: 10,
additionalStats: {
'strikes': 5,
'spares': 3,
},
);
// when
final json = stats.toJson();
// then
expect(json['average'], 150.5);
expect(json['highScore'], 200);
expect(json['lowScore'], 100);
expect(json['gamesPlayed'], 10);
expect(json['additionalStats']?['strikes'], 5);
expect(json['additionalStats']?['spares'], 3);
});
});
}