퀘스트 제목 다국어 · HOME 다시 읽기 · 내 퀘스트 검토 중·반려됨 구분

This commit is contained in:
Sn-Kinos
2026-10-06 01:22:28 +09:00
parent cf3dd06774
commit 83d9c1e8d4
10 changed files with 139 additions and 26 deletions
@@ -0,0 +1,37 @@
import 'package:fancake/features/quest/quest_data.dart';
import 'package:fancake/features/quest/widgets/quest_card_tile.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
/// 10/6 실기기 4-2 — 「내 퀘스트」 카드가 검수 중 · 반려를 공개된 것과 구분한다.
void main() {
QuestCard mine(String state) => QuestCard(
id: 'q',
title: '걷기',
categoryName: '건강',
author: QuestAuthor.user,
stage: QuestStage.mine,
goal: 1000,
progress: 0,
rewardPop: 10,
participants: 0,
publishState: state,
);
Future<void> pump(WidgetTester t, QuestCard card) => t.pumpWidget(
MaterialApp(
home: Scaffold(
body: QuestCardTile(card: card, onOpen: () {}, onAction: () {}),
),
),
);
testWidgets('검수 중 · 반려 · 공개', (t) async {
await pump(t, mine('review'));
expect(find.text('검토 중'), findsOneWidget);
await pump(t, mine('rejected'));
expect(find.text('반려됨'), findsOneWidget);
await pump(t, mine('published'));
expect(find.text(QuestStage.mine.buttonLabel), findsOneWidget);
});
}
+17 -1
View File
@@ -1,5 +1,6 @@
import 'package:fancake/features/quest/quest_data.dart';
import 'package:fancake/features/quest/quest_repository_firestore.dart' show questToday;
import 'package:cloud_firestore/cloud_firestore.dart' show Timestamp;
import 'package:fancake/features/quest/quest_repository_firestore.dart' show questTitle, questToday;
import 'package:fancake/features/quest/widgets/quest_card_tile.dart' show questImage;
import 'package:flutter_test/flutter_test.dart';
@@ -50,4 +51,19 @@ void main() {
);
expect(questImage(card), 'assets/figma/quest-img-bolt.png');
});
// 10/6 실기기 — 운영 Quest 제목은 언어별 지도라 HOME 카드 제목이 비었다. 타임어택은 회차 제목이 먼저다.
test('Quest 제목 — 문자열 · 언어별 지도(앱 언어 → ko) · 열린 타임어택 회차 제목', () {
expect(questTitle({'title': '만보기'}), '만보기');
expect(questTitle({'title': {'en': 'Stream', 'ko': '스트리밍'}}), '스트리밍');
expect(questTitle({'title': {'en': 'Stream'}}), 'Stream');
final round = {
'roundId': 'r1',
'title': '긴급 돌발',
'activeFrom': Timestamp.fromDate(DateTime.now().subtract(const Duration(minutes: 5))),
'activeTo': Timestamp.fromDate(DateTime.now().add(const Duration(minutes: 5))),
};
expect(questTitle({'title': {'ko': '스트리밍'}, 'timeAttack': round}), '긴급 돌발');
expect(questTitle({'title': {'ko': '스트리밍'}, 'timeAttack': {...round, 'title': ''}}), '스트리밍');
});
}