Skip to content

Commit

Permalink
test: update search_field_test
Browse files Browse the repository at this point in the history
  • Loading branch information
d-loose committed Sep 13, 2023
1 parent 1eb90da commit 9c70c31
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 47 deletions.
149 changes: 113 additions & 36 deletions test/search_field_test.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import 'package:app_center/appstream.dart';
import 'package:app_center/search.dart';
import 'package:app_center/snapd.dart';
import 'package:appstream/appstream.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
Expand All @@ -14,39 +17,104 @@ abstract class StringCallback {
class MockStringCallback extends Mock implements StringCallback {}

void main() {
final mockSearchProvider = createMockSearchProvider({
final mockSnapSearchProvider = createMockSnapSearchProvider({
const SnapSearchParameters(query: 'testsn'): const [
Snap(name: 'testsnap', title: 'Test Snap'),
Snap(name: 'testsnap2', title: 'Another Test Snap'),
]
});

testWidgets('autocomplete options', (tester) async {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
searchProvider.overrideWith((ref, query) => mockSearchProvider(query))
],
child: SearchField(onSearch: (_) {}, onSelected: (_) {}),
),
);

final testSnapFinder = find.text('Test Snap');
final anotherTestSnapFinder = find.text('Another Test Snap');
final searchForQueryFinder =
find.text(tester.l10n.searchFieldSearchForLabel('testsn'));

expect(testSnapFinder, findsNothing);
expect(anotherTestSnapFinder, findsNothing);
expect(searchForQueryFinder, findsNothing);

final textField = find.byType(TextField);
await tester.enterText(textField, 'testsn');
await tester.pumpAndSettle();

expect(testSnapFinder, findsOneWidget);
expect(anotherTestSnapFinder, findsOneWidget);
expect(searchForQueryFinder, findsOneWidget);
final mockDebSearchProvider = createMockDebSearchProvider({
'testsn': const [
AppstreamComponent(
id: 'testsnImeanDeb.desktop',
type: AppstreamComponentType.desktopApplication,
package: 'testsn',
name: {'C': 'Test Sn..I mean deb'},
summary: {'C': 'The infamous Test snap as a debian package!'},
)
]
});

group('autocomplete options', () {
testWidgets('only snap results', (tester) async {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
snapSearchProvider.overrideWith((ref, searchParameters) =>
mockSnapSearchProvider(searchParameters)),
appstreamSearchProvider
.overrideWith((ref, query) => Stream.value([]))
],
child: SearchField(
onSearch: (_) {},
onSnapSelected: (_) {},
onDebSelected: (_) {},
),
),
);

final testSnapFinder = find.text('Test Snap');
final anotherTestSnapFinder = find.text('Another Test Snap');
final searchForQueryFinder =
find.text(tester.l10n.searchFieldSearchForLabel('testsn'));

expect(testSnapFinder, findsNothing);
expect(anotherTestSnapFinder, findsNothing);
expect(searchForQueryFinder, findsNothing);

final textField = find.byType(TextField);
await tester.enterText(textField, 'testsn');
await tester.pumpAndSettle();

expect(testSnapFinder, findsOneWidget);
expect(anotherTestSnapFinder, findsOneWidget);
expect(searchForQueryFinder, findsOneWidget);

expect(find.text(tester.l10n.searchFieldSnapSection), findsOneWidget);
expect(find.text(tester.l10n.searchFieldDebSection), findsNothing);
});

testWidgets('snap and deb results', (tester) async {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
snapSearchProvider.overrideWith((ref, searchParameters) =>
mockSnapSearchProvider(searchParameters)),
appstreamSearchProvider
.overrideWith((ref, query) => mockDebSearchProvider(query))
],
child: SearchField(
onSearch: (_) {},
onSnapSelected: (_) {},
onDebSelected: (_) {},
),
),
);

final testSnapFinder = find.text('Test Snap');
final anotherTestSnapFinder = find.text('Another Test Snap');
final testDebFinder = find.text('Test Sn..I mean deb');
final searchForQueryFinder =
find.text(tester.l10n.searchFieldSearchForLabel('testsn'));

expect(testSnapFinder, findsNothing);
expect(anotherTestSnapFinder, findsNothing);
expect(testDebFinder, findsNothing);
expect(searchForQueryFinder, findsNothing);

final textField = find.byType(TextField);
await tester.enterText(textField, 'testsn');
await tester.pumpAndSettle();

expect(testSnapFinder, findsOneWidget);
expect(testDebFinder, findsOneWidget);
expect(anotherTestSnapFinder, findsOneWidget);
expect(searchForQueryFinder, findsOneWidget);

expect(find.text(tester.l10n.searchFieldSnapSection), findsOneWidget);
expect(find.text(tester.l10n.searchFieldDebSection), findsOneWidget);
});
});

