Skip to content

Commit

Permalink
fix: build test code
Browse files Browse the repository at this point in the history
  • Loading branch information
Suraj Adhikari committed Nov 17, 2021
1 parent 2048701 commit e247044
Show file tree
Hide file tree
Showing 3 changed files with 138 additions and 126 deletions.
118 changes: 60 additions & 58 deletions test/assets/device_item_icon_test.dart
Original file line number Diff line number Diff line change
@@ -1,59 +1,61 @@
// import 'package:yonomi_platform_sdk/repository/devices/devices_repository.dart'
// as Devices;
import 'package:yonomi_platform_sdk/yonomi-sdk.dart' as Devices;
import 'package:yonomi_device_widgets/assets/traits/device_item_icon.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

// Widget createIconWidget(List<Devices.Trait> traits) {
// return MaterialApp(
// home: Scaffold(
// body: Container(child: DeviceItemIcon.getIcon(traits)),
// ),
// );
// }
//
// class UnknownTrait extends Devices.Trait {
// UnknownTrait(String name, Devices.State state) : super(name, state);
// }
//
// void main() {
// testWidgets('should render correct thermostat trait icon',
// (WidgetTester tester) async {
// final thermostatDevice = [
// Devices.ThermostatTrait('thermostat', Devices.TargetTemperature(22))
// ];
// await tester.pumpWidget(createIconWidget(thermostatDevice));
// expect(find.widgetWithText(Center, '22'), findsOneWidget);
// });
//
// testWidgets('should render n/a if target temperature is null',
// (WidgetTester tester) async {
// final thermostatDevice = [
// Devices.ThermostatTrait('thermostat', Devices.TargetTemperature(null))
// ];
// await tester.pumpWidget(createIconWidget(thermostatDevice));
// expect(find.widgetWithText(Center, 'N/A'), findsOneWidget);
// });
//
// testWidgets('should render correct Lock trait icon when unlocked',
// (WidgetTester tester) async {
// final lockDevice = [
// Devices.LockUnlockTrait('lockunlock', Devices.IsLocked(false))
// ];
// await tester.pumpWidget(createIconWidget(lockDevice));
// expect(find.byIcon(Icons.lock_open), findsOneWidget);
// });
//
// testWidgets('should render correct Lock trait icon when locked',
// (WidgetTester tester) async {
// final lockDevice = [
// Devices.LockUnlockTrait('lockunlock', Devices.IsLocked(true))
// ];
// await tester.pumpWidget(createIconWidget(lockDevice));
// expect(find.byIcon(Icons.lock), findsOneWidget);
// });
//
// testWidgets('should render unknown icon if trait not found',
// (WidgetTester tester) async {
// final unknownDevice = [UnknownTrait('unknown', Devices.IsLocked(true))];
// await tester.pumpWidget(createIconWidget(unknownDevice));
// expect(find.byIcon(Icons.device_unknown), findsOneWidget);
// });
// }
Widget createIconWidget(List<Devices.Trait> traits) {
return MaterialApp(
home: Scaffold(
body: Container(child: DeviceItemIcon.getIcon(traits)),
),
);
}

class UnknownTrait extends Devices.Trait {
UnknownTrait(String name, Devices.State state) : super(name, state);
}

void main() {
testWidgets('should render correct thermostat trait icon',
(WidgetTester tester) async {
final thermostatDevice = [
Devices.ThermostatTrait('thermostat', Devices.TargetTemperature(22))
];
await tester.pumpWidget(createIconWidget(thermostatDevice));
expect(find.widgetWithText(Center, '22'), findsOneWidget);
});

testWidgets('should render n/a if target temperature is null',
(WidgetTester tester) async {
final thermostatDevice = [
Devices.ThermostatTrait('thermostat', Devices.TargetTemperature(null))
];
await tester.pumpWidget(createIconWidget(thermostatDevice));
expect(find.widgetWithText(Center, 'N/A'), findsOneWidget);
});

testWidgets('should render correct Lock trait icon when unlocked',
(WidgetTester tester) async {
final lockDevice = [
Devices.LockTrait('lockunlock', Devices.IsLocked(false))
];
await tester.pumpWidget(createIconWidget(lockDevice));
expect(find.byIcon(Icons.lock_open), findsOneWidget);
});

testWidgets('should render correct Lock trait icon when locked',
(WidgetTester tester) async {
final lockDevice = [
Devices.LockTrait('lockunlock', Devices.IsLocked(true))
];
await tester.pumpWidget(createIconWidget(lockDevice));
expect(find.byIcon(Icons.lock), findsOneWidget);
});

testWidgets('should render unknown icon if trait not found',
(WidgetTester tester) async {
final unknownDevice = [UnknownTrait('unknown', Devices.IsLocked(true))];
await tester.pumpWidget(createIconWidget(unknownDevice));
expect(find.byIcon(Icons.device_unknown), findsOneWidget);
});
}
62 changes: 33 additions & 29 deletions test/providers/lock_provider_test.dart
Original file line number Diff line number Diff line change
@@ -1,35 +1,39 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:yonomi_device_widgets/providers/lock_provider.dart';
import 'package:yonomi_platform_sdk/third_party/yonomi_graphql_schema/schema.docs.schema.gql.dart';
import 'package:yonomi_platform_sdk/yonomi-sdk.dart';

