From 4ede413ee49f04b5ae4bbf3e97354d6b3ca37d1f Mon Sep 17 00:00:00 2001 From: commitimpush Date: Fri, 2 Sep 2022 14:13:58 +0200 Subject: [PATCH] Added UI tests and attempt at service test --- .flutter-plugins-dependencies | 2 +- example/pubspec.lock | 140 ------------------ example/pubspec.yaml | 2 - pubspec.yaml | 2 +- test/mocks/image_picker_mock.dart | 4 + .../services/image_picker_service_test.dart | 48 +++++- test/src/ui/image_picker_ui_test.dart | 65 +++++++- 7 files changed, 113 insertions(+), 150 deletions(-) create mode 100644 test/mocks/image_picker_mock.dart diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies index b947bc2..0b7166c 100644 --- a/.flutter-plugins-dependencies +++ b/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"image_picker_ios","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_ios-0.8.5+6\\\\","native_build":true,"dependencies":[]}],"android":[{"name":"flutter_plugin_android_lifecycle","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_plugin_android_lifecycle-2.0.7\\\\","native_build":true,"dependencies":[]},{"name":"image_picker_android","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_android-0.8.5+2\\\\","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"]}],"macos":[],"linux":[],"windows":[],"web":[{"name":"image_picker_for_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_for_web-2.1.8\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"image_picker","dependencies":["image_picker_android","image_picker_for_web","image_picker_ios"]},{"name":"image_picker_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"image_picker_ios","dependencies":[]}],"date_created":"2022-09-01 12:25:01.884569","version":"3.0.5"} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"image_picker_ios","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_ios-0.8.5+6\\\\","native_build":true,"dependencies":[]}],"android":[{"name":"flutter_plugin_android_lifecycle","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_plugin_android_lifecycle-2.0.7\\\\","native_build":true,"dependencies":[]},{"name":"image_picker_android","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_android-0.8.5+2\\\\","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"]}],"macos":[],"linux":[],"windows":[],"web":[{"name":"image_picker_for_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_for_web-2.1.8\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"image_picker","dependencies":["image_picker_android","image_picker_for_web","image_picker_ios"]},{"name":"image_picker_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"image_picker_ios","dependencies":[]}],"date_created":"2022-09-02 13:54:18.406312","version":"3.0.5"} \ No newline at end of file diff --git a/example/pubspec.lock b/example/pubspec.lock index ad2c410..692548f 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -1,27 +1,6 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - url: "https://pub.dartlang.org" - source: hosted - version: "46.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - url: "https://pub.dartlang.org" - source: hosted - version: "4.6.0" - args: - dependency: transitive - description: - name: args - url: "https://pub.dartlang.org" - source: hosted - version: "2.3.1" async: dependency: transitive description: @@ -36,27 +15,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0" - build: - dependency: transitive - description: - name: build - url: "https://pub.dartlang.org" - source: hosted - version: "2.3.0" - built_collection: - dependency: transitive - description: - name: built_collection - url: "https://pub.dartlang.org" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - url: "https://pub.dartlang.org" - source: hosted - version: "8.4.1" characters: dependency: transitive description: @@ -78,13 +36,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.0" - code_builder: - dependency: transitive - description: - name: code_builder - url: "https://pub.dartlang.org" - source: hosted - version: "4.2.0" collection: dependency: transitive description: @@ -92,13 +43,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.16.0" - convert: - dependency: transitive - description: - name: convert - url: "https://pub.dartlang.org" - source: hosted - version: "3.0.2" cross_file: dependency: transitive description: @@ -106,13 +50,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.3.3+1" - crypto: - dependency: transitive - description: - name: crypto - url: "https://pub.dartlang.org" - source: hosted - version: "3.0.2" cupertino_icons: dependency: "direct main" description: @@ -120,13 +57,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.5" - dart_style: - dependency: transitive - description: - name: dart_style - url: "https://pub.dartlang.org" - source: hosted - version: "2.2.3" fake_async: dependency: transitive description: @@ -134,20 +64,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.0" - file: - dependency: transitive - description: - name: file - url: "https://pub.dartlang.org" - source: hosted - version: "6.1.4" - fixnum: - dependency: transitive - description: - name: fixnum - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.1" flutter: dependency: "direct main" description: flutter @@ -184,13 +100,6 @@ packages: description: flutter source: sdk version: "0.0.0" - glob: - dependency: transitive - description: - name: glob - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" http: dependency: transitive description: @@ -254,13 +163,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.0" - logging: - dependency: transitive - description: - name: logging - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.2" matcher: dependency: transitive description: @@ -282,20 +184,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.7.0" - mockito: - dependency: "direct main" - description: - name: mockito - url: "https://pub.dartlang.org" - source: hosted - version: "5.3.0" - package_config: - dependency: transitive - description: - name: package_config - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0" path: dependency: transitive description: @@ -310,25 +198,11 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.2" - pub_semver: - dependency: transitive - description: - name: pub_semver - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.1" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.2" source_span: dependency: transitive description: @@ -385,20 +259,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.2" - watcher: - dependency: transitive - description: - name: watcher - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.1" - yaml: - dependency: transitive - description: - name: yaml - url: "https://pub.dartlang.org" - source: hosted - version: "3.1.1" sdks: dart: ">=2.17.6 <3.0.0" flutter: ">=2.8.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index d6f3dd3..1e9dca0 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -38,8 +38,6 @@ dependencies: flutter_image_picker: path: ../ - mockito: ^5.3.0 - dev_dependencies: flutter_test: sdk: flutter diff --git a/pubspec.yaml b/pubspec.yaml index bdee5a3..c8ef9d3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,12 +11,12 @@ dependencies: flutter: sdk: flutter image_picker: ^0.8.5+3 - mockito: ^5.3.0 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 + mocktail: ^0.3.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/test/mocks/image_picker_mock.dart b/test/mocks/image_picker_mock.dart new file mode 100644 index 0000000..be3c460 --- /dev/null +++ b/test/mocks/image_picker_mock.dart @@ -0,0 +1,4 @@ +import 'package:image_picker/image_picker.dart'; +import 'package:mocktail/mocktail.dart'; + +class ImagePickerMock extends Mock implements ImagePicker {} diff --git a/test/src/services/image_picker_service_test.dart b/test/src/services/image_picker_service_test.dart index a381cc0..7da95d0 100644 --- a/test/src/services/image_picker_service_test.dart +++ b/test/src/services/image_picker_service_test.dart @@ -1,3 +1,45 @@ -main() { - -} +// import 'dart:typed_data'; + +// import 'package:flutter/material.dart'; +// import 'package:flutter_image_picker/src/services/image_picker_service.dart'; +// import 'package:flutter_test/flutter_test.dart'; +// import 'package:image_picker/image_picker.dart'; +// import 'package:mocktail/mocktail.dart'; + +// import '../../mocks/image_picker_mock.dart'; + +// void main() { +// WidgetsFlutterBinding.ensureInitialized(); + +// late ImagePickerMock imagePickerMock; +// late ImagePickerService sut; + +// setUp(() { +// imagePickerMock = ImagePickerMock(); +// sut = ImagePickerService(); +// }); + +// group("Image Picker Test with camera option", () { +// setUp(() { +// imagePickerMock = ImagePickerMock(); +// sut = ImagePickerService(); +// }); +// test("When function called with Camera parameter returns correct picture", +// () async { +// // Setup the neccesary variables to test +// XFile? xFile = XFile("Test", bytes: Uint8List(50)); + +// // //Mock the pickImage function of the image picker to return an image +// when(() => imagePickerMock.pickImage(source: ImageSource.gallery)) +// .thenAnswer((_) => Future.value(xFile)); + +// // Execute test +// var image = await sut.pickImage(ImageSource.gallery); + +// // //Assert test +// expect(image, Uint8List(50)); +// }); +// }); + +// group("Image Picker Widget with gallery option", () {}); +// } diff --git a/test/src/ui/image_picker_ui_test.dart b/test/src/ui/image_picker_ui_test.dart index b70a2be..64b599b 100644 --- a/test/src/ui/image_picker_ui_test.dart +++ b/test/src/ui/image_picker_ui_test.dart @@ -1,3 +1,62 @@ -main() { - -} \ No newline at end of file +import 'package:flutter/material.dart'; +import 'package:flutter_image_picker/image_picker.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets('Image Picker Shows With Normal Theme', (tester) async { + await tester.pumpWidget(MaterialApp(home: Material(child: ImagePicker()))); + + final titleFinder = find.text(const ImagePickerTheme().title); + final makePhotoIconFinder = + find.byIcon(const ImagePickerTheme().makePhotoIcon); + final makePhotoTextFinder = + find.text(const ImagePickerTheme().makePhotoText); + final selectImageIconFinder = + find.byIcon(const ImagePickerTheme().selectImageIcon); + final selectImageTextFinder = + find.text(const ImagePickerTheme().selectImageText); + final closebuttonTextFinder = + find.text(const ImagePickerTheme().closeButtonText); + + expect(titleFinder, findsOneWidget); + expect(makePhotoIconFinder, findsOneWidget); + expect(makePhotoTextFinder, findsOneWidget); + expect(selectImageIconFinder, findsOneWidget); + expect(selectImageTextFinder, findsOneWidget); + expect(closebuttonTextFinder, findsOneWidget); + }); + + testWidgets('Image Picker Shows With Custom Theme', (tester) async { + String title = "title"; + IconData makePhotoIcon = Icons.motorcycle; + String makePhotoText = "taaaake image"; + IconData selectImageIcon = Icons.chevron_left; + String selectImageText = "seleeeeect image"; + String closeButtonText = "Close Dialog!"; + + await tester.pumpWidget(MaterialApp( + home: Material( + child: ImagePicker( + imagePickerTheme: ImagePickerTheme( + title: title, + makePhotoIcon: makePhotoIcon, + makePhotoText: makePhotoText, + selectImageIcon: selectImageIcon, + selectImageText: selectImageText, + closeButtonText: closeButtonText))))); + + final titleFinder = find.text(title); + final makePhotoIconFinder = find.byIcon(makePhotoIcon); + final makePhotoTextFinder = find.text(makePhotoText); + final selectImageIconFinder = find.byIcon(selectImageIcon); + final selectImageTextFinder = find.text(selectImageText); + final closebuttonTextFinder = find.text(closeButtonText); + + expect(titleFinder, findsOneWidget); + expect(makePhotoIconFinder, findsOneWidget); + expect(makePhotoTextFinder, findsOneWidget); + expect(selectImageIconFinder, findsOneWidget); + expect(selectImageTextFinder, findsOneWidget); + expect(closebuttonTextFinder, findsOneWidget); + }); +}