kirakira/test/widget_test.dart

48 lines
1.6 KiB
Dart
Raw Normal View History

import "dart:io";
2024-02-17 20:32:01 +05:30
import "package:app_links_platform_interface/app_links_platform_interface.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:flutter_test/flutter_test.dart";
import "package:hive_flutter/hive_flutter.dart";
2024-02-17 20:32:01 +05:30
import "package:smol_mail/data/providers/providers.dart";
import "package:smol_mail/presentation/app_widget.dart";
import "package:smol_mail/smol/store.dart";
2024-02-17 20:32:01 +05:30
late final SmolStore store;
2024-02-17 20:32:01 +05:30
// AppWidget subscribes to app_links on boot; in the test shell there is no
// platform plugin to talk to, so the subscription points at this no-op.
class _NoopAppLinks extends AppLinksPlatform {
@override
Future<Uri?> getInitialLink() async => null;
@override
Stream<Uri> get uriLinkStream => const Stream.empty();
}
void main() {
// Hive's box opening is real file IO, which never completes inside a
// testWidgets fake-async zone — so it happens here, outside one.
setUpAll(() async {
TestWidgetsFlutterBinding.ensureInitialized();
AppLinksPlatform.instance = _NoopAppLinks();
final dir = await Directory.systemTemp.createTemp("smol-widget-test");
Hive.init(dir.path);
store = await SmolStore.open(dbPath: "${dir.path}/widget.db");
});
2024-02-17 20:32:01 +05:30
testWidgets("onboarding invites to create or restore an identity",
(tester) async {
await tester.pumpWidget(
ProviderScope(
overrides: [storeProvider.overrideWithValue(store)],
child: const AppWidget(),
),
);
await tester.pumpAndSettle();
expect(find.text("Create Identity"), findsOneWidget);
expect(find.text("Restore From Seed"), findsOneWidget);
2024-02-17 20:32:01 +05:30
});
}