mirror of
https://github.com/foss42/apidash.git
synced 2025-12-01 18:28:25 +08:00
resolved issue #178(switch from GET->POST if payload exists)
This commit is contained in:
50
test/providers/collection_providers_test.dart
Normal file
50
test/providers/collection_providers_test.dart
Normal 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);
|
||||
});
|
||||
}
|
||||
40
test/providers/helpers.dart
Normal file
40
test/providers/helpers.dart
Normal 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();
|
||||
}
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user