function_upgrade_dialog_test.dart 4.23 KB
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.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 _FakeCollectStoreProvider extends CollectStoreProvider {
  @override
  Future<List<SellerVersionSunModel>?> getFunctionUpgradeList(
    BuildContext context, {
    bool showLoading = true,
  }) async {
    return <SellerVersionSunModel>[];
  }
}

Widget _buildTestApp(
  _FakeCollectStoreProvider 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(
            body: Center(
              child: Builder(
                builder: (context) {
                  return TextButton(
                    onPressed: () => openDialog(context),
                    child: const Text('打开弹窗'),
                  );
                },
              ),
            ),
          ),
        ),
      );
    },
  );
}

Future<void> _tapAndOpenUpgrade(WidgetTester tester) async {
  await tester.tap(find.text('打开弹窗'));
  await tester.pumpAndSettle();
  expect(find.text('去购买'), findsOneWidget);

  await tester.tap(find.text('去购买'));
  await tester.pump();
  await tester.pump(const Duration(milliseconds: 600));
  expect(find.text('功能升级'), findsOneWidget);
}

void _setPhoneViewport(WidgetTester tester) {
  tester.view.physicalSize = const Size(1080, 2340);
  tester.view.devicePixelRatio = 1.0;
  addTearDown(() {
    tester.view.physicalSize = const Size(800, 600);
    tester.view.devicePixelRatio = 1.0;
  });
}

void main() {
  testWidgets('未购买模块弹窗可以去购买', (tester) async {
    _setPhoneViewport(tester);
    final provider = _FakeCollectStoreProvider();
    await tester.pumpWidget(
      _buildTestApp(provider, (context) {
        DialogUtil.showSellerVersionBuyDialog(context, '宴会管理', (_) {});
      }),
    );
    await _tapAndOpenUpgrade(tester);
  });

  testWidgets('普通版模块过期弹窗可以去购买', (tester) async {
    _setPhoneViewport(tester);
    final provider = _FakeCollectStoreProvider();
    final showData = <SellerVersionSunModel>[
      SellerVersionSunModel(
        vid: '12',
        vname: '宴会管理',
        edate: '1798761600',
      ),
    ];
    await tester.pumpWidget(
      _buildTestApp(provider, (context) {
        DialogUtil.showSellerVersionEdateDialog(context, showData, (_) {});
      }),
    );
    await _tapAndOpenUpgrade(tester);
  });

  testWidgets('极速版模块过期弹窗可以去购买', (tester) async {
    _setPhoneViewport(tester);
    final provider = _FakeCollectStoreProvider();
    await tester.pumpWidget(
      _buildTestApp(provider, (context) {
        DialogUtil.cupertinoAlertSellerEdateDialogSim(
          context,
          title: '温馨提示',
          content: '2026-10-01',
          rCallback: () {},
        );
      }),
    );
    await _tapAndOpenUpgrade(tester);
  });

  testWidgets('普通版店铺过期弹窗可以去购买', (tester) async {
    _setPhoneViewport(tester);
    final provider = _FakeCollectStoreProvider();
    await tester.pumpWidget(
      _buildTestApp(provider, (context) {
        DialogUtil.cupertinoAlertSellerHasEdateDialog(
          context,
          title: '温馨提示',
          lCallback: () {},
          rCallback: () {},
        );
      }),
    );
    await _tapAndOpenUpgrade(tester);
  });

  testWidgets('极速版店铺过期弹窗可以去购买', (tester) async {
    _setPhoneViewport(tester);
    final provider = _FakeCollectStoreProvider();
    await tester.pumpWidget(
      _buildTestApp(provider, (context) {
        DialogUtil.cupertinoAlertSellerHasEdateDialogSim(
          context,
          title: '温馨提示',
          lCallback: () {},
          rCallback: () {},
        );
      }),
    );
    await _tapAndOpenUpgrade(tester);
  });
}