Passport Tier 팬덤 단위 · 활동 Badge · 진화 Emblem · Eclipse 참여 기록

This commit is contained in:
Sn-Kinos
2026-10-05 22:09:10 +09:00
parent 71ec17dc3c
commit cc0f2fb292
36 changed files with 877 additions and 81 deletions
+23
View File
@@ -296,6 +296,29 @@ void main() {
'작은팬덤',
]);
});
testWidgets('팬덤별 Passport Tier · 탈퇴 팬덤 보존 · Badge 를 보인다 (10/3 #10 · 별첨 1 ②-5)', (tester) async {
const tiers = [
PlanetTier(fandomName: '떠난팬덤', contributedPop: 900, passportTier: PassportTier.diamond, joined: false),
PlanetTier(fandomName: '다른팬덤', contributedPop: 100, passportTier: PassportTier.gold),
PlanetTier(fandomName: '내행성', contributedPop: 500, isPrimary: true),
];
const badges = [
MyBadge(id: 'activity_health', kind: 'activity', stage: 2, axis: 'health'),
MyBadge(id: 'founder100_x', kind: 'founder100', stage: 1, memberNo: 7),
MyBadge(id: 'evolution_x_2', kind: 'evolution', stage: 1, toStage: 2),
];
const screen = TierDetailScreen(tiers: tiers, badges: badges);
expect(screen.ordered.map((p) => p.fandomName).toList(), ['내행성', '다른팬덤', '떠난팬덤']);
await pumpWide(tester, screen);
expect(find.text('PASSPORT SILVER'), findsOneWidget);
expect(find.text('PASSPORT GOLD'), findsOneWidget);
expect(find.text('PASSPORT DIAMOND'), findsOneWidget);
await tester.scrollUntilVisible(find.text('BADGE'), 200);
expect(find.text('HEALTH · 2/7'), findsOneWidget);
expect(find.text('FIRST 100 · #007'), findsOneWidget);
expect(find.text('EVOLUTION · STAGE 2'), findsOneWidget);
});
});
group('프로필 수정 (F6 · 374:16164 · 374:15479)', () {
+13
View File
@@ -137,6 +137,19 @@ void main() {
expect(backend.payload, {'fandomId': 'target', 'scope': 'personal'});
expect(personal.items.single.amount, 37);
expect(personal.items.single.participationConfirmed, isFalse);
// PASSPORT Stamp 는 내 기록에서만 받는다(FX §5.2 · §7.2).
backend.response = {'items': [
{'id': 'e', 'kind': 'eclipse_success', 'occurredAt': '2026-09-23T00:00:00Z'},
{'id': 'v', 'kind': 'emblem_evolution', 'occurredAt': '2026-09-22T00:00:00Z', 'toStage': 3},
{'id': 'f', 'kind': 'badge_founder100', 'occurredAt': '2026-09-21T00:00:00Z', 'memberNo': 7},
], 'nextCursor': null};
final stamps = await repository.history(personal: true);
expect(stamps.items.map((i) => i.kind), [
PlanetHistoryKind.eclipseSuccess, PlanetHistoryKind.emblemEvolution, PlanetHistoryKind.founderBadge,
]);
expect(stamps.items[1].toStage, 3);
expect(stamps.items[2].memberNo, 7);
await expectLater(repository.history(), throwsStateError);
});