function_upgrade_ui_preview_test.dart 5.42 KB
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:one_key/models/seller_version_model.dart';
import 'package:one_key/provider/collect_store_provider.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:provider/provider.dart';

class _PreviewCollectStoreProvider extends CollectStoreProvider {
  @override
  Future<List<SellerVersionSunModel>?> getFunctionUpgradeList(
    BuildContext context, {
    bool showLoading = true,
  }) async {
    return <SellerVersionSunModel>[];
  }
}

Widget _buildPreviewApp(
  _PreviewCollectStoreProvider provider,
  void Function(BuildContext context) openDialog,
) {
  return ScreenUtilInit(
    designSize: const Size(750, 1334),
    minTextAdapt: true,
    splitScreenMode: true,
    builder: (context, child) {
      return ChangeNotifierProvider<CollectStoreProvider>.value(
        value: provider,
        child: MaterialApp(
          home: Scaffold(
            backgroundColor: Colors.white,
            body: Center(
              child: Builder(
                builder: (context) {
                  return TextButton(
                    onPressed: () => openDialog(context),
                    child: const Text('打开弹窗'),
                  );
                },
              ),
            ),
          ),
        ),
      );
    },
  );
}

void _setPhoneViewport(WidgetTester tester) {
  tester.view.physicalSize = const Size(1080, 2340);
  tester.view.devicePixelRatio = 1.0;
  const MethodChannel statusBarChannel =
      MethodChannel('plugins.sameer.com/statusbar');
  tester.binding.defaultBinaryMessenger.setMockMethodCallHandler(
    statusBarChannel,
    (call) async => null,
  );
  addTearDown(() {
    tester.view.physicalSize = const Size(800, 600);
    tester.view.devicePixelRatio = 1.0;
    tester.binding.defaultBinaryMessenger.setMockMethodCallHandler(
      statusBarChannel,
      null,
    );
  });
}

void main() {
  testWidgets('导出未购买和跳转预览图', (tester) async {
    _setPhoneViewport(tester);
    final provider = _PreviewCollectStoreProvider();
    await tester.pumpWidget(
      _buildPreviewApp(provider, (context) {
        DialogUtil.showSellerVersionBuyDialog(context, '宴会管理', (_) {});
      }),
    );
    await tester.tap(find.text('打开弹窗'));
    await tester.pumpAndSettle();
    await expectLater(
      find.byType(MaterialApp),
      matchesGoldenFile('goldens/preview_buy_dialog.png'),
    );

    await tester.tap(find.text('去购买'));
    await tester.pump();
    await tester.pump(const Duration(milliseconds: 600));
    await tester.pump(const Duration(milliseconds: 200));
    await expectLater(
      find.byType(MaterialApp),
      matchesGoldenFile('goldens/preview_upgrade_page.png'),
    );
  });

  testWidgets('导出普通版模块过期预览图', (tester) async {
    _setPhoneViewport(tester);
    final provider = _PreviewCollectStoreProvider();
    final showData = <SellerVersionSunModel>[
      SellerVersionSunModel(
        vid: '12',
        vname: '宴会管理',
        edate: '1798761600',
      ),
    ];
    await tester.pumpWidget(
      _buildPreviewApp(provider, (context) {
        DialogUtil.showSellerVersionEdateDialog(context, showData, (_) {});
      }),
    );
    await tester.tap(find.text('打开弹窗'));
    await tester.pumpAndSettle();
    await expectLater(
      find.byType(MaterialApp),
      matchesGoldenFile('goldens/preview_expire_dialog.png'),
    );
  });

  testWidgets('导出极速版模块过期预览图', (tester) async {
    _setPhoneViewport(tester);
    final provider = _PreviewCollectStoreProvider();
    await tester.pumpWidget(
      _buildPreviewApp(provider, (context) {
        DialogUtil.cupertinoAlertSellerEdateDialogSim(
          context,
          title: '温馨提示',
          content: '2026-10-01',
          rCallback: () {},
        );
      }),
    );
    await tester.tap(find.text('打开弹窗'));
    await tester.pumpAndSettle();
    await expectLater(
      find.byType(MaterialApp),
      matchesGoldenFile('goldens/preview_sim_expire_dialog.png'),
    );
  });

  testWidgets('导出普通版店铺过期预览图', (tester) async {
    _setPhoneViewport(tester);
    final provider = _PreviewCollectStoreProvider();
    await tester.pumpWidget(
      _buildPreviewApp(provider, (context) {
        DialogUtil.cupertinoAlertSellerHasEdateDialog(
          context,
          title: '温馨提示',
          lCallback: () {},
          rCallback: () {},
        );
      }),
    );
    await tester.tap(find.text('打开弹窗'));
    await tester.pumpAndSettle();
    await expectLater(
      find.byType(MaterialApp),
      matchesGoldenFile('goldens/preview_store_expire_dialog.png'),
    );
  });

  testWidgets('导出极速版店铺过期预览图', (tester) async {
    _setPhoneViewport(tester);
    final provider = _PreviewCollectStoreProvider();
    await tester.pumpWidget(
      _buildPreviewApp(provider, (context) {
        DialogUtil.cupertinoAlertSellerHasEdateDialogSim(
          context,
          title: '温馨提示',
          lCallback: () {},
          rCallback: () {},
        );
      }),
    );
    await tester.tap(find.text('打开弹窗'));
    await tester.pumpAndSettle();
    await expectLater(
      find.byType(MaterialApp),
      matchesGoldenFile('goldens/preview_sim_store_expire_dialog.png'),
    );
  });
}