Skip to content

Commit

Permalink
test(FilterListPage): Add tests for FilterListPage
Browse files Browse the repository at this point in the history
  • Loading branch information
tmaegel committed Dec 22, 2023
1 parent 79ec141 commit a915c0a
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 13 deletions.
8 changes: 4 additions & 4 deletions lib/domain/filter/filter_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ extension Order on ListOrder {
if (name != null) {
try {
return ListOrder.values.byName(name);
} on Exception {
} on ArgumentError {
// Returns ListOrder.ascending
}
}
Expand Down Expand Up @@ -86,7 +86,7 @@ extension Filters on ListFilter {
if (name != null) {
try {
return ListFilter.values.byName(name);
} on Exception {
} on ArgumentError {
// Returns ListFilter.all
}
}
Expand Down Expand Up @@ -120,7 +120,7 @@ extension Groups on ListGroup {
if (name != null) {
try {
return ListGroup.values.byName(name);
} on Exception {
} on ArgumentError {
// Returns ListGroup.none
}
}
Expand Down Expand Up @@ -274,7 +274,7 @@ class Filter extends Equatable {
}

static String get tableRepr {
return '''CREATE TABLE filters(
return '''CREATE TABLE IF NOT EXISTS filters(
`id` INTEGER PRIMARY KEY,
`name` TEXT NOT NULL,
`priorities` TEXT,
Expand Down
2 changes: 1 addition & 1 deletion lib/domain/settings/setting_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class Setting extends Equatable {
value = map['value'] as String;

static String get tableRepr {
return '''CREATE TABLE settings(
return '''CREATE TABLE IF NOT EXISTS settings(
`id` INTEGER PRIMARY KEY,
`key` TEXT NOT NULL UNIQUE,
`value` TEXT NOT NULL
Expand Down
7 changes: 1 addition & 6 deletions lib/presentation/filter/pages/filter_list_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -116,12 +116,7 @@ class FilterListTile extends StatelessWidget {
key: ValueKey<int>(filter.id!),
title: Text(filter.name),
subtitle: _buildSubtitle(),
onTap: () => context.pushNamed('todo-list', extra: filter),
trailing: IconButton(
icon: const Icon(Icons.edit),
tooltip: 'Edit',
onPressed: () => context.pushNamed('filter-edit', extra: filter),
),
onTap: () => context.pushNamed('filter-edit', extra: filter),
);
}

Expand Down
4 changes: 2 additions & 2 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -449,10 +449,10 @@ packages:
dependency: transitive
description:
name: sqlite3
sha256: "8922805564b78eb7aa9386c10056d377a541ac7270dc6a1589176277ebb4d15d"
sha256: c4a4c5a4b2a32e2d0f6837b33d7c91a67903891a5b7dbe706cf4b1f6b0c798c5
url: "https://pub.dev"
source: hosted
version: "2.2.0"
version: "2.3.0"
sqlite3_flutter_libs:
dependency: "direct main"
description:
Expand Down
109 changes: 109 additions & 0 deletions test/presentation/filter/pages/filter_list_page_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:ntodotxt/data/filter/filter_controller.dart';
import 'package:ntodotxt/domain/filter/filter_model.dart' show Filter;
import 'package:ntodotxt/domain/filter/filter_repository.dart';
import 'package:ntodotxt/presentation/filter/pages/filter_list_page.dart';
import 'package:ntodotxt/presentation/filter/states/filter_list_bloc.dart';
import 'package:ntodotxt/presentation/filter/states/filter_list_event.dart';

class FakeController extends Fake implements FilterController {
List<Filter> items = [
const Filter(id: 1, name: 'Filter 01'),
const Filter(id: 2, name: 'Filter 02'),
const Filter(id: 3, name: 'Filter 03'),
];

@override
Future<List<Filter>> list() async {
return Future.value(items);
}
}

class FilterListPageMaterialApp extends StatelessWidget {
final FilterController controller;

const FilterListPageMaterialApp({
required this.controller,
super.key,
});

@override
Widget build(BuildContext context) {
return MultiRepositoryProvider(
providers: [
RepositoryProvider<FilterRepository>(
create: (BuildContext context) => FilterRepository(controller),
),
],
child: Builder(
builder: (BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider<FilterListBloc>(
create: (BuildContext context) {
return FilterListBloc(
repository: context.read<FilterRepository>(),
)..add(const FilterListSubscriped());
},
),
],
child: const MaterialApp(
home: FilterListPage(),
),
);
},
),
);
}
}

void main() {
TestWidgetsFlutterBinding.ensureInitialized();

group('List', () {
testWidgets('narrow view', (tester) async {
// Increase size to ensure all elements in list are visible.
tester.view.physicalSize = const Size(400, 800);
tester.view.devicePixelRatio = 1.0;

await tester.pumpWidget(FilterListPageMaterialApp(
controller: FakeController(),
));
await tester.pump();

expect(find.byType(FilterListTile), findsNWidgets(3));
Iterable<FilterListTile> filterTiles =
tester.widgetList<FilterListTile>(find.byType(FilterListTile));
expect(filterTiles.elementAt(0).filter.name, 'Filter 01');
expect(filterTiles.elementAt(1).filter.name, 'Filter 02');
expect(filterTiles.elementAt(2).filter.name, 'Filter 03');

// resets the screen to its original size after the test end
addTearDown(tester.view.resetPhysicalSize);
addTearDown(tester.view.resetDevicePixelRatio);
});
testWidgets('wide view', (tester) async {
// Increase size to ensure all elements in list are visible.
tester.view.physicalSize = const Size(800, 1200);
tester.view.devicePixelRatio = 1.0;

await tester.pumpWidget(FilterListPageMaterialApp(
controller: FakeController(),
));
await tester.pump();

expect(find.byType(FilterListTile), findsNWidgets(3));
Iterable<FilterListTile> filterTiles =
tester.widgetList<FilterListTile>(find.byType(FilterListTile));
expect(filterTiles.elementAt(0).filter.name, 'Filter 01');
expect(filterTiles.elementAt(1).filter.name, 'Filter 02');
expect(filterTiles.elementAt(2).filter.name, 'Filter 03');

// resets the screen to its original size after the test end
addTearDown(tester.view.resetPhysicalSize);
addTearDown(tester.view.resetDevicePixelRatio);
});
});
}

0 comments on commit a915c0a

Please sign in to comment.