group('callbacks', () {
Expand All @@ -57,12 +125,15 @@ void main() {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
searchProvider
.overrideWith((ref, query) => mockSearchProvider(query))
snapSearchProvider.overrideWith((ref, searchParameters) =>
mockSnapSearchProvider(searchParameters)),
appstreamSearchProvider
.overrideWith((ref, query) => Stream.value([]))
],
child: SearchField(
onSearch: mockSearchCallback,
onSelected: mockSelectedCallback,
onSnapSelected: mockSelectedCallback,
onDebSelected: (_) {},
),
),
);
Expand All @@ -84,12 +155,15 @@ void main() {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
searchProvider
.overrideWith((ref, query) => mockSearchProvider(query))
snapSearchProvider.overrideWith((ref, searchParameters) =>
mockSnapSearchProvider(searchParameters)),
appstreamSearchProvider
.overrideWith((ref, query) => Stream.value([]))
],
child: SearchField(
onSearch: mockSearchCallback,
onSelected: mockSelectedCallback,
onSnapSelected: mockSelectedCallback,
onDebSelected: (_) {},
),
),
);
Expand All @@ -112,12 +186,15 @@ void main() {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
searchProvider
.overrideWith((ref, query) => mockSearchProvider(query))
snapSearchProvider.overrideWith((ref, searchParameters) =>
mockSnapSearchProvider(searchParameters)),
appstreamSearchProvider
.overrideWith((ref, query) => Stream.value([]))
],
child: SearchField(
onSearch: mockSearchCallback,
onSelected: mockSelectedCallback,
onSnapSelected: mockSelectedCallback,
onDebSelected: (_) {},
),
),
);
Expand Down
21 changes: 12 additions & 9 deletions test/search_page_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import 'package:ubuntu_widgets/ubuntu_widgets.dart';
import 'test_utils.dart';

void main() {
final mockSearchProvider = createMockSearchProvider({
final mockSearchProvider = createMockSnapSearchProvider({
const SnapSearchParameters(query: 'testsn'): const [
Snap(name: 'testsnap', title: 'Test Snap', downloadSize: 3),
Snap(name: 'testsnap2', title: 'Another Test Snap', downloadSize: 1),
Expand All @@ -29,7 +29,8 @@ void main() {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
searchProvider.overrideWith((ref, query) => mockSearchProvider(query))
snapSearchProvider
.overrideWith((ref, query) => mockSearchProvider(query))
],
child: const SearchPage(query: 'testsn'),
),
Expand All @@ -52,7 +53,8 @@ void main() {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
searchProvider.overrideWith((ref, query) => mockSearchProvider(query))
snapSearchProvider
.overrideWith((ref, query) => mockSearchProvider(query))
],
child: const SearchPage(
query: 'testsn',
Expand All @@ -78,7 +80,8 @@ void main() {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
searchProvider.overrideWith((ref, query) => mockSearchProvider(query))
snapSearchProvider
.overrideWith((ref, query) => mockSearchProvider(query))
],
child: const SearchPage(
category: 'education',
Expand All @@ -101,7 +104,7 @@ void main() {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
searchProvider
snapSearchProvider
.overrideWith((ref, query) => mockSearchProvider(query))
],
child: const SearchPage(query: 'testsn'),
Expand All @@ -126,7 +129,7 @@ void main() {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
searchProvider
snapSearchProvider
.overrideWith((ref, query) => mockSearchProvider(query))
],
child: const SearchPage(query: 'testsn'),
Expand Down Expand Up @@ -154,7 +157,7 @@ void main() {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
searchProvider
snapSearchProvider
.overrideWith((ref, query) => mockSearchProvider(query))
],
child: const SearchPage(query: 'testsn'),
Expand Down Expand Up @@ -185,7 +188,7 @@ void main() {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
searchProvider
snapSearchProvider
.overrideWith((ref, query) => mockSearchProvider(query))
],
child: const SearchPage(query: 'foo'),
Expand All @@ -202,7 +205,7 @@ void main() {
await tester.pumpApp(
(_) => ProviderScope(
overrides: [
searchProvider
snapSearchProvider
.overrideWith((ref, query) => mockSearchProvider(query))
],
child: const SearchPage(query: 'foo', category: 'social'),
Expand Down
12 changes: 10 additions & 2 deletions test/test_utils.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'dart:async';

import 'package:app_center/l10n.dart';
import 'package:app_center/search.dart';
import 'package:app_center/snapd.dart';
import 'package:app_center/src/manage/manage_model.dart';
import 'package:appstream/appstream.dart';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
Expand All @@ -27,7 +27,7 @@ extension WidgetTesterX on WidgetTester {
}
}

Stream<List<Snap>> Function(SnapSearchParameters) createMockSearchProvider(
Stream<List<Snap>> Function(SnapSearchParameters) createMockSnapSearchProvider(
Map<SnapSearchParameters, List<Snap>> searchResults) {
return (SnapSearchParameters searchParameters) => Stream.value(
searchResults.entries
Expand All @@ -37,6 +37,14 @@ Stream<List<Snap>> Function(SnapSearchParameters) createMockSearchProvider(
);
}

Stream<List<AppstreamComponent>> Function(String) createMockDebSearchProvider(
Map<String, List<AppstreamComponent>> searchResults) {
return (String query) => Stream.value(
searchResults.entries.firstWhereOrNull((e) => e.key == query)?.value ??
[],
);
}

@GenerateMocks([SnapLauncher])
SnapLauncher createMockSnapLauncher({
bool isLaunchable = false,
Expand Down

0 comments on commit 9c70c31

Please sign in to comment.