Skip to content

Commit

Permalink
fix: all tests passing
Browse files Browse the repository at this point in the history
  • Loading branch information
Suraj Adhikari committed Nov 19, 2021
1 parent 0f619f4 commit 6999c74
Show file tree
Hide file tree
Showing 4 changed files with 238 additions and 39 deletions.
47 changes: 29 additions & 18 deletions test/components/lock_widget_test.dart
Original file line number Diff line number Diff line change
@@ -1,30 +1,42 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:provider/provider.dart';
import 'package:yonomi_device_widgets/components/lock_widget.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 MockLockProvider extends Mock implements LockProvider {}

class MockDevice extends Mock implements Device {}

MockDevice mockDeviceDetail = MockDevice();
MockLockProvider mockProvider = MockLockProvider();

Widget getAppWithLockWidget() {
return MaterialApp(
home: ChangeNotifierProvider<LockProvider>.value(
value: mockProvider,
child: LockWidget(),
));
}
import 'lock_widget_test.mocks.dart';

@GenerateMocks([LockProvider])
void main() {
final mockProvider = MockLockProvider();
final device = Device(
'id',
'name',
'description',
'manufacturerName',
'model',
null,
GDateTime('value'),
GDateTime('value'),
[LockTrait('name', IsLocked(true))]);

Widget getAppWithLockWidget() {
return MaterialApp(
home: ChangeNotifierProvider<LockProvider>.value(
value: mockProvider,
child: LockWidget(),
));
}

setUp(() {
when(mockProvider.deviceDetail).thenReturn(mockDeviceDetail);
when(mockProvider.deviceDetail).thenReturn(device);
when(mockProvider.setLockUnlockAction(any, any))
.thenAnswer((_) => Future.value());
});

testWidgets('Circular progress indicator should be shown when loading',
Expand All @@ -37,15 +49,14 @@ void main() {
});

testWidgets('Lock Widget shows device name', (WidgetTester tester) async {
when(mockDeviceDetail.displayName).thenReturn("LockDeviceUnderTest");
when(mockProvider.loadingDetail).thenReturn(false);
when(mockProvider.loadingAction).thenReturn(false);

when(mockProvider.isLocked).thenReturn(false);

await tester.pumpWidget(getAppWithLockWidget());

expect(find.text("LockDeviceUnderTest"), findsOneWidget);
expect(find.text('name'), findsOneWidget);
});

testWidgets('Lock Widget shows Unlocked Icon when state is Unlocked',
Expand Down Expand Up @@ -80,6 +91,6 @@ void main() {

await tester.tap(find.byIcon(Icons.lock));

verify(mockProvider.setLockUnlockAction('deviceId', true)).called(1);
verify(mockProvider.setLockUnlockAction(any, any)).called(1);
});
}
99 changes: 99 additions & 0 deletions test/components/lock_widget_test.mocks.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
// Mocks generated by Mockito 5.0.15 from annotations
// in yonomi_device_widgets/test/components/lock_widget_test.dart.
// Do not manually edit this file.

import 'dart:async' as _i4;
import 'dart:ui' as _i7;

import 'package:mockito/mockito.dart' as _i1;
import 'package:yonomi_device_widgets/providers/lock_provider.dart' as _i3;
import 'package:yonomi_platform_sdk/src/repository/devices/devices_repository.dart'
as _i5;
import 'package:yonomi_platform_sdk/src/repository/devices/lock_repository.dart'
as _i6;
import 'package:yonomi_platform_sdk/yonomi-sdk.dart' as _i2;

// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references
// ignore_for_file: implementation_imports
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis

class _FakeDevice_0 extends _i1.Fake implements _i2.Device {}