class MockGetLockDetailsFunction extends Mock {
Future<Device> call(Request request, String id);
Future<Device> call(Request? request, String? id);
}

class MockSendLockUnlockFunction extends Mock {
Future<void> call(Request request, String id, bool lockUnlock);
Future<void> call(Request? request, String? id, bool lockUnlock);
}

void main() {
test('Calling setLockUnlockAction calls repository method', () async {
Request request = Request("", {});
GetLockDetailsFunction mockLockDetailsMethod = MockGetLockDetailsFunction() as Future<Device> Function(Request?, String?);
GetLockDetailsFunction mockLockDetailsMethod = MockGetLockDetailsFunction()
as Future<Device> Function(Request?, String?);
SendLockUnlockFunction mockSendLockUnlockMethod =
MockSendLockUnlockFunction() as Future<void> Function(Request?, String?, bool);
MockSendLockUnlockFunction() as Future<void> Function(
Request?, String?, bool?);
LockProvider lockProvider = LockProvider(request, "deviceId",
injectLockDetailsMethod: mockLockDetailsMethod);

await lockProvider.setLockUnlockAction("deviceId", true,
injectLockDetailsMethod: mockLockDetailsMethod,
injectSendLockUnlockMethod: mockSendLockUnlockMethod);

verify(mockSendLockUnlockMethod(any, any, any!)).called(1);
verify(mockSendLockUnlockMethod(any, any, false)).called(1);
});

test('Calling getDeviceDetail calls repository method', () async {
Request request = Request("", {});
GetLockDetailsFunction mockLockDetailsMethod = MockGetLockDetailsFunction() as Future<Device> Function(Request?, String?);
GetLockDetailsFunction mockLockDetailsMethod = MockGetLockDetailsFunction()
as Future<Device> Function(Request?, String?);
LockProvider lockProvider = LockProvider(request, "deviceId",
injectLockDetailsMethod: mockLockDetailsMethod);

Expand All @@ -40,28 +44,28 @@ void main() {
});

test('Device data is set using DeviceRepository\'s return values', () async {
// Request request = Request("", {});
//
// GetLockDetailsFunction mockLockDetailsMethod = MockGetLockDetailsFunction();
// when(mockLockDetailsMethod(any, any)).thenAnswer((_) => Future.value(
// Device(
// "someId",
// "someDisplayName",
// "someDescription",
// "someManufacturerName",
// "someModel",
// "someFirmwareV",
// DateTime.now(),
// DateTime.now(),
// [],
// ),
// ));
// LockProvider lockProvider = LockProvider(request, "deviceId",
// injectLockDetailsMethod: mockLockDetailsMethod);
//
// await lockProvider.getDeviceDetail("test",
// injectLockDetailsMethod: mockLockDetailsMethod);
//
// expect(lockProvider.deviceDetail.displayName, "someDisplayName");
Request request = Request("", {});

GetLockDetailsFunction mockLockDetailsMethod = MockGetLockDetailsFunction();
when(mockLockDetailsMethod(any, any)).thenAnswer((_) => Future.value(
Device(
"someId",
"someDisplayName",
"someDescription",
"someManufacturerName",
"someModel",
"someFirmwareV",
GDateTime(),
GDateTime(),
[],
),
));
LockProvider lockProvider = LockProvider(request, "deviceId",
injectLockDetailsMethod: mockLockDetailsMethod);

await lockProvider.getDeviceDetail("test",
injectLockDetailsMethod: mockLockDetailsMethod);

expect(lockProvider.deviceDetail?.displayName, "someDisplayName");
});
}
84 changes: 45 additions & 39 deletions test/providers/thermostat_provider_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ import 'package:yonomi_platform_sdk/third_party/yonomi_graphql_schema/schema.doc
import 'package:yonomi_platform_sdk/yonomi-sdk.dart';

class MockSetPointActionFunction extends Mock {
Future<void> call(Request request, String id, double temperature);
Future<void> call(Request? request, String? id, double? temperature);
}

class MockSetModeFunction extends Mock {
Future<void> call(Request request, String id, GThermostatMode mode);
Future<void> call(Request? request, String? id, GThermostatMode? mode);
}

class MockGetThermostatDetailsFunction extends Mock {
Future<Device> call(Request request, String id);
Future<Device> call(Request? request, String? id);
}

void main() {
Expand All @@ -25,12 +25,14 @@ void main() {
MockSetPointActionFunction();
ThermostatProvider thermostatProvider = ThermostatProvider(
request, "deviceId",
injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction as Future<Device> Function(Request?, String)?);
injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction
as Future<Device> Function(Request?, String)?);

await thermostatProvider.setPointAction("DeviceId", 22.0,
injectSetPointThermostatMethod: mockSetPointActionFunction as Future<void> Function(Request?, String, double)?);
injectSetPointThermostatMethod: mockSetPointActionFunction
as Future<void> Function(Request?, String, double)?);

verify(mockSetPointActionFunction(any!, any!, 22.0)).called(1);
verify(mockSetPointActionFunction(any, any, 22.0)).called(1);
});

