Skip to content

Commit

Permalink
fix: provider tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Suraj Adhikari committed Nov 19, 2021
1 parent 483a529 commit 0f619f4
Show file tree
Hide file tree
Showing 5 changed files with 226 additions and 102 deletions.
1 change: 0 additions & 1 deletion lib/providers/lock_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ class LockProvider extends ChangeNotifier {

var maxRetries = 0;
while (getLockTrait()?.state.value != setLock && maxRetries < 10) {
print('didnt reach here===========');
// Wait more time
_deviceDetail = await lockDetails(_request, deviceId);
await Future.delayed(Duration(milliseconds: 750));
Expand Down
5 changes: 2 additions & 3 deletions lib/providers/thermostat_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,10 @@ typedef GetThermostatDetailsFunction = Future<Device> Function(

class ThermostatProvider extends ChangeNotifier {
ThermostatProvider(Request request, String deviceId,
{GetThermostatDetailsFunction injectGetThermostatDetailsMethod =
{GetThermostatDetailsFunction getThermostatDetails =
DevicesRepository.getThermostatDetails}) {
this._request = request;
getDeviceDetail(deviceId,
getThermostatDetails: injectGetThermostatDetailsMethod);
getDeviceDetail(deviceId, getThermostatDetails: getThermostatDetails);
}

late Request _request;
Expand Down
89 changes: 45 additions & 44 deletions test/providers/lock_provider_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,58 +38,59 @@ void main() {
await lockProvider.setLockUnlockAction('deviceId', true,
lockDetails: mockLockDetailsMethod,
sendLockUnlock: mockSendLockUnlockMethod);
verify(mockLockDetailsMethod(request, 'deviceId')).called(1);

verify(mockSendLockUnlockMethod(request, 'deviceId', true)).called(1);
});

// test('Calling getDeviceDetail calls repository method', () async {
// Request request = Request("", {});
// final mockLockDetailsMethod = MockGetLockDetails();
// final device = Device(
// 'deviceId',
// 'name',
// 'description',
// 'manufacturerName',
// 'model',
// null,
// GDateTime('value'),
// GDateTime('value'),
// [LockTrait('name', IsLocked(true))]);
// when(mockLockDetailsMethod.call(request, 'deviceId'))
// .thenAnswer((_) => Future.value(device));
// LockProvider lockProvider = LockProvider(request, 'deviceId',
// getLockDetails: mockLockDetailsMethod);
test('Calling getDeviceDetail calls repository method', () async {
Request request = Request("", {});
final mockLockDetailsMethod = MockGetLockDetails();
final device = Device(
'test',
'name',
'description',
'manufacturerName',
'model',
null,
GDateTime('value'),
GDateTime('value'),
[LockTrait('name', IsLocked(true))]);
when(mockLockDetailsMethod.call(request, 'test'))
.thenAnswer((_) => Future.value(device));
LockProvider lockProvider =
LockProvider(request, 'test', getLockDetails: mockLockDetailsMethod);

// await lockProvider.getDeviceDetail('test',
// getLockDetails: mockLockDetailsMethod);
await lockProvider.getDeviceDetail('test',
getLockDetails: mockLockDetailsMethod);

// verify(mockLockDetailsMethod(request, 'deviceId')).called(2);
// });
verify(mockLockDetailsMethod(request, 'test')).called(2);
});

// test('Device data is set using DeviceRepository\'s return values', () async {
// Request request = Request("", {});
test('Device data is set using DeviceRepository\'s return values', () async {
Request request = Request("", {});

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

// await lockProvider.getDeviceDetail('test',
// getLockDetails: mockLockDetailsMethod);
await lockProvider.getDeviceDetail('deviceId',
getLockDetails: mockLockDetailsMethod);

// expect(lockProvider.deviceDetail?.displayName, 'someDisplayName');
// });
expect(lockProvider.deviceDetail.displayName, 'someDisplayName');
});
}
157 changes: 103 additions & 54 deletions test/providers/thermostat_provider_test.dart
Original file line number Diff line number Diff line change
@@ -1,96 +1,145 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:yonomi_device_widgets/providers/thermostat_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 MockSetPointActionFunction extends Mock {
Future<void> call(Request? request, String? id, double? temperature);
import 'thermostat_provider_test.mocks.dart';

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

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

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

@GenerateMocks([
SetPoint,
SetMode,
GetThermostatDetails,
])
void main() {
test('Calling setPointAction calls repository method', () async {
Request request = Request("", {});
MockGetThermostatDetailsFunction mockGetThermostatDetailsFunction =
MockGetThermostatDetailsFunction();
MockSetPointActionFunction mockSetPointActionFunction =
MockSetPointActionFunction();
Request request = Request('', {});
final mockGetThermostatDetailsFunction = MockGetThermostatDetails();
final mockSetPointActionFunction = MockSetPoint();
when(mockSetPointActionFunction.call(any, any, any))
.thenAnswer((_) async => null);
when(mockGetThermostatDetailsFunction.call(any, any))
.thenAnswer((_) async => Future.value(
Device(
'someId',
'someDisplayName',
'someDescription',
'someManufacturerName',
'someModel',
'someFirmwareV',
GDateTime('value'),
GDateTime('value'),
[ThermostatTrait('', TargetTemperature(23.1))],
),
));
ThermostatProvider thermostatProvider = ThermostatProvider(
request, "deviceId",
injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction);
request, 'deviceId',
getThermostatDetails: mockGetThermostatDetailsFunction);

await thermostatProvider.setPointAction("DeviceId", 22.0,
await thermostatProvider.setPointAction('DeviceId', 22.0,
setPoint: mockSetPointActionFunction);

verify(mockSetPointActionFunction(request, "someDeviceId", 22.0)).called(1);
verify(mockSetPointActionFunction.call(request, 'DeviceId', 22.0))
.called(1);
});

// test('Calling setThermostatMode calls repository method', () async {
// Request request = Request("", {});
// MockGetThermostatDetailsFunction mockGetThermostatDetailsFunction =
// MockGetThermostatDetailsFunction();
// MockSetModeFunction mockSetModeFunction = MockSetModeFunction();
// ThermostatProvider thermostatProvider = ThermostatProvider(
// request, "deviceId",
// injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction
// as Future<Device> Function(Request?, String)?);
test('Calling setThermostatMode calls repository method', () async {
Request request = Request('', {});
final mockGetThermostatDetailsFunction = MockGetThermostatDetails();
final mockSetModeFunction = MockSetMode();
when(mockGetThermostatDetailsFunction.call(any, any))
.thenAnswer((_) async => Future.value(
Device(
'someId',
'someDisplayName',
'someDescription',
'someManufacturerName',
'someModel',
'someFirmwareV',
GDateTime('value'),
GDateTime('value'),
[ThermostatTrait('', TargetTemperature(23.1))],
),
));
when(mockSetModeFunction.call(any, any, any)).thenAnswer((_) async => null);
ThermostatProvider thermostatProvider = ThermostatProvider(
request, 'deviceId',
getThermostatDetails: mockGetThermostatDetailsFunction);

// await thermostatProvider.setThermostatMode("DeviceId", GThermostatMode.AUTO,
// injectSetModeMethod: mockSetModeFunction);
await thermostatProvider.setThermostatMode('DeviceId', GThermostatMode.AUTO,
setMode: mockSetModeFunction);

// verify(mockSetModeFunction(request, "someDeviceId", GThermostatMode.AUTO))
// .called(1);
// });
verify(mockSetModeFunction.call(request, 'DeviceId', GThermostatMode.AUTO))
.called(1);
});

test('Calling getDeviceDetail calls repository method', () async {
Request request = Request("", {});
MockGetThermostatDetailsFunction mockGetThermostatDetailsFunction =
MockGetThermostatDetailsFunction();
ThermostatProvider thermostatProvider = ThermostatProvider(
request, "deviceId",
injectGetThermostatDetailsMethod: mockGetThermostatDetailsFunction);
Request request = Request('', {});
final mockGetThermostatDetailsFunction = MockGetThermostatDetails();

await thermostatProvider.getDeviceDetail("DeviceId",
when(mockGetThermostatDetailsFunction.call(any, any))
.thenAnswer((_) async => Future.value(
Device(
'deviceId',
'someDisplayName',
'someDescription',
'someManufacturerName',
'someModel',
'someFirmwareV',
GDateTime('value'),
GDateTime('value'),
[ThermostatTrait('', TargetTemperature(23.1))],
),
));
ThermostatProvider thermostatProvider = ThermostatProvider(
request, 'deviceId',
getThermostatDetails: mockGetThermostatDetailsFunction);
await thermostatProvider.getDeviceDetail('deviceId',
getThermostatDetails: mockGetThermostatDetailsFunction);

verify(mockGetThermostatDetailsFunction(request, "someDeviceId")).called(2);
verify(mockGetThermostatDetailsFunction.call(request, 'deviceId'))
.called(2);
});

test('Device data is set using DeviceRepository\'s return values', () async {
Request request = Request("", {});
Request request = Request('', {});

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

await thermostatProvider.getDeviceDetail("DeviceId",
await thermostatProvider.getDeviceDetail('deviceId',
getThermostatDetails: mockGetThermostatDetailsFunction);

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

0 comments on commit 0f619f4

Please sign in to comment.