resolved issue #178(switch from GET->POST if payload exists)

This commit is contained in:
Jeet Dalal
2024-08-11 13:40:47 +05:30
parent 448a88232b
commit fcc940ec2e
6 changed files with 124 additions and 5 deletions

View File

@@ -0,0 +1,50 @@
import 'package:apidash/consts.dart';
import 'package:apidash/screens/home_page/editor_pane/details_card/request_pane/request_body.dart';
import 'package:apidash/widgets/editor.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:apidash/providers/providers.dart';
import 'helpers.dart';
void main() async {
setUp(() async => await testSetUp());
testWidgets(
'Request method changes from GET to POST when body is added and Snackbar is shown',
(WidgetTester tester) async {
// Set up the test environment
final container = createContainer();
final notifier = container.read(collectionStateNotifierProvider.notifier);
// Ensure the initial request is a GET request with no body
final id = notifier.state!.entries.first.key;
expect(
notifier.getRequestModel(id)!.httpRequestModel!.method, HTTPVerb.get);
expect(notifier.getRequestModel(id)!.httpRequestModel!.body, isNull);
// Build the EditRequestBody widget
await tester.pumpWidget(
ProviderScope(
// ignore: deprecated_member_use
parent: container,
child: const MaterialApp(
home: Scaffold(
body: EditRequestBody(),
),
),
),
);
// Add a body to the request, which should trigger the method change
await tester.enterText(find.byType(TextFieldEditor), 'new body added');
await tester.pump(); // Process the state change
// Verify that the request method changed to POST
expect(
notifier.getRequestModel(id)!.httpRequestModel!.method, HTTPVerb.post);
// Verify that the Snackbar is shown
expect(find.text('Switched to POST method'), findsOneWidget);
});
}

View File

@@ -0,0 +1,40 @@
import 'package:apidash/services/hive_services.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:test/test.dart';
/// A testing utility which creates a [ProviderContainer] and automatically
/// disposes it at the end of the test.
ProviderContainer createContainer({
ProviderContainer? parent,
List<Override> overrides = const [],
List<ProviderObserver>? observers,
}) {
// Create a ProviderContainer, and optionally allow specifying parameters.
final container = ProviderContainer(
parent: parent,
overrides: overrides,
observers: observers,
);
// When the test ends, dispose the container.
addTearDown(container.dispose);
return container;
}
Future<void> testSetUp() async {
// override path_provider methodCall to point
// path to temporary location for all unit tests
TestWidgetsFlutterBinding.ensureInitialized();
const MethodChannel channel =
MethodChannel('plugins.flutter.io/path_provider');
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
return './test/unit-test-hive-storage/';
});
await openBoxes();
}

View File

@@ -1,6 +1,4 @@
import 'dart:io';
import 'package:spot/spot.dart';
import 'package:apidash/consts.dart';
import 'package:apidash/providers/providers.dart';
import 'package:apidash/screens/common_widgets/common_widgets.dart';
import 'package:apidash/screens/dashboard.dart';