Files
Ichino/test/map_traverse_page_test.dart
T
Cookiues 0808e367f7 feat: 风险页新增数值修改、一键跑图与万花筒专区
- 修改总 Rating:只写 playerRating 与 userRating.rating,钳 0~99999,
  每首歌各自的 ratingList 原样带回
- 添加舞里程(UserDetail.point):完整 int32 区间,支持累加与直接设定,
  允许负值即扣减
- 一键跑图:isClear/isComplete 在客户端是从 distance 派生的,单发 flag 会被
  冲掉,故把 distance 推过 End 里程针;unlockFlag 语义是反的
- 万花筒专区:发现门与获取钥匙落在 userKaleidxScopeList 同一行的两个布尔位,
  钥匙不走 userItemList;上行是整行替换,所以先读回原行再叠加
- 旅行伙伴:修正误导性的示例 ID 1001(合法是三位数,表里没有的 ID 服务器照收
  但客户端静默跳过),编组槽位可设定等级,上传后回读复查以区分失败原因
- 补 MIT 许可证
2026-09-27 01:49:55 +08:00

89 lines
2.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:ichino/config/strings.dart';
import 'package:ichino/config/title_server_config.dart';
import 'package:ichino/pages/map_traverse_page.dart';
import 'package:shared_preferences/shared_preferences.dart';
Future<void> _pumpPage(WidgetTester tester, {required bool loggedIn}) async {
SharedPreferences.setMockInitialValues({});
await TitleServerConfigHolder().update(
const TitleServerConfig(
titleServerUrl: 'http://127.0.0.1:9999',
aesKey: '0123456789abcdef',
aesIv: '0123456789abcdef',
clientId: 'A63E01C2805',
),
);
tester.view.physicalSize = const Size(420, 1600);
tester.view.devicePixelRatio = 1.0;
addTearDown(tester.view.reset);
await tester.pumpWidget(
MaterialApp(
home: MapTraversePage(
userId: 42,
cookies: 'JSESSIONID=X',
loginDateTime: loggedIn ? 1 : null,
loginId: loggedIn ? 7 : null,
onExitToTitle: () async {},
),
),
);
await tester.pump();
}
Finder _runFinder(WidgetTester tester) => find.ancestor(
of: find.text(AppStrings.mapRun),
matching: find.byType(FilledButton),
);
void main() {
testWidgets('渲染区域 ID 输入与收藏品限制说明,且无溢出', (tester) async {
await _pumpPage(tester, loggedIn: true);
expect(tester.takeException(), isNull);
expect(find.text(AppStrings.mapIdLabel), findsOneWidget);
expect(find.text(AppStrings.mapCollectiblesNotice), findsOneWidget);
expect(find.text(AppStrings.mapNoData), findsOneWidget);
});
testWidgets('添加区域 ID 后进入待处理列表,重复添加被拒', (tester) async {
await _pumpPage(tester, loggedIn: true);
await tester.enterText(find.byType(TextField), '550001');
await tester.tap(find.text(AppStrings.listAddButton));
await tester.pump();
expect(find.text('#550001'), findsOneWidget);
expect(find.text(AppStrings.mapNeedMapId), findsNothing);
await tester.enterText(find.byType(TextField), '550001');
await tester.tap(find.text(AppStrings.listAddButton));
await tester.pump();
expect(find.text(AppStrings.listDuplicate), findsOneWidget);
expect(find.text('#550001'), findsOneWidget);
});
testWidgets('列表为空时执行被拦下', (tester) async {
await _pumpPage(tester, loggedIn: true);
await tester.tap(_runFinder(tester));
await tester.pump();
expect(find.text(AppStrings.mapNeedMapId), findsOneWidget);
});
testWidgets('未登录时禁用执行', (tester) async {
await _pumpPage(tester, loggedIn: false);
expect(tester.takeException(), isNull);
expect(find.text(AppStrings.mapNotLoggedIn), findsOneWidget);
final run = tester.widget<FilledButton>(_runFinder(tester));
expect(run.onPressed, isNull);
});
}