blob: f890a1bb116c4ca805de6f14214ad589f2934b55 [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_http_example/main.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:http/http.dart';
import 'package:http/testing.dart';
import 'package:provider/provider.dart';
const _singleBookResponse = '''
{
"items": [
{
"volumeInfo": {
"title": "Flutter Cookbook",
"description": "Write, test, and publish your web, desktop...",
"imageLinks": {
"smallThumbnail": "http://thumbnailurl/"
}
}
}
]
}
''';
final _dummyPngImage = base64Decode(
'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmM'
'IQAAAABJRU5ErkJggg==',
);
void main() {
Widget app(Client client) => Provider<Client>(
create: (_) => client,
child: const BookSearchApp(),
dispose: (_, client) => client.close());
testWidgets('test initial load', (WidgetTester tester) async {
final mockClient = MockClient(
(request) async => throw StateError('unexpected HTTP request'));
await tester.pumpWidget(app(mockClient));
expect(find.text('Please enter a query'), findsOneWidget);
});
testWidgets('test search with one result', (WidgetTester tester) async {
final mockClient = MockClient((request) async {
if (request.url.path == '/books/v1/volumes' &&
request.url.queryParameters['q'] == 'Flutter') {
return Response(_singleBookResponse, 200);
} else if (request.url == Uri.https('thumbnailurl', '/')) {
return Response.bytes(_dummyPngImage, 200,
headers: const {'Content-Type': 'image/png'});
}
return Response('', 404);
});
await tester.pumpWidget(app(mockClient));
await tester.enterText(find.byType(TextField), 'Flutter');
await tester.pump();
// The book title.
expect(find.text('Flutter Cookbook'), findsOneWidget);
// The book description.
expect(
find.text('Write, test, and publish your web, desktop...',
skipOffstage: false),
findsOneWidget);
});
}