Files
fanuzu/app/test/planet_hibernation_test.dart
T

39 lines
1.7 KiB
Dart

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:fancake/core/data/planet_visual_state.dart';
import 'package:fancake/core/ui/live_planet.dart';
void main() {
test('휴면은 FPI를 단말에서 추측하지 않고 명시적인 서버 상태만 읽는다', () {
expect(PlanetVisualState.fromDocument({'fpi': 0}).isHibernating, isFalse);
expect(PlanetVisualState.fromDocument({'isHibernating': 'true'}).isHibernating, isFalse);
expect(PlanetVisualState.fromDocument({'isHibernating': true}).isHibernating, isTrue);
});
testWidgets('서버 휴면에서 어두워지고 복귀 시 점진적으로 광량을 회복한다', (tester) async {
final states = StreamController<PlanetVisualState>.broadcast();
addTearDown(states.close);
await tester.pumpWidget(MaterialApp(home: Scaffold(body: LivePlanet25D(
fandomId: 'one', watch: (_) => states.stream,
image: 'assets/figma/planet-home.png', size: 200,
))));
states.add(const PlanetVisualState(stage: 1, isHibernating: true));
await tester.pump();
await tester.pump(const Duration(seconds: 2));
double light() => tester.widget<Opacity>(find.byKey(const ValueKey('planet-surface-light'))).opacity;
expect(light(), 0.35);
expect(find.bySemanticsLabel('Stage 1 · 시작 · 휴면 중'), findsOneWidget);
states.add(const PlanetVisualState(stage: 1));
await tester.pump();
await tester.pump();
await tester.pump(const Duration(seconds: 1));
expect(light(), greaterThan(0.35));
expect(light(), lessThan(1));
await tester.pump(const Duration(seconds: 1));
expect(light(), 1);
await tester.pumpWidget(const SizedBox());
expect(states.hasListener, isFalse);
});
}