test('Calling setThermostatMode calls repository method', () async {
Expand All @@ -40,12 +42,14 @@ void main() {
MockSetModeFunction mockSetModeFunction = MockSetModeFunction();
ThermostatProvider thermostatProvider = ThermostatProvider(
request, "deviceId",
injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction as Future<Device> Function(Request?, String)?);
injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction
as Future<Device> Function(Request?, String)?);

await thermostatProvider.setThermostatMode("DeviceId", GThermostatMode.AUTO,
injectSetModeMethod: mockSetModeFunction as Future<void> Function(Request?, String?, GThermostatMode)?);
injectSetModeMethod: mockSetModeFunction as Future<void> Function(
Request?, String?, GThermostatMode)?);

verify(mockSetModeFunction(any!, any!, GThermostatMode.AUTO)).called(1);
verify(mockSetModeFunction(any, any, GThermostatMode.AUTO)).called(1);
});

test('Calling getDeviceDetail calls repository method', () async {
Expand All @@ -54,41 +58,43 @@ void main() {
MockGetThermostatDetailsFunction();
ThermostatProvider thermostatProvider = ThermostatProvider(
request, "deviceId",
injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction as Future<Device> Function(Request?, String)?);
injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction
as Future<Device> Function(Request?, String)?);

await thermostatProvider.getDeviceDetail("DeviceId",
injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction as Future<Device> Function(Request?, String)?);
injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction
as Future<Device> Function(Request?, String)?);

verify(mockGetThermostatDetailsFunction(any!, any!)).called(2);
verify(mockGetThermostatDetailsFunction(any, any)).called(2);
});

test('Device data is set using DeviceRepository\'s return values', () async {
// Request request = Request("", {});
//
// MockGetThermostatDetailsFunction mockGetThermostatDetailsFunction =
// MockGetThermostatDetailsFunction();
// when(mockGetThermostatDetailsFunction(any, any))
// .thenAnswer((_) => Future.value(
// Device(
// "someId",
// "someDisplayName",
// "someDescription",
// "someManufacturerName",
// "someModel",
// "someFirmwareV",
// DateTime.now(),
// DateTime.now(),
// [ThermostatTrait("", TargetTemperature(23.1))],
// ),
// ));
// ThermostatProvider thermostatProvider = ThermostatProvider(
// request, "deviceId",
// injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction);
//
// await thermostatProvider.getDeviceDetail("DeviceId",
// injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction);
//
// expect(thermostatProvider.deviceDetail.displayName, "someDisplayName");
// expect(thermostatProvider.thermostatTargetTemperature, 23.1);
Request request = Request("", {});

MockGetThermostatDetailsFunction mockGetThermostatDetailsFunction =
MockGetThermostatDetailsFunction();
when(mockGetThermostatDetailsFunction(any, any))
.thenAnswer((_) => Future.value(
Device(
"someId",
"someDisplayName",
"someDescription",
"someManufacturerName",
"someModel",
"someFirmwareV",
GDateTime(),
GDateTime(),
[ThermostatTrait("", TargetTemperature(23.1))],
),
));
ThermostatProvider thermostatProvider = ThermostatProvider(
request, "deviceId",
injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction);

await thermostatProvider.getDeviceDetail("DeviceId",
injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction);

expect(thermostatProvider.deviceDetail?.displayName, "someDisplayName");
expect(thermostatProvider.thermostatTargetTemperature, 23.1);
});
}

0 comments on commit e247044

Please sign in to comment.