// 功能:本人设备搜索、类型筛选和未知状态展示;版本:1.0.0。 import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:user_app/domain/models/client_models.dart'; import 'package:user_app/domain/models/device_group.dart'; import 'package:user_app/ui/features/profile/devices_page.dart'; import '../support/a1_fixture.dart'; class _DeviceFixture extends A1FixtureRepository { @override Future> devices() async => [ ClientRecord(identity: 'valve', title: '厨房阀门', subtitle: 'V001', raw: {'kind': 'valve'}), ClientRecord(identity: 'alarm', title: '厨房报警器', subtitle: 'A002', raw: {'kind': 'alarm'}), ]; @override Future> deviceGroups() async => const [ DeviceGroup(identity: 'kitchen', name: '厨房组', sortNo: 0, deviceIdentities: {'valve', 'alarm'}), ]; } void main() { testWidgets('按类型及编号筛选,未知状态不冒充零告警或离线', (tester) async { await tester.pumpWidget(MaterialApp(home: DevicesPage(repository: _DeviceFixture()))); await tester.pumpAndSettle(); expect(find.text('—'), findsNWidgets(3)); expect(find.text('厨房组'), findsOneWidget); expect(find.text('厨房阀门'), findsOneWidget); await tester.tap(find.text('报警器')); await tester.pumpAndSettle(); expect(find.text('厨房阀门'), findsNothing); expect(find.text('厨房报警器'), findsOneWidget); await tester.enterText(find.byType(TextField), 'V001'); await tester.pumpAndSettle(); expect(find.text('没有符合条件的设备'), findsOneWidget); await tester.tap(find.text('全部')); await tester.pumpAndSettle(); expect(find.text('厨房阀门'), findsOneWidget); await tester.tap(find.text('控制')); await tester.pumpAndSettle(); expect(find.text('该功能暂未开放,目前无法使用。'), findsOneWidget); }); for (final width in [320.0, 390.0, 430.0]) { testWidgets('设备页$width宽度放大字体无溢出', (tester) async { tester.view.physicalSize = Size(width, 844); tester.view.devicePixelRatio = 1; addTearDown(tester.view.resetPhysicalSize); addTearDown(tester.view.resetDevicePixelRatio); await tester.pumpWidget( MaterialApp( builder: (context, child) => MediaQuery( data: MediaQuery.of(context).copyWith(textScaler: const TextScaler.linear(1.3)), child: child!, ), home: DevicesPage(repository: _DeviceFixture()), ), ); await tester.pumpAndSettle(); expect(tester.takeException(), isNull); }); } }