test: dialog tests

This commit is contained in:
DenserMeerkat
2024-08-04 02:04:35 +05:30
parent f7d91c5b43
commit 85468ac55e
10 changed files with 673 additions and 212 deletions

View File

@ -10,13 +10,53 @@ showRenameDialog(
showDialog(
context: context,
builder: (context) {
final controller = TextEditingController(text: name ?? "");
return RenameDialogContent(
dialogTitle: dialogTitle,
onRename: onRename,
name: name,
);
});
}
class RenameDialogContent extends StatefulWidget {
const RenameDialogContent({
super.key,
required this.dialogTitle,
required this.onRename,
this.name,
});
final String dialogTitle;
final Function(String) onRename;
final String? name;
@override
State<RenameDialogContent> createState() => _RenameDialogContentState();
}
class _RenameDialogContentState extends State<RenameDialogContent> {
late TextEditingController controller;
@override
void initState() {
super.initState();
controller = TextEditingController(text: widget.name ?? "");
controller.selection =
TextSelection(baseOffset: 0, extentOffset: controller.text.length);
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return AlertDialog(
icon: const Icon(Icons.edit_rounded),
iconColor: Theme.of(context).colorScheme.primary,
title: Text(dialogTitle),
title: Text(widget.dialogTitle),
titleTextStyle: Theme.of(context).textTheme.titleLarge,
content: Container(
padding: kPt20,
@ -40,14 +80,11 @@ showRenameDialog(
TextButton(
onPressed: () {
final val = controller.text.trim();
onRename(val);
widget.onRename(val);
Navigator.pop(context);
Future.delayed(const Duration(milliseconds: 100), () {
controller.dispose();
});
},
child: const Text('Ok')),
],
);
});
}
}

View File

@ -0,0 +1,56 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:apidash/providers/providers.dart';
import 'package:apidash/widgets/response_widgets.dart';
import 'package:apidash/screens/history/history_widgets/his_response_pane.dart';
import '../../../models/history_models.dart';
void main() {
group('HistoryResponsePane Widget Tests', () {
testWidgets('displays "No Request Selected" when no request is selected',
(tester) async {
await tester.pumpWidget(
ProviderScope(
overrides: [
selectedHistoryIdStateProvider.overrideWith((ref) => null),
selectedHistoryRequestModelProvider.overrideWith((ref) => null),
],
child: const MaterialApp(
home: Scaffold(
body: HistoryResponsePane(),
),
),
),
);
expect(find.text("No Request Selected"), findsOneWidget);
});
testWidgets(
'displays ResponsePaneHeader and ResponseTabView when a request is selected',
(tester) async {
final historyRequestModel = historyRequestModel1;
await tester.pumpWidget(
ProviderScope(
overrides: [
selectedHistoryIdStateProvider
.overrideWith((ref) => historyRequestModel.historyId),
selectedHistoryRequestModelProvider
.overrideWith((ref) => historyRequestModel),
],
child: const MaterialApp(
home: Scaffold(
body: HistoryResponsePane(),
),
),
),
);
expect(find.byType(ResponsePaneHeader), findsOneWidget);
expect(find.byType(ResponseTabView), findsOneWidget);
});
});
}

View File

@ -0,0 +1,51 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/screens/history/history_widgets/his_url_card.dart';
import '../../../models/history_models.dart';
void main() {
group('Testing HistoryURLCard', () {
final historyRequestModel = historyRequestModel1;
testWidgets('Testing with given HistoryRequestModel', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: HistoryURLCard(historyRequestModel: historyRequestModel),
),
),
);
expect(find.byType(HistoryURLCard), findsOneWidget);
});
testWidgets('Testing if displays correct request method', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: HistoryURLCard(historyRequestModel: historyRequestModel),
),
),
);
expect(
find.text(
historyRequestModel.httpRequestModel.method.name.toUpperCase()),
findsOneWidget);
});
testWidgets('Testing if displays correct URL', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: HistoryURLCard(historyRequestModel: historyRequestModel),
),
),
);
expect(
find.text(historyRequestModel.httpRequestModel.url), findsOneWidget);
});
});
}

View File

