39 lines
1.7 KiB
Dart
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);
|
|
});
|
|
}
|