test: history widgets

This commit is contained in:
DenserMeerkat
2024-08-03 17:33:18 +05:30
parent df0e08ae2f
commit 572aa018bf
13 changed files with 490 additions and 46 deletions

View File

@ -0,0 +1,71 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/consts.dart';
import 'package:apidash/widgets/button_form_data_file.dart';
void main() {
testWidgets('Testing FormDataFileButton for default label',
(WidgetTester tester) async {
await tester.pumpWidget(
const MaterialApp(
home: Scaffold(
body: FormDataFileButton(),
),
),
);
final icon = find.byIcon(Icons.snippet_folder_rounded);
Finder button = find.ancestor(
of: icon,
matching: find.byWidgetPredicate((widget) => widget is ElevatedButton));
expect(button, findsOneWidget);
expect(find.text(kLabelSelectFile), findsOneWidget);
});
testWidgets('Testing FormDataFileButton with provided label',
(WidgetTester tester) async {
const testValue = 'test_file.txt';
await tester.pumpWidget(
const MaterialApp(
home: Scaffold(
body: FormDataFileButton(initialValue: testValue),
),
),
);
final icon = find.byIcon(Icons.snippet_folder_rounded);
Finder button = find.ancestor(
of: icon,
matching: find.byWidgetPredicate((widget) => widget is ElevatedButton));
expect(button, findsOneWidget);
expect(find.text(testValue), findsOneWidget);
});
testWidgets('Testing FormDataFileButton triggers onPressed callback',
(WidgetTester tester) async {
bool pressed = false;
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: FormDataFileButton(
onPressed: () {
pressed = true;
},
),
),
),
);
final icon = find.byIcon(Icons.snippet_folder_rounded);
Finder button = find.ancestor(
of: icon,
matching: find.byWidgetPredicate((widget) => widget is ElevatedButton));
await tester.tap(button);
await tester.pump();
expect(pressed, isTrue);
});
}

View File

@ -0,0 +1,102 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/consts.dart';
import 'package:apidash/widgets/button_group_filled.dart';
void main() {
testWidgets('Testing FilledButtonGroup', (WidgetTester tester) async {
final buttons = [
ButtonData(
icon: Icons.add,
label: 'Add',
tooltip: 'Add Item',
onPressed: () {},
),
ButtonData(
icon: Icons.remove,
label: 'Remove',
tooltip: 'Remove Item',
onPressed: () {},
),
];
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: FilledButtonGroup(buttons: buttons),
),
),
);
expect(find.byType(FilledButtonWidget), findsNWidgets(2));
});
testWidgets('Testing FilledButtonWidget with label',
(WidgetTester tester) async {
final buttonData = ButtonData(
icon: Icons.add,
label: 'Add',
tooltip: 'Add Item',
onPressed: () {},
);
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: FilledButtonWidget(buttonData: buttonData, showLabel: true),
),
),
);
expect(find.byIcon(Icons.add), findsOneWidget);
expect(find.text('Add'), findsOneWidget);
});
testWidgets('Testing FilledButtonWidget without label',
(WidgetTester tester) async {
final buttonData = ButtonData(
icon: Icons.add,
label: 'Add',
tooltip: 'Add Item',
onPressed: () {},
);
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: FilledButtonWidget(buttonData: buttonData, showLabel: false),
),
),
);
expect(find.byIcon(Icons.add), findsOneWidget);
expect(find.text('Add'), findsNothing);
});
testWidgets('Testing FilledButtonWidget with onPressed callback',
(WidgetTester tester) async {
bool pressed = false;
final buttonData = ButtonData(
icon: Icons.add,
label: 'Add',
tooltip: 'Add Item',
onPressed: () {
pressed = true;
},
);
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: FilledButtonWidget(buttonData: buttonData, showLabel: true),
),
),
);
await tester.tap(find.byType(FilledButtonWidget));
await tester.pump();
expect(pressed, isTrue);
});
}

View File

