Zap·후원 FPI 귀속 · 이클립스 방어 Shake 전용 · 가입 팬덤만 방어

This commit is contained in:
Sn-Kinos
2026-10-05 21:53:20 +09:00
parent 17c658b272
commit 71ec17dc3c
21 changed files with 196 additions and 134 deletions
+14 -9
View File
@@ -1,3 +1,5 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:sensors_plus/sensors_plus.dart' show SensorInterval;
@@ -24,6 +26,9 @@ Future<void> _pump(WidgetTester tester, Widget home) async {
}
}
/// 가짜 가속도 센서 — 흔들기 한 번마다 이벤트 하나.
final _shakes = StreamController<DateTime>.broadcast();
void main() {
group('흔들기 판정 (iOS 16 · Galaxy 63 실기기 편차)', () {
test('표본 주기를 명시한다 — 기본 200ms(iOS 5Hz)를 쓰지 않는다', () {
@@ -147,10 +152,10 @@ void main() {
),
);
addTearDown(repo.dispose);
await _pump(tester, EclipseDefendScreen(repository: repo, fandomId: 'bts'));
expect(find.text('휴대폰을 흔들어\n행성 운석 충돌을 막으세요!'), findsOneWidget);
await _pump(tester, EclipseDefendScreen(repository: repo, fandomId: 'bts', shakes: () => _shakes.stream));
expect(find.text('휴대폰을 흔들어\n이클립스를 막으세요!'), findsOneWidget);
expect(find.textContaining('이클립스 발생 남은 시간'), findsOneWidget);
expect(find.text('흔들기 어려우면 눌러서 참여'), findsNothing);
expect(find.text('이 기기는 흔들기 방어를 지원하지 않아요'), findsNothing);
});
testWidgets('발생 3초 전부터 오버레이 카운트다운', (tester) async {
@@ -162,8 +167,8 @@ void main() {
),
);
addTearDown(repo.dispose);
await _pump(tester, EclipseDefendScreen(repository: repo, fandomId: 'bts'));
expect(find.text('행성 운석 충돌이\n시작됩니다!'), findsOneWidget);
await _pump(tester, EclipseDefendScreen(repository: repo, fandomId: 'bts', shakes: () => _shakes.stream));
expect(find.text('행성에 이클립스가\n시작됩니다!'), findsOneWidget);
expect(find.text('3'), findsOneWidget);
});
@@ -177,12 +182,12 @@ void main() {
),
);
addTearDown(repo.dispose);
await _pump(tester, EclipseDefendScreen(repository: repo, fandomId: 'bts'));
await _pump(tester, EclipseDefendScreen(repository: repo, fandomId: 'bts', shakes: () => _shakes.stream));
expect(find.textContaining('초간 휴대폰을 흔들어'), findsOneWidget);
expect(find.text('내 유효 Shake 0 / 60회'), findsOneWidget);
expect(find.text('유효 참여 3 / 10명'), findsOneWidget);
await tester.tap(find.text('흔들기 어려우면 눌러서 참여'));
_shakes.add(DateTime.now());
for (var i = 0; i < 8; i++) {
await tester.pump(const Duration(milliseconds: 120));
}
@@ -196,8 +201,8 @@ void main() {
state: eclipseFixture(scheduled: true, startAt: startAt, endsAt: endsAt),
);
addTearDown(repo.dispose);
await _pump(tester, EclipseDefendScreen(repository: repo, fandomId: 'bts'));
await tester.tap(find.text('흔들기 어려우면 눌러서 참여'));
await _pump(tester, EclipseDefendScreen(repository: repo, fandomId: 'bts', shakes: () => _shakes.stream));
_shakes.add(DateTime.now());
for (var i = 0; i < 8; i++) {
await tester.pump(const Duration(milliseconds: 120));
}