From 41431ba0b88116dd442882321ddefbee50ff6a30 Mon Sep 17 00:00:00 2001 From: Vadim Date: Wed, 21 Jun 2023 12:49:18 +0200 Subject: [PATCH] `CaffeineService` tests --- lib/data/caffeine_service.dart | 4 +- test/data/caffeine_service_test.dart | 76 ++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 test/data/caffeine_service_test.dart diff --git a/lib/data/caffeine_service.dart b/lib/data/caffeine_service.dart index cfb0d50..da36968 100644 --- a/lib/data/caffeine_service.dart +++ b/lib/data/caffeine_service.dart @@ -9,7 +9,7 @@ class CaffeineService { return _methodChannel.invokeMethod("isKeepScreenOn").then((value) => value!); } - Future keepScreenOn(bool keep) async { - await _methodChannel.invokeMethod("setKeepScreenOn", keep); + Future keepScreenOn(bool keep) async { + return _methodChannel.invokeMethod("setKeepScreenOn", keep).then((value) => value!); } } diff --git a/test/data/caffeine_service_test.dart b/test/data/caffeine_service_test.dart new file mode 100644 index 0000000..a807a21 --- /dev/null +++ b/test/data/caffeine_service_test.dart @@ -0,0 +1,76 @@ +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:lightmeter/data/caffeine_service.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + late CaffeineService service; + + const methodChannel = MethodChannel('com.vodemn.lightmeter/keepScreenOn'); + Future? cameraMethodCallSuccessHandler(MethodCall methodCall) async { + switch (methodCall.method) { + case "isKeepScreenOn": + return true; + case "setKeepScreenOn": + return methodCall.arguments as bool; + default: + return null; + } + } + + setUp(() { + service = const CaffeineService(); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, cameraMethodCallSuccessHandler); + }); + + tearDown(() { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, null); + }); + + group( + 'isKeepScreenOn()', + () { + test('true', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, null); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (methodCall) async { + switch (methodCall.method) { + case "isKeepScreenOn": + return true; + default: + return null; + } + }); + expectLater(service.isKeepScreenOn(), completion(true)); + }); + + test('false', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, null); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (methodCall) async { + switch (methodCall.method) { + case "isKeepScreenOn": + return false; + default: + return null; + } + }); + expectLater(service.isKeepScreenOn(), completion(false)); + }); + }, + ); + + group( + 'keepScreenOn()', + () { + test('true', () async => expectLater(service.keepScreenOn(true), completion(true))); + + test('false', () async => expectLater(service.keepScreenOn(false), completion(false))); + }, + ); +}