diff --git a/lib/widgets/field_header.dart b/lib/widgets/field_header.dart index 4c8892a9..09703340 100644 --- a/lib/widgets/field_header.dart +++ b/lib/widgets/field_header.dart @@ -32,7 +32,7 @@ class _HeaderFieldState extends State { return EnvCellField( keyId: widget.keyId, hintText: widget.hintText, - initialValue: widget.initialValue, + initialValue: widget.initialValue ?? "", focusNode: focusNode, onChanged: widget.onChanged, colorScheme: colorScheme, diff --git a/test/screens/common_widgets/env_trigger_field_test.dart b/test/screens/common_widgets/env_trigger_field_test.dart index c4ec063e..cfd1b894 100644 --- a/test/screens/common_widgets/env_trigger_field_test.dart +++ b/test/screens/common_widgets/env_trigger_field_test.dart @@ -1,90 +1,36 @@ import 'package:flutter/material.dart'; -import 'package:flutter_portal/flutter_portal.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:multi_trigger_autocomplete/multi_trigger_autocomplete.dart'; void main() { - testWidgets('Testing EnvironmentTriggerField updates the controller text', - (WidgetTester tester) async { - final fieldKey = GlobalKey(); - 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( - 'Testing EnvironmentTriggerField with empty initialValue clears the controller text', - (WidgetTester tester) async { - final fieldKey = GlobalKey(); - const initialValue = 'initial'; - const emptyValue = ''; + 'EnvironmentTriggerField renders and displays MultiTriggerAutocomplete with triggers', + (tester) async { + final controller = TextEditingController(); + final focusNode = FocusNode(); await tester.pumpWidget( Portal( child: MaterialApp( home: Scaffold( body: EnvironmentTriggerField( - key: fieldKey, keyId: 'testKey', - initialValue: initialValue, + controller: controller, + focusNode: focusNode, ), ), ), ), ); - 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: emptyValue, - ), - ), - ), - ), - ); - - expect(fieldKey.currentState!.controller.text, emptyValue); + final multiTriggerAutocomplete = find.byType(MultiTriggerAutocomplete); + expect(multiTriggerAutocomplete, findsOneWidget); + final triggers = tester + .widget(multiTriggerAutocomplete) + .autocompleteTriggers; + expect(triggers.length, 2); + expect(triggers.first.trigger, '{'); + expect(triggers.elementAt(1).trigger, '{{'); }); } diff --git a/test/widgets/headerfield_test.dart b/test/widgets/headerfield_test.dart index 4475058b..4215807d 100644 --- a/test/widgets/headerfield_test.dart +++ b/test/widgets/headerfield_test.dart @@ -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: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() { - testWidgets('Testing Header Field', (tester) async { - await tester.pumpWidget( - const MaterialApp( - title: 'Header Field', - home: Scaffold( - body: Column(children: [ - HeaderField( - keyId: "1", - initialValue: "X", - ) - ]), + group('HeaderField Widget Tests', () { + testWidgets('HeaderField renders and displays ExtendedTextField', + (tester) async { + await tester.pumpWidget( + const Portal( + child: MaterialApp( + home: Scaffold( + body: HeaderField( + keyId: "testKey", + hintText: "Enter header", + ), + ), + ), ), - ), - ); + ); - expect(find.byKey(const Key("1")), findsOneWidget); - expect(find.text('X'), findsOneWidget); + spot().spot().existsOnce(); + }); + + 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().spot()); + 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); + }); }); }