앱 단위·화면·통합 테스트
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user