@ -0,0 +1,150 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/consts.dart';
import 'package:apidash/widgets/dialog_history_retention.dart';
void main() {
group('showHistoryRetentionDialog Tests', () {
testWidgets('Testing History Retention dialog content', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Builder(
builder: (context) {
return ElevatedButton(
onPressed: () {
showHistoryRetentionDialog(
context,
HistoryRetentionPeriod.forever,
(period) {},
);
},
child: const Text('Show Dialog'),
);
},
),
),
);
await tester.tap(find.text('Show Dialog'));
await tester.pumpAndSettle();
expect(find.text('Manage History'), findsOneWidget);
expect(find.byIcon(Icons.manage_history_rounded), findsOneWidget);
expect(find.byType(RadioListTile<HistoryRetentionPeriod>),
findsNWidgets(HistoryRetentionPeriod.values.length));
});
testWidgets('updates selected retention period correctly', (tester) async {
HistoryRetentionPeriod selectedPeriod = HistoryRetentionPeriod.forever;
await tester.pumpWidget(
MaterialApp(
home: Builder(
builder: (context) {
return ElevatedButton(
onPressed: () {
showHistoryRetentionDialog(
context,
selectedPeriod,
(period) {
selectedPeriod = period;
},
);
},
child: const Text('Show Dialog'),
);
},
),
),
);
await tester.tap(find.text('Show Dialog'));
await tester.pumpAndSettle();
await tester.tap(find.text(HistoryRetentionPeriod.oneWeek.label));
await tester.pumpAndSettle();
await tester.tap(find.text('Confirm'));
await tester.pumpAndSettle();
expect(selectedPeriod, HistoryRetentionPeriod.oneWeek);
});
testWidgets('Cancel button closes dialog without changing retention period',
(tester) async {
HistoryRetentionPeriod selectedPeriod = HistoryRetentionPeriod.oneWeek;
await tester.pumpWidget(
MaterialApp(
home: Builder(
builder: (context) {
return ElevatedButton(
onPressed: () {
showHistoryRetentionDialog(
context,
selectedPeriod,
(period) {
selectedPeriod = period;
},
);
},
child: const Text('Show Dialog'),
);
},
),
),
);
await tester.tap(find.text('Show Dialog'));
await tester.pumpAndSettle();
await tester.tap(find.text('Cancel'));
await tester.pumpAndSettle();
expect(find.byType(AlertDialog), findsNothing);
expect(selectedPeriod, HistoryRetentionPeriod.oneWeek);
});
testWidgets(
'Confirm button closes dialog and calls onRetentionPeriodChange',
(tester) async {
HistoryRetentionPeriod selectedPeriod =
HistoryRetentionPeriod.threeMonths;
HistoryRetentionPeriod newPeriod = HistoryRetentionPeriod.oneWeek;
await tester.pumpWidget(
MaterialApp(
home: Builder(
builder: (context) {
return ElevatedButton(
onPressed: () {
showHistoryRetentionDialog(
context,
selectedPeriod,
(period) {
selectedPeriod = period;
},
);
},
child: const Text('Show Dialog'),
);
},
),
),
);
await tester.tap(find.text('Show Dialog'));
await tester.pumpAndSettle();
await tester.tap(find.text(newPeriod.label));
await tester.pumpAndSettle();
await tester.tap(find.text('Confirm'));
await tester.pumpAndSettle();
expect(find.byType(AlertDialog), findsNothing);
expect(selectedPeriod, newPeriod);
});
});
}

View File

@ -0,0 +1,146 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/widgets/dialog_rename.dart';
void main() {
group('showRenameDialog Tests', () {
testWidgets('displays dialog with correct content', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Builder(
builder: (context) {
return ElevatedButton(
onPressed: () {
showRenameDialog(
context,
'Rename Item',
'Old Name',
(newName) {},
);
},
child: const Text('Show Dialog'),
);
},
),
),
);
await tester.tap(find.text('Show Dialog'));
await tester.pumpAndSettle();
expect(find.text('Rename Item'), findsOneWidget);
expect(find.byIcon(Icons.edit_rounded), findsOneWidget);
expect(find.byType(TextField), findsOneWidget);
expect(find.text('Old Name'), findsOneWidget);
});
testWidgets('calls onRename with new name when Ok is pressed',
(tester) async {
String? renamedValue;
await tester.pumpWidget(
MaterialApp(
home: Builder(
builder: (context) {
return ElevatedButton(
onPressed: () {
showRenameDialog(
context,
'Rename Item',
'Old Name',
(newName) {
renamedValue = newName;
},
);
},
child: const Text('Show Dialog'),
);
},
),
),
);
await tester.tap(find.text('Show Dialog'));
await tester.pumpAndSettle();
await tester.enterText(find.byType(TextField), 'New Name');
await tester.tap(find.text('Ok'));
await tester.pumpAndSettle();
expect(renamedValue, 'New Name');
});
testWidgets('does not call onRename when Cancel is pressed',
(tester) async {
String? renamedValue;
await tester.pumpWidget(
MaterialApp(
home: Builder(
builder: (context) {
return ElevatedButton(
onPressed: () {
showRenameDialog(
context,
'Rename Item',
'Old Name',
(newName) {
renamedValue = newName;
},
);
},
child: const Text('Show Dialog'),
);
},
),
),
);
await tester.tap(find.text('Show Dialog'));
await tester.pumpAndSettle();
await tester.enterText(find.byType(TextField), 'New Name');
await tester.tap(find.text('Cancel'));
await tester.pumpAndSettle();
expect(renamedValue, isNull);
});
testWidgets('disposes TextEditingController after dialog is closed',
(tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: Builder(
builder: (context) {
return ElevatedButton(
onPressed: () {
showRenameDialog(
context,
'Rename Item',
'Old Name',
(newName) {},
);
},
child: const Text('Show Dialog'),
);
},
),
),
),
);
await tester.tap(find.text('Show Dialog'));
await tester.pumpAndSettle();
final textFieldFinder = find.byType(TextField);
expect(textFieldFinder, findsOneWidget);
await tester.tap(find.text('Ok'));
await tester.pumpAndSettle();
expect(textFieldFinder, findsNothing);
});
});
}

View File

@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/consts.dart';
import '../test_consts.dart';
void main() {
testWidgets('Testing Dropdown for Codegen', (tester) async {
dynamic changedValue;
await tester.pumpWidget(
MaterialApp(
title: 'Dropdown Codegen Type testing',
theme: kThemeDataLight,
home: Scaffold(
body: Center(
child: Column(
children: [
DropdownButtonCodegenLanguage(
codegenLanguage: CodegenLanguage.curl,
onChanged: (value) {
changedValue = value!;
},
),
],
),
),
),
),
);
expect(find.byIcon(Icons.unfold_more_rounded), findsOneWidget);
expect(find.byType(DropdownButton<CodegenLanguage>), findsOneWidget);
expect(
(tester.widget(find.byType(DropdownButton<CodegenLanguage>))
as DropdownButton)
.value,
equals(CodegenLanguage.curl));
await tester.tap(find.text('cURL'));
await tester.pump();
await tester.pump(const Duration(seconds: 1));
await tester.tap(find.text('Dart (dio)').last);
await tester.pump();
await tester.pump(const Duration(seconds: 1));
expect(changedValue, CodegenLanguage.dartDio);
});
}

View File

@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/consts.dart';
import '../test_consts.dart';
void main() {
testWidgets('Testing Dropdown for Content Type', (tester) async {
dynamic changedValue;
await tester.pumpWidget(
MaterialApp(
title: 'Dropdown Content Type testing',
theme: kThemeDataLight,
home: Scaffold(
body: Center(
child: Column(
children: [
DropdownButtonContentType(
contentType: ContentType.json,
onChanged: (value) {
changedValue = value!;
},
),
],
),
),
),
),
);
expect(find.byIcon(Icons.unfold_more_rounded), findsOneWidget);
expect(find.byType(DropdownButton<ContentType>), findsOneWidget);
expect(
(tester.widget(find.byType(DropdownButton<ContentType>))
as DropdownButton)
.value,
equals(ContentType.json));
await tester.tap(find.text('json'));
await tester.pump();
await tester.pump(const Duration(seconds: 1));
await tester.tap(find.text('text').last);
await tester.pump();
await tester.pump(const Duration(seconds: 1));
expect(changedValue, ContentType.text);
});
}

View File

@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/consts.dart';
import '../test_consts.dart';
void main() {
testWidgets('Testing Dropdown for FormData', (tester) async {
dynamic changedValue;
await tester.pumpWidget(
MaterialApp(
title: 'Dropdown FormData Type testing',
theme: kThemeDataLight,
home: Scaffold(
body: Center(
child: Column(
children: [
DropdownButtonFormData(
formDataType: FormDataType.file,
onChanged: (value) {
changedValue = value!;
},
),
],
),
),
),
),
);
expect(find.byIcon(Icons.unfold_more_rounded), findsOneWidget);
expect(find.byType(DropdownButton<FormDataType>), findsOneWidget);
expect(
(tester.widget(find.byType(DropdownButton<FormDataType>))
as DropdownButton)
.value,
equals(FormDataType.file));
await tester.tap(find.text('file'));
await tester.pump();
await tester.pump(const Duration(seconds: 1));
await tester.tap(find.text('text').last);
await tester.pump();
await tester.pump(const Duration(seconds: 1));
expect(changedValue, FormDataType.text);
});
}

View File

@ -0,0 +1,48 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/consts.dart';
import '../test_consts.dart';
void main() {
testWidgets('Testing Dropdown for Http Method', (tester) async {
dynamic changedValue;
await tester.pumpWidget(
MaterialApp(
title: 'Dropdown Http method testing',
theme: kThemeDataLight,
home: Scaffold(
body: Center(
child: Column(
children: [
DropdownButtonHttpMethod(
method: HTTPVerb.post,
onChanged: (value) {
changedValue = value!;
},
),
],
),
),
),
),
);
expect(find.byIcon(Icons.unfold_more_rounded), findsOneWidget);
expect(find.byType(DropdownButton<HTTPVerb>), findsOneWidget);
expect(
(tester.widget(find.byType(DropdownButton<HTTPVerb>)) as DropdownButton)
.value,
equals(HTTPVerb.post));
await tester.tap(find.text('POST'));
await tester.pump();
await tester.pump(const Duration(seconds: 1));
await tester.tap(find.text('PUT').last);
await tester.pump();
await tester.pump(const Duration(seconds: 1));
expect(changedValue, HTTPVerb.put);
});
}

View File

@ -1,174 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/consts.dart';
import '../test_consts.dart';
void main() {
testWidgets('Testing Dropdowns', (tester) async {
dynamic changedValue;
await tester.pumpWidget(
MaterialApp(
title: 'Dropdown testing',
theme: kThemeDataLight,
home: Scaffold(
body: Center(
child: Column(
children: [
DropdownButtonHttpMethod(
method: HTTPVerb.post,
onChanged: (value) {
changedValue = value!;
},
),
],
),
),
),
),
);
expect(find.byIcon(Icons.unfold_more_rounded), findsOneWidget);
expect(find.byType(DropdownButton<HTTPVerb>), findsOneWidget);
expect(
(tester.widget(find.byType(DropdownButton<HTTPVerb>)) as DropdownButton)
.value,
equals(HTTPVerb.post));
await tester.tap(find.text('POST'));
await tester.pump();
await tester.pump(const Duration(seconds: 1));
await tester.tap(find.text('PUT').last);
await tester.pump();
await tester.pump(const Duration(seconds: 1));
expect(changedValue, HTTPVerb.put);
});
testWidgets('Testing Dropdown for Content Type', (tester) async {
dynamic changedValue;
await tester.pumpWidget(
MaterialApp(
title: 'Dropdown Content Type testing',
theme: kThemeDataLight,
home: Scaffold(
body: Center(
child: Column(
children: [
DropdownButtonContentType(
contentType: ContentType.json,
onChanged: (value) {
changedValue = value!;
},
),
],
),
),
),
),
);
expect(find.byIcon(Icons.unfold_more_rounded), findsOneWidget);
expect(find.byType(DropdownButton<ContentType>), findsOneWidget);
expect(
(tester.widget(find.byType(DropdownButton<ContentType>))
as DropdownButton)
.value,
equals(ContentType.json));
await tester.tap(find.text('json'));
await tester.pump();
await tester.pump(const Duration(seconds: 1));
await tester.tap(find.text('text').last);
await tester.pump();
await tester.pump(const Duration(seconds: 1));
expect(changedValue, ContentType.text);
});
testWidgets('Testing Dropdown for FormData', (tester) async {
dynamic changedValue;
await tester.pumpWidget(
MaterialApp(
title: 'Dropdown FormData Type testing',
theme: kThemeDataLight,
home: Scaffold(
body: Center(
child: Column(
children: [
DropdownButtonFormData(
formDataType: FormDataType.file,
onChanged: (value) {
changedValue = value!;
},
),
],
),
),
),
),
);
expect(find.byIcon(Icons.unfold_more_rounded), findsOneWidget);
expect(find.byType(DropdownButton<FormDataType>), findsOneWidget);
expect(
(tester.widget(find.byType(DropdownButton<FormDataType>))
as DropdownButton)
.value,
equals(FormDataType.file));
await tester.tap(find.text('file'));
await tester.pump();
await tester.pump(const Duration(seconds: 1));
await tester.tap(find.text('text').last);
await tester.pump();
await tester.pump(const Duration(seconds: 1));
expect(changedValue, FormDataType.text);
});
testWidgets('Testing Dropdown for Codegen', (tester) async {
dynamic changedValue;
await tester.pumpWidget(
MaterialApp(
title: 'Dropdown Codegen Type testing',
theme: kThemeDataLight,
home: Scaffold(
body: Center(
child: Column(
children: [
DropdownButtonCodegenLanguage(
codegenLanguage: CodegenLanguage.curl,
onChanged: (value) {
changedValue = value!;
},
),
],
),
),
),
),
);
expect(find.byIcon(Icons.unfold_more_rounded), findsOneWidget);
expect(find.byType(DropdownButton<CodegenLanguage>), findsOneWidget);
expect(
(tester.widget(find.byType(DropdownButton<CodegenLanguage>))
as DropdownButton)
.value,
equals(CodegenLanguage.curl));
await tester.tap(find.text('cURL'));
await tester.pump();
await tester.pump(const Duration(seconds: 1));
await tester.tap(find.text('Dart (dio)').last);
await tester.pump();
await tester.pump(const Duration(seconds: 1));
expect(changedValue, CodegenLanguage.dartDio);
});
}