mirror of
https://github.com/flutter/samples.git
synced 2025-11-11 15:28:44 +00:00
Migrate desktop_photo_search to top level (#1002)
This commit is contained in:
134
desktop_photo_search/material/test/widget_test.dart
Normal file
134
desktop_photo_search/material/test/widget_test.dart
Normal file
@@ -0,0 +1,134 @@
|
||||
// Copyright 2019 The Flutter team. 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:typed_data';
|
||||
|
||||
import 'package:desktop_photo_search/src/model/photo_search_model.dart';
|
||||
import 'package:desktop_photo_search/src/unsplash/photo.dart';
|
||||
import 'package:desktop_photo_search/src/unsplash/search_photos_response.dart';
|
||||
import 'package:desktop_photo_search/src/unsplash/unsplash.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class FakeUnsplash implements Unsplash {
|
||||
static const searchPhotosResponse = '''
|
||||
{
|
||||
"total": 133,
|
||||
"total_pages": 7,
|
||||
"results": [
|
||||
{
|
||||
"id": "eOLpJytrbsQ",
|
||||
"created_at": "2014-11-18T14:35:36-05:00",
|
||||
"width": 4000,
|
||||
"height": 3000,
|
||||
"color": "#A7A2A1",
|
||||
"likes": 286,
|
||||
"liked_by_user": false,
|
||||
"description": "A man drinking a coffee.",
|
||||
"user": {
|
||||
"id": "Ul0QVz12Goo",
|
||||
"username": "ugmonk",
|
||||
"name": "Jeff Sheldon",
|
||||
"first_name": "Jeff",
|
||||
"last_name": "Sheldon",
|
||||
"instagram_username": "instantgrammer",
|
||||
"twitter_username": "ugmonk",
|
||||
"portfolio_url": "http://ugmonk.com/",
|
||||
"profile_image": {
|
||||
"small": "https://images.unsplash.com/profile-1441298803695-accd94000cac?ixlib=rb-0.3.5&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=32&w=32&s=7cfe3b93750cb0c93e2f7caec08b5a41",
|
||||
"medium": "https://images.unsplash.com/profile-1441298803695-accd94000cac?ixlib=rb-0.3.5&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=64&w=64&s=5a9dc749c43ce5bd60870b129a40902f",
|
||||
"large": "https://images.unsplash.com/profile-1441298803695-accd94000cac?ixlib=rb-0.3.5&q=80&fm=jpg&crop=faces&cs=tinysrgb&fit=crop&h=128&w=128&s=32085a077889586df88bfbe406692202"
|
||||
},
|
||||
"links": {
|
||||
"self": "https://api.unsplash.com/users/ugmonk",
|
||||
"html": "http://unsplash.com/@ugmonk",
|
||||
"photos": "https://api.unsplash.com/users/ugmonk/photos",
|
||||
"likes": "https://api.unsplash.com/users/ugmonk/likes"
|
||||
}
|
||||
},
|
||||
"current_user_collections": [],
|
||||
"urls": {
|
||||
"raw": "https://images.unsplash.com/photo-1416339306562-f3d12fefd36f",
|
||||
"full": "https://hd.unsplash.com/photo-1416339306562-f3d12fefd36f",
|
||||
"regular": "https://images.unsplash.com/photo-1416339306562-f3d12fefd36f?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=92f3e02f63678acc8416d044e189f515",
|
||||
"small": "https://images.unsplash.com/photo-1416339306562-f3d12fefd36f?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&s=263af33585f9d32af39d165b000845eb",
|
||||
"thumb": "https://images.unsplash.com/photo-1416339306562-f3d12fefd36f?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&s=8aae34cf35df31a592f0bef16e6342ef"
|
||||
},
|
||||
"links": {
|
||||
"self": "https://api.unsplash.com/photos/eOLpJytrbsQ",
|
||||
"html": "http://unsplash.com/photos/eOLpJytrbsQ",
|
||||
"download": "http://unsplash.com/photos/eOLpJytrbsQ/download"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
''';
|
||||
|
||||
@override
|
||||
Future<SearchPhotosResponse?> searchPhotos(
|
||||
{String? query,
|
||||
num page = 1,
|
||||
num perPage = 10,
|
||||
List<num> collections = const [],
|
||||
SearchPhotosOrientation? orientation}) async {
|
||||
return SearchPhotosResponse.fromJson(searchPhotosResponse);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Uint8List> download(Photo photo) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
|
||||
const fabKey = Key('fab');
|
||||
|
||||
class PhotoSearchModelTester extends StatelessWidget {
|
||||
const PhotoSearchModelTester({required this.query, Key? key})
|
||||
: super(key: key);
|
||||
final String query;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
home: TextButton(
|
||||
key: fabKey,
|
||||
onPressed: () async {
|
||||
await Provider.of<PhotoSearchModel>(
|
||||
context,
|
||||
listen: false,
|
||||
).addSearch(query);
|
||||
},
|
||||
child: const Text('Search for a Photo'),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void main() {
|
||||
group('search_list', () {
|
||||
testWidgets('starts empty', (tester) async {
|
||||
final unsplashSearches = PhotoSearchModel(FakeUnsplash());
|
||||
final testWidget = ChangeNotifierProvider<PhotoSearchModel>(
|
||||
create: (context) => unsplashSearches,
|
||||
child: const PhotoSearchModelTester(query: 'clouds'),
|
||||
);
|
||||
await tester.pumpWidget(testWidget);
|
||||
expect(unsplashSearches.entries.length, 0);
|
||||
});
|
||||
|
||||
testWidgets('addSearch adds searches', (tester) async {
|
||||
final unsplashSearches = PhotoSearchModel(FakeUnsplash());
|
||||
final testWidget = ChangeNotifierProvider<PhotoSearchModel>(
|
||||
create: (context) => unsplashSearches,
|
||||
child: const PhotoSearchModelTester(query: 'clouds'),
|
||||
);
|
||||
await tester.pumpWidget(testWidget);
|
||||
await tester.tap(find.byKey(fabKey));
|
||||
await tester.tap(find.byKey(fabKey));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(unsplashSearches.entries.length, 2);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user