fix: tests

This commit is contained in:
DenserMeerkat
2025-02-14 18:58:14 +05:30
parent 7ab1c4f293
commit 3f94de6f1b
3 changed files with 115 additions and 87 deletions

View File

@@ -32,7 +32,7 @@ class _HeaderFieldState extends State<HeaderField> {
return EnvCellField( return EnvCellField(
keyId: widget.keyId, keyId: widget.keyId,
hintText: widget.hintText, hintText: widget.hintText,
initialValue: widget.initialValue, initialValue: widget.initialValue ?? "",
focusNode: focusNode, focusNode: focusNode,
onChanged: widget.onChanged, onChanged: widget.onChanged,
colorScheme: colorScheme, colorScheme: colorScheme,

View File

@@ -1,90 +1,36 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_portal/flutter_portal.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:extended_text_field/extended_text_field.dart';
import 'package:apidash/screens/common_widgets/env_trigger_field.dart'; import 'package:apidash/screens/common_widgets/env_trigger_field.dart';
import 'package:multi_trigger_autocomplete/multi_trigger_autocomplete.dart';
void main() { void main() {
testWidgets('Testing EnvironmentTriggerField updates the controller text',
(WidgetTester tester) async {
final fieldKey = GlobalKey<EnvironmentTriggerFieldState>();
const initialValue = 'initial';
const updatedValue = 'updated';
await tester.pumpWidget(
Portal(
child: MaterialApp(
home: Scaffold(
body: EnvironmentTriggerField(
key: fieldKey,
keyId: 'testKey',
initialValue: initialValue,
),
),
),
),
);
Finder field = find.byType(ExtendedTextField);
expect(field, findsOneWidget);
expect(fieldKey.currentState!.controller.text, initialValue);
await tester.pumpWidget(
Portal(
child: MaterialApp(
home: Scaffold(
body: EnvironmentTriggerField(
key: fieldKey,
keyId: 'testKey',
initialValue: updatedValue,
),
),
),
),
);
expect(fieldKey.currentState!.controller.text, updatedValue);
});
testWidgets( testWidgets(
'Testing EnvironmentTriggerField with empty initialValue clears the controller text', 'EnvironmentTriggerField renders and displays MultiTriggerAutocomplete with triggers',
(WidgetTester tester) async { (tester) async {
final fieldKey = GlobalKey<EnvironmentTriggerFieldState>(); final controller = TextEditingController();
const initialValue = 'initial'; final focusNode = FocusNode();
const emptyValue = '';
await tester.pumpWidget( await tester.pumpWidget(
Portal( Portal(
child: MaterialApp( child: MaterialApp(
home: Scaffold( home: Scaffold(
body: EnvironmentTriggerField( body: EnvironmentTriggerField(
key: fieldKey,
keyId: 'testKey', keyId: 'testKey',
initialValue: initialValue, controller: controller,
focusNode: focusNode,
), ),
), ),
), ),
), ),
); );
Finder field = find.byType(ExtendedTextField); final multiTriggerAutocomplete = find.byType(MultiTriggerAutocomplete);
expect(field, findsOneWidget); expect(multiTriggerAutocomplete, findsOneWidget);
expect(fieldKey.currentState!.controller.text, initialValue); final triggers = tester
.widget<MultiTriggerAutocomplete>(multiTriggerAutocomplete)
await tester.pumpWidget( .autocompleteTriggers;
Portal( expect(triggers.length, 2);
child: MaterialApp( expect(triggers.first.trigger, '{');
home: Scaffold( expect(triggers.elementAt(1).trigger, '{{');
body: EnvironmentTriggerField(
key: fieldKey,
keyId: 'testKey',
initialValue: emptyValue,
),
),
),
),
);
expect(fieldKey.currentState!.controller.text, emptyValue);
}); });
} }

View File

@@ -1,24 +1,106 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:apidash/widgets/field_header.dart'; import 'package:apidash/widgets/field_header.dart';
import 'package:extended_text_field/extended_text_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter_portal/flutter_portal.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:spot/spot.dart';
void main() { void main() {
testWidgets('Testing Header Field', (tester) async { group('HeaderField Widget Tests', () {
testWidgets('HeaderField renders and displays ExtendedTextField',
(tester) async {
await tester.pumpWidget( await tester.pumpWidget(
const MaterialApp( const Portal(
title: 'Header Field', child: MaterialApp(
home: Scaffold( home: Scaffold(
body: Column(children: [ body: HeaderField(
HeaderField( keyId: "testKey",
keyId: "1", hintText: "Enter header",
initialValue: "X", ),
) ),
]),
), ),
), ),
); );
expect(find.byKey(const Key("1")), findsOneWidget); spot<HeaderField>().spot<ExtendedTextField>().existsOnce();
expect(find.text('X'), findsOneWidget); });
testWidgets('HeaderField calls onChanged when text changes',
(tester) async {
String? changedText;
await tester.pumpWidget(
Portal(
child: MaterialApp(
home: Scaffold(
body: HeaderField(
keyId: "testKey",
hintText: "Enter header",
onChanged: (text) => changedText = text,
),
),
),
),
);
await act.tap(spot<HeaderField>().spot<ExtendedTextField>());
tester.testTextInput.enterText("new header");
expect(changedText, "new header");
});
});
group('HeaderSuggestions Widget Tests', () {
testWidgets('HeaderSuggestions displays suggestions correctly',
(tester) async {
await tester.pumpWidget(
MaterialApp(
home: HeaderSuggestions(
query: "header",
suggestionsCallback: (query) async => ["header1", "header2"],
onSuggestionTap: (suggestion) {
expect(suggestion, "header1");
},
),
),
);
await tester.pumpAndSettle();
expect(find.byType(ListTile), findsNWidgets(2));
expect(find.text("header1"), findsOneWidget);
expect(find.text("header2"), findsOneWidget);
});
testWidgets('HeaderSuggestions calls onSuggestionTap when tapped',
(tester) async {
String? selectedSuggestion;
await tester.pumpWidget(
MaterialApp(
home: HeaderSuggestions(
query: "header",
suggestionsCallback: (query) async => ["header1"],
onSuggestionTap: (suggestion) => selectedSuggestion = suggestion,
),
),
);
await tester.pumpAndSettle();
await tester.tap(find.text("header1"));
expect(selectedSuggestion, "header1");
});
testWidgets('HeaderSuggestions shows no suggestions when list is empty',
(tester) async {
await tester.pumpWidget(
MaterialApp(
home: HeaderSuggestions(
query: "test",
suggestionsCallback: (query) async => [],
onSuggestionTap: (suggestion) {},
),
),
);
await tester.pumpAndSettle();
expect(find.byType(ListTile), findsNothing);
});
}); });
} }