Files
2025-10-29 00:25:03 +09:00

84 lines
2.4 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:lanebow/models/public_event.dart';
import 'package:lanebow/models/public_participant.dart';
void main() {
group('PublicEvent.fromJson', () {
test('parses minimal and coerces types', () {
final e = PublicEvent.fromJson({
'id': 10,
'title': 'Open',
'gameCount': '5',
});
expect(e.id, '10');
expect(e.title, 'Open');
expect(e.gameCount, 5);
expect(e.description, isNull);
});
test('parses dates and optionals', () {
final e = PublicEvent.fromJson({
'id': 'A1',
'title': 'E',
'startDate': '2024-01-01T10:00:00Z',
'registrationDeadline': '2024-01-02T10:00:00Z',
'participantFee': '10000',
'maxParticipants': '30',
});
expect(e.id, 'A1');
expect(e.startDate, isNotNull);
expect(e.registrationDeadline, isNotNull);
expect(e.participantFee, 10000);
expect(e.maxParticipants, 30);
});
});
group('PublicParticipant.fromJson', () {
test('handles numeric scores and fills length to gameCount', () {
final p = PublicParticipant.fromJson({
'participantId': 7,
'name': 'Kim',
'scores': [120, 130],
'handicap': 10,
}, gameCount: 3);
expect(p.participantId, '7');
expect(p.name, 'Kim');
expect(p.rawScores, [120, 130, null]);
expect(p.handicaps, [0, 0, 0]);
});
test('handles object scores with handicap', () {
final p = PublicParticipant.fromJson({
'participantId': '9',
'name': 'Lee',
'scores': [
{'score': 200, 'handicap': 0},
{'score': '150', 'handicap': '5'},
null
],
}, gameCount: 3);
expect(p.rawScores, [200, 150, null]);
expect(p.handicaps, [0, 5, 0]);
});
test('coerces fields and defaults', () {
final p = PublicParticipant.fromJson({
'id': '11',
'name': null,
'average': '192.5',
'memberType': 'guest',
'status': 'pending',
'paymentStatus': 'unpaid',
'scores': [],
}, gameCount: 2);
expect(p.participantId, '11');
expect(p.name, '이름없음');
expect(p.average, 192.5);
expect(p.isGuest, false); // isGuest는 명시 true일 때만 처리
expect(p.rawScores, [null, null]);
expect(p.handicaps, [0, 0]);
});
});
}