/// A class which mocks [LockProvider].
///
/// See the documentation for Mockito's code generation for more information.
class MockLockProvider extends _i1.Mock implements _i3.LockProvider {
MockLockProvider() {
_i1.throwOnMissingStub(this);
}

@override
bool get loadingDetail =>
(super.noSuchMethod(Invocation.getter(#loadingDetail), returnValue: false)
as bool);
@override
set loadingDetail(bool? _loadingDetail) =>
super.noSuchMethod(Invocation.setter(#loadingDetail, _loadingDetail),
returnValueForMissingStub: null);
@override
bool get loadingAction =>
(super.noSuchMethod(Invocation.getter(#loadingAction), returnValue: false)
as bool);
@override
set loadingAction(bool? _loadingAction) =>
super.noSuchMethod(Invocation.setter(#loadingAction, _loadingAction),
returnValueForMissingStub: null);
@override
_i2.Device get deviceDetail =>
(super.noSuchMethod(Invocation.getter(#deviceDetail),
returnValue: _FakeDevice_0()) as _i2.Device);
@override
bool get isLocked =>
(super.noSuchMethod(Invocation.getter(#isLocked), returnValue: false)
as bool);
@override
bool get hasListeners =>
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false)
as bool);
@override
_i4.Future<void> getDeviceDetail(String? deviceId,
{_i3.GetLockDetailsFunction? getLockDetails =
_i5.DevicesRepository.getLockDetails}) =>
(super.noSuchMethod(
Invocation.method(
#getDeviceDetail, [deviceId], {#getLockDetails: getLockDetails}),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
@override
_i4.Future<void> setLockUnlockAction(String? deviceId, bool? setLock,
{_i3.GetLockDetailsFunction? lockDetails =
_i5.DevicesRepository.getLockDetails,
_i3.SendLockUnlockFunction? sendLockUnlock =
_i6.LockRepository.sendLockUnlockAction}) =>
(super.noSuchMethod(
Invocation.method(#setLockUnlockAction, [deviceId, setLock],
{#lockDetails: lockDetails, #sendLockUnlock: sendLockUnlock}),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
@override
void addListener(_i7.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#addListener, [listener]),
returnValueForMissingStub: null);
@override
void removeListener(_i7.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#removeListener, [listener]),
returnValueForMissingStub: null);
@override
void dispose() => super.noSuchMethod(Invocation.method(#dispose, []),
returnValueForMissingStub: null);
@override
void notifyListeners() =>
super.noSuchMethod(Invocation.method(#notifyListeners, []),
returnValueForMissingStub: null);
@override
String toString() => super.toString();
}
44 changes: 23 additions & 21 deletions test/components/modes_toolbar_test.dart
Original file line number Diff line number Diff line change
@@ -1,28 +1,33 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:provider/provider.dart';
import 'package:yonomi_device_widgets/components/modes_toolbar.dart';
import 'package:yonomi_device_widgets/providers/thermostat_provider.dart';
import 'package:yonomi_device_widgets/ui/ring_border.dart';
import 'package:yonomi_platform_sdk/third_party/yonomi_graphql_schema/schema.docs.schema.gql.dart';

class MockThermostatProvider extends Mock implements ThermostatProvider {}

MockThermostatProvider mockProvider = MockThermostatProvider();

Widget createModesToolbar() {
return MaterialApp(
home: ChangeNotifierProvider<ThermostatProvider>(
create: (_) => mockProvider,
child: Column(children: [
ModesToolbar(deviceId: ""),
]),
),
);
}
import 'modes_toolbar_test.mocks.dart';

@GenerateMocks([ThermostatProvider])
void main() {
final mockProvider = MockThermostatProvider();
Widget createModesToolbar() {
return MaterialApp(
home: ChangeNotifierProvider<ThermostatProvider>(
create: (_) => mockProvider,
child: Column(children: [
ModesToolbar(deviceId: ""),
]),
),
);
}

// setUp(() {
// when(mockProvider.setThermostatMode(any, any))
// .thenAnswer((_) => Future.value(null));
// });
testWidgets('Setup - ModesToolbar should contain specific icons',
(WidgetTester tester) async {
await tester.pumpWidget(createModesToolbar());
Expand All @@ -39,8 +44,7 @@ void main() {

await tester.tap(find.widgetWithText(ModeIconButton, "A"));

verify(mockProvider.setThermostatMode('any', GThermostatMode.AUTO))
.called(1);
verify(mockProvider.setThermostatMode(any, GThermostatMode.AUTO)).called(1);
});

testWidgets('ModesToolbar - button should set mode to cool when pressed',
Expand All @@ -49,8 +53,7 @@ void main() {

await tester.tap(find.widgetWithIcon(ModeIconButton, Icons.ac_unit));

verify(mockProvider.setThermostatMode('any', GThermostatMode.COOL))
.called(1);
verify(mockProvider.setThermostatMode(any, GThermostatMode.COOL)).called(1);
});

testWidgets('ModesToolbar - button should set mode to heat when pressed',
Expand All @@ -59,8 +62,7 @@ void main() {

await tester.tap(find.widgetWithIcon(ModeIconButton, Icons.whatshot));

verify(mockProvider.setThermostatMode('any', GThermostatMode.HEAT))
.called(1);
verify(mockProvider.setThermostatMode(any, GThermostatMode.HEAT)).called(1);
});

testWidgets('ModesToolbar - button should set mode to eco when pressed',
Expand All @@ -69,7 +71,7 @@ void main() {

await tester.tap(find.widgetWithIcon(ModeIconButton, Icons.eco));

verify(mockProvider.setThermostatMode('any', GThermostatMode.AIRFLOW))
verify(mockProvider.setThermostatMode(any, GThermostatMode.AIRFLOW))
.called(1);
});

Expand Down
87 changes: 87 additions & 0 deletions test/components/modes_toolbar_test.mocks.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
// Mocks generated by Mockito 5.0.15 from annotations
// in yonomi_device_widgets/test/components/modes_toolbar_test.dart.
// Do not manually edit this file.

import 'dart:async' as _i3;
import 'dart:ui' as _i7;

import 'package:mockito/mockito.dart' as _i1;
import 'package:yonomi_device_widgets/providers/thermostat_provider.dart'
as _i2;
import 'package:yonomi_platform_sdk/src/repository/devices/devices_repository.dart'
as _i6;
import 'package:yonomi_platform_sdk/src/repository/devices/thermostat_repository.dart'
as _i4;
import 'package:yonomi_platform_sdk/third_party/yonomi_graphql_schema/schema.docs.schema.gql.dart'
as _i5;

// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references
// ignore_for_file: implementation_imports
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis

/// A class which mocks [ThermostatProvider].
///
/// See the documentation for Mockito's code generation for more information.
class MockThermostatProvider extends _i1.Mock
implements _i2.ThermostatProvider {
MockThermostatProvider() {
_i1.throwOnMissingStub(this);
}

@override
double get thermostatTargetTemperature =>
(super.noSuchMethod(Invocation.getter(#thermostatTargetTemperature),
returnValue: 0.0) as double);
@override
bool get hasListeners =>
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false)
as bool);
@override
_i3.Future<void> setPointAction(String? deviceId, double? temperature,
{_i2.SetPointActionFunction? setPoint =
_i4.ThermostatRepository.setPointThermostat}) =>
(super.noSuchMethod(
Invocation.method(
#setPointAction, [deviceId, temperature], {#setPoint: setPoint}),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i3.Future<void>);
@override
_i3.Future<void> setThermostatMode(
String? deviceId, _i5.GThermostatMode? mode,
{_i2.SetModeFunction? setMode = _i4.ThermostatRepository.setMode}) =>
(super.noSuchMethod(
Invocation.method(
#setThermostatMode, [deviceId, mode], {#setMode: setMode}),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i3.Future<void>);
@override
_i3.Future<void> getDeviceDetail(String? deviceId,
{_i2.GetThermostatDetailsFunction? getThermostatDetails =
_i6.DevicesRepository.getThermostatDetails}) =>
(super.noSuchMethod(
Invocation.method(#getDeviceDetail, [deviceId],
{#getThermostatDetails: getThermostatDetails}),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i3.Future<void>);
@override
void addListener(_i7.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#addListener, [listener]),
returnValueForMissingStub: null);
@override
void removeListener(_i7.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#removeListener, [listener]),
returnValueForMissingStub: null);
@override
void dispose() => super.noSuchMethod(Invocation.method(#dispose, []),
returnValueForMissingStub: null);
@override
void notifyListeners() =>
super.noSuchMethod(Invocation.method(#notifyListeners, []),
returnValueForMissingStub: null);
@override
String toString() => super.toString();
}

0 comments on commit 6999c74

Please sign in to comment.