@ -22,23 +22,12 @@ void main() {
expect(icon, findsOneWidget);
Finder button;
if (tester.any(find.ancestor(
of: icon,
matching: find.byWidgetPredicate((widget) => widget is TextButton)))) {
expect(find.text(kLabelDownload), findsOneWidget);
button = find.ancestor(
of: icon,
matching: find.byWidgetPredicate((widget) => widget is TextButton));
expect(button, findsOneWidget);
expect(tester.widget<TextButton>(button).enabled, isFalse);
} else if (tester
.any(find.ancestor(of: icon, matching: find.byType(IconButton)))) {
button = find.byType(IconButton);
expect(button, findsOneWidget);
expect(tester.widget<IconButton>(button).onPressed == null, isFalse);
} else {
fail('No TextButton or IconButton found');
}
});
testWidgets('Testing for Save in Downloads button 2', (tester) async {
@ -48,6 +37,7 @@ void main() {
theme: kThemeDataLight,
home: Scaffold(
body: SaveInDownloadsButton(
showLabel: false,
content: Uint8List.fromList([1]),
),
),
@ -58,22 +48,8 @@ void main() {
expect(icon, findsOneWidget);
Finder button;
if (tester.any(find.ancestor(
of: icon,
matching: find.byWidgetPredicate((widget) => widget is TextButton)))) {
expect(find.text(kLabelDownload), findsOneWidget);
button = find.ancestor(
of: icon,
matching: find.byWidgetPredicate((widget) => widget is TextButton));
expect(button, findsOneWidget);
expect(tester.widget<TextButton>(button).enabled, isTrue);
} else if (tester
.any(find.ancestor(of: icon, matching: find.byType(IconButton)))) {
button = find.byType(IconButton);
expect(button, findsOneWidget);
expect(tester.widget<IconButton>(button).onPressed == null, isTrue);
} else {
fail('No TextButton or IconButton found');
}
expect(tester.widget<IconButton>(button).onPressed == null, isFalse);
});
}

View File

@ -0,0 +1,47 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/models/models.dart';
import 'package:apidash/widgets/texts.dart';
import 'package:apidash/utils/utils.dart';
import 'package:apidash/consts.dart';
import 'package:apidash/widgets/card_history_request.dart';
void main() {
testWidgets(
'HistoryRequestCard displays correct information and handles onTap',
(WidgetTester tester) async {
final mockModel = HistoryMetaModel(
historyId: 'historyId',
requestId: 'requestId',
url: 'https://api.apidash.dev',
method: HTTPVerb.get,
timeStamp: DateTime.now(),
responseStatus: 200,
);
bool wasTapped = false;
void mockOnTap() {
wasTapped = true;
}
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: HistoryRequestCard(
id: '1',
model: mockModel,
isSelected: true,
onTap: mockOnTap,
),
),
),
);
expect(find.text(humanizeTime(mockModel.timeStamp)), findsOneWidget);
expect(find.byType(StatusCode), findsOneWidget);
await tester.tap(find.byType(InkWell));
expect(wasTapped, isTrue);
});
}

View File

@ -0,0 +1,97 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/consts.dart';
import 'package:apidash/models/models.dart';
import '../test_consts.dart';
void main() {
final List<HistoryMetaModel> sampleModels = [
HistoryMetaModel(
historyId: 'historyId',
requestId: 'requestId',
url: 'https://api.apidash.dev',
method: HTTPVerb.get,
timeStamp: DateTime.now(),
responseStatus: 200,
)
];
testWidgets('Testing Sidebar History Card', (tester) async {
dynamic changedValue;
await tester.pumpWidget(
MaterialApp(
title: 'Sidebar History Card',
theme: kThemeDataLight,
home: Scaffold(
body: ListView(
children: [
SidebarHistoryCard(
id: '1',
models: sampleModels,
method: HTTPVerb.get,
onTap: () {
changedValue = 'Tapped';
},
),
],
),
),
),
);
expect(find.byType(InkWell), findsOneWidget);
expect(find.text('https://api.apidash.dev'), findsOneWidget);
expect(find.widgetWithText(SizedBox, 'https://api.apidash.dev'),
findsOneWidget);
expect(
find.widgetWithText(Card, 'https://api.apidash.dev'), findsOneWidget);
await tester.pumpAndSettle();
var tappable = find.widgetWithText(Card, 'https://api.apidash.dev');
await tester.tap(tappable);
await tester.pumpAndSettle(const Duration(seconds: 2));
expect(changedValue, 'Tapped');
await tester.pumpAndSettle();
});
testWidgets('Testing Sidebar History Card dark mode', (tester) async {
dynamic changedValue;
await tester.pumpWidget(
MaterialApp(
title: 'Sidebar History Card',
theme: kThemeDataDark,
home: Scaffold(
body: ListView(
children: [
SidebarHistoryCard(
id: '1',
models: sampleModels,
method: HTTPVerb.get,
onTap: () {
changedValue = 'Tapped';
},
),
],
),
),
),
);
expect(find.byType(InkWell), findsOneWidget);
expect(find.text('https://api.apidash.dev'), findsOneWidget);
expect(find.widgetWithText(SizedBox, 'https://api.apidash.dev'),
findsOneWidget);
expect(
find.widgetWithText(Card, 'https://api.apidash.dev'), findsOneWidget);
await tester.pumpAndSettle();
var tappable = find.widgetWithText(Card, 'https://api.apidash.dev');
await tester.tap(tappable);
await tester.pumpAndSettle(const Duration(seconds: 2));
expect(changedValue, 'Tapped');
await tester.pumpAndSettle();
});
}

View File

@ -0,0 +1,44 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/consts.dart';
void main() {
testWidgets('Testing HistoryRetentionPopupMenu widget',
(WidgetTester tester) async {
const historyPeriod1 = HistoryRetentionPeriod.oneMonth;
const historyPeriod2 = HistoryRetentionPeriod.threeMonths;
const HistoryRetentionPeriod initialValue = HistoryRetentionPeriod.oneWeek;
HistoryRetentionPeriod? selectedValue;
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: HistoryRetentionPopupMenu(
value: initialValue,
onChanged: (value) {
selectedValue = value;
},
items: const [historyPeriod1, historyPeriod2],
),
),
),
);
expect(find.byType(HistoryRetentionPopupMenu), findsOneWidget);
expect(find.text(initialValue.label), findsOneWidget);
await tester.tap(find.byType(HistoryRetentionPopupMenu));
await tester.pumpAndSettle();
for (var item in [historyPeriod1, historyPeriod2]) {
expect(find.text(item.label), findsOneWidget);
}
await tester.tap(find.text(historyPeriod2.label));
await tester.pumpAndSettle();
expect(selectedValue, historyPeriod2);
});
}

View File

@ -3,7 +3,8 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/widgets/splitview_drawer.dart';
void main() {
testWidgets('DrawerSplitView displays main components', (tester) async {
testWidgets('Testing DrawerSplitView displays main components',
(tester) async {
final scaffoldKey = GlobalKey<ScaffoldState>();
await tester.pumpWidget(
@ -18,20 +19,16 @@ void main() {
),
);
// Verify the main content is displayed
expect(find.text('Main Content'), findsOneWidget);
// Verify the title is displayed
expect(find.text('Title'), findsOneWidget);
// Verify the left drawer content is not displayed initially
expect(find.text('Left Drawer Content'), findsNothing);
// Verify the right drawer content is not displayed initially
expect(find.text('Right Drawer Content'), findsNothing);
});
testWidgets('DrawerSplitView opens left drawer', (tester) async {
testWidgets('Testing DrawerSplitView opens left drawer', (tester) async {
final scaffoldKey = GlobalKey<ScaffoldState>();
await tester.pumpWidget(
@ -45,15 +42,13 @@ void main() {
),
);
// Tap the leading icon to open the left drawer
await tester.tap(find.byIcon(Icons.format_list_bulleted_rounded));
await tester.pumpAndSettle();
// Verify the left drawer content is displayed
expect(find.text('Left Drawer Content'), findsOneWidget);
});
testWidgets('DrawerSplitView opens right drawer', (tester) async {
testWidgets('Testing DrawerSplitView opens right drawer', (tester) async {
final scaffoldKey = GlobalKey<ScaffoldState>();
await tester.pumpWidget(
@ -67,15 +62,13 @@ void main() {
),
);
// Tap the right drawer icon to open the right drawer
await tester.tap(find.byIcon(Icons.arrow_forward));
await tester.pumpAndSettle();
// Verify the right drawer content is displayed
expect(find.text('Right Drawer Content'), findsOneWidget);
});
testWidgets('DrawerSplitView displays actions', (tester) async {
testWidgets('Testing DrawerSplitView displays actions', (tester) async {
final scaffoldKey = GlobalKey<ScaffoldState>();
await tester.pumpWidget(
@ -91,7 +84,6 @@ void main() {
),
);
// Verify the action icon is displayed
expect(find.byIcon(Icons.search), findsOneWidget);
});
}

View File

@ -0,0 +1,25 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:multi_split_view/multi_split_view.dart';
import 'package:apidash/widgets/widgets.dart';
void main() {
testWidgets('Testing for History Splitview', (tester) async {
await tester.pumpWidget(
const MaterialApp(
title: 'History Splitview',
home: Scaffold(
body: HistorySplitView(
sidebarWidget: Column(children: [Text("Pane")]),
mainWidget: Column(children: [Text("Viewer")]),
),
),
),
);
expect(find.text("Pane"), findsOneWidget);
expect(find.text("Viewer"), findsOneWidget);
expect(find.byType(MultiSplitViewTheme), findsOneWidget);
});
//TODO: Divider not visible on flutter run. Investigate.
}

View File

@ -0,0 +1,36 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:data_table_2/data_table_2.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/models/models.dart';
import 'package:apidash/consts.dart';
void main() {
testWidgets('Testing RequestFormDataTable', (WidgetTester tester) async {
const List<FormDataModel> sampleData = [
FormDataModel(name: 'Key1', value: 'Value1', type: FormDataType.file),
FormDataModel(name: 'Key2', value: 'Value2', type: FormDataType.text),
];
await tester.pumpWidget(
const MaterialApp(
home: Scaffold(
body: RequestFormDataTable(
rows: sampleData,
keyName: 'Key',
valueName: 'Value',
),
),
),
);
expect(find.byType(DataTable2), findsOneWidget);
expect(find.byType(ReadOnlyTextField), findsNWidgets(3));
expect(find.byType(FormDataFileButton), findsOneWidget);
expect(find.text('Key1'), findsOneWidget);
expect(find.text('Value1'), findsOneWidget);
expect(find.text('Key2'), findsOneWidget);
expect(find.text('Value2'), findsOneWidget);
});
}

View File

@ -0,0 +1,32 @@
import 'package:apidash/widgets/widgets.dart';
import 'package:data_table_2/data_table_2.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('Testing RequestDataTable', (WidgetTester tester) async {
final Map<String, String> sampleData = {
'Key1': 'Value1',
'Key2': 'Value2',
};
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: RequestDataTable(
rows: sampleData,
keyName: 'Key',
valueName: 'Value',
),
),
),
);
expect(find.byType(DataTable2), findsOneWidget);
expect(find.byType(ReadOnlyTextField), findsNWidgets(4));
expect(find.text('Key1'), findsOneWidget);
expect(find.text('Value1'), findsOneWidget);
expect(find.text('Key2'), findsOneWidget);
expect(find.text('Value2'), findsOneWidget);
});
}

View File

@ -24,6 +24,7 @@ void main() {
widget is Text && widget.style!.color == kColorHttpMethodGet);
expect(getTextWithColor, findsOneWidget);
});
testWidgets('Testing when method is DELETE', (tester) async {
var methodDel = HTTPVerb.delete;
await tester.pumpWidget(
@ -44,4 +45,25 @@ void main() {
(widget) => widget is Text && widget.style!.color == colDelDarkMode);
expect(delTextWithColor, findsOneWidget);
});
testWidgets('Testing StatusCode', (WidgetTester tester) async {
const int testStatusCode = 200;
const TextStyle testStyle = TextStyle(fontSize: 20);
await tester.pumpWidget(
const MaterialApp(
home: Scaffold(
body: StatusCode(
statusCode: testStatusCode,
style: testStyle,
),
),
),
);
Finder code = find.text(testStatusCode.toString());
expect(code, findsOneWidget);
final Text textWidget = tester.widget(code);
expect(textWidget.style?.fontSize, testStyle.fontSize);
});
}