Skip to content

Commit

Permalink
feat: tried to add some more tests for the add desk page and some oth…
Browse files Browse the repository at this point in the history
…er widgets
  • Loading branch information
MhouneyLH committed Sep 1, 2023
1 parent 3499039 commit 48f985d
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 32 deletions.
31 changes: 14 additions & 17 deletions lib/features/presentation/pages/add_desk_page/add_desk_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ class AddDeskPage extends StatefulWidget {
class _AddDeskPageState extends State<AddDeskPage> {
Desk newDesk = Desk.empty();

final TextEditingController deskNameController = TextEditingController();
late final TextEditingController deskHeightController =
TextEditingController(text: newDesk.height.toStringAsFixed(2));

@override
void initState() {
super.initState();
Expand All @@ -43,18 +47,14 @@ class _AddDeskPageState extends State<AddDeskPage> {
);
}

final TextEditingController deskNameController = TextEditingController();
late final TextEditingController deskHeightController =
TextEditingController(text: newDesk.height.toStringAsFixed(2));

@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Heading(
title: 'General',
key: Key('general-heading'),
title: 'General',
),
const SizedBox(height: ThemeSettings.smallSpacing),
_buildDeskNameTextField(),
Expand All @@ -70,8 +70,8 @@ class _AddDeskPageState extends State<AddDeskPage> {
),
const SizedBox(height: ThemeSettings.mediumSpacing),
const Heading(
title: 'Presets',
key: Key('presets-heading'),
title: 'Presets',
),
const SizedBox(height: ThemeSettings.smallSpacing),
Column(
Expand All @@ -88,11 +88,11 @@ class _AddDeskPageState extends State<AddDeskPage> {

TextField _buildDeskNameTextField() {
return TextField(
key: const Key('desk-name-text-field'),
controller: deskNameController,
decoration: const InputDecoration(
labelText: 'Desk Name',
),
key: const Key('desk-name-text-field'),
onEditingComplete: () {
_updateDeskName();
},
Expand All @@ -101,12 +101,12 @@ class _AddDeskPageState extends State<AddDeskPage> {

TextField _buildDeskHeightTextField() {
return TextField(
key: const Key('desk-height-text-field'),
controller: deskHeightController,
decoration: const InputDecoration(
labelText: 'Desk Height',
),
keyboardType: const TextInputType.numberWithOptions(decimal: true),
key: const Key('desk-height-text-field'),
onEditingComplete: () {
_updateDeskHeight();
},
Expand All @@ -118,17 +118,17 @@ class _AddDeskPageState extends State<AddDeskPage> {
height: deskMaximumHeight + DeskAnimation.topOfDeskThickness,
width: MediaQuery.of(context).size.width * 0.5,
child: DeskAnimation(
key: const Key('desk-animation'),
width: MediaQuery.of(context).size.width * 0.6,
deskHeight: newDesk.height,
key: const Key('desk-animation'),
),
);
}

HeightSlider _buildHeightSlider() {
return HeightSlider(
deskHeight: newDesk.height,
key: const Key('desk-height-slider'),
deskHeight: newDesk.height,
onChanged: (double newHeight) {
setState(() {
deskHeightController.text = newHeight.toStringAsFixed(2);
Expand All @@ -147,6 +147,7 @@ class _AddDeskPageState extends State<AddDeskPage> {
Center _buildAddPresetButton(BuildContext context) {
return Center(
child: IconButton(
key: const Key('add-preset-button'),
icon: const Icon(Icons.add),
iconSize: 30.0,
style: ButtonStyle(
Expand All @@ -173,7 +174,7 @@ class _AddDeskPageState extends State<AddDeskPage> {
CreatedDesk(desk: newDesk),
);

_clearInputs();
_clearInput();
},
child: Text(
'Add Desk',
Expand All @@ -190,11 +191,7 @@ class _AddDeskPageState extends State<AddDeskPage> {
List<PresetCard> presetCards = [];

for (final Preset preset in newDesk.presets) {
final PresetCard card = PresetCard(
preset: preset,
key: Key('preset-card-${preset.name}'),
);

final PresetCard card = PresetCard(preset: preset);
presetCards.add(card);
}

Expand All @@ -215,7 +212,7 @@ class _AddDeskPageState extends State<AddDeskPage> {
});
}

void _clearInputs() {
void _clearInput() {
setState(() {
newDesk = Desk.empty();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import 'package:dartz/dartz.dart';
import 'package:deskify/core/core.dart';
import 'package:deskify/features/domain/entities/desk.dart';
import 'package:deskify/features/domain/entities/preset.dart';
import 'package:deskify/features/domain/repository/desk_repository.dart';
import 'package:deskify/features/domain/usecases/usecases.dart';
import 'package:deskify/features/presentation/bloc/desk/desk_bloc.dart';
import 'package:deskify/features/presentation/pages/add_desk_page/add_desk_page.dart';
import 'package:deskify/features/presentation/pages/add_desk_page/preset_card.dart';
import 'package:deskify/features/presentation/widgets/widgets.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_test/flutter_test.dart';
Expand All @@ -19,7 +22,7 @@ void main() {
mockDeskRepository = MockDeskRepository();
});

final Desk desk = Desk(
final Desk tDesk = Desk(
id: '0',
name: 'test',
height: 0.0,
Expand All @@ -37,18 +40,6 @@ void main() {
],
);

void arrangeDeskRepositoryCreateDesk() {
when(() => mockDeskRepository.createDesk(desk))
.thenAnswer((_) async => const Right(null));
}

void arrangeDeskRepositoryCreateDeskAfter2SecondsWait() {
when(() => mockDeskRepository.createDesk(desk)).thenAnswer((_) async {
await Future.delayed(const Duration(seconds: 2));
return const Right(null);
});
}

Widget createWidgetUnderTest() {
return BlocProvider(
create: (context) => DeskBloc(
Expand Down Expand Up @@ -105,6 +96,32 @@ void main() {
// assert
expect(find.byKey(const Key('desk-height-slider')), findsOneWidget);
});

testWidgets(
'Entering text in the desk height TextField changes the value of the slider',
(widgetTester) async {
// TODO: TEST
});

testWidgets(
'Changing the value of the slider, changes the value of the desk height TextField',
(widgetTester) async {
// arrange
await widgetTester.pumpWidget(createWidgetUnderTest());
// act
await widgetTester.drag(
find.byKey(const Key('desk-height-slider')), const Offset(0, -50));
await widgetTester.pump();
// assert
final TextField textField = widgetTester
.widget<TextField>(find.byKey(const Key('desk-height-text-field')));
final HeightSlider heightSlider = widgetTester
.widget<HeightSlider>(find.byKey(const Key('desk-height-slider')));

expect(textField.controller!.text,
heightSlider.deskHeight.toStringAsFixed(2));
await widgetTester.pumpAndSettle(const Duration(seconds: 1));
});
});

group('Presets', () {
Expand All @@ -114,5 +131,32 @@ void main() {
// assert
expect(find.byKey(const Key('presets-heading')), findsOneWidget);
});

testWidgets('List of Preset Cards is displayed', (widgetTester) async {
// act
await widgetTester.pumpWidget(createWidgetUnderTest());
// assert
expect(find.byType(PresetCard), findsAtLeastNWidgets(2));
});

testWidgets('Add Preset button is displayed', (widgetTester) async {
// act
await widgetTester.pumpWidget(createWidgetUnderTest());
// assert
expect(find.byKey(const Key('add-preset-button')), findsOneWidget);
});
});

testWidgets('Add Desk button is displayed', (widgetTester) async {
// act
await widgetTester.pumpWidget(createWidgetUnderTest());
// assert
expect(find.byKey(const Key('add-desk-button')), findsOneWidget);
});

testWidgets(
'After tapping the add desk button, the input of the desk name, the desk height and the presets are cleared',
(widgetTester) async {
// TODO: TEST
});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// TODO: skipped for now
50 changes: 48 additions & 2 deletions test/features/presentation/widgets/height_slider_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,22 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:syncfusion_flutter_sliders/sliders.dart';

void main() {
late double tHeight;

setUp(() {
tHeight = deskMinimumHeight;
});

Widget createWidgetUnderTest() {
return MaterialApp(
home: HeightSlider(
deskHeight: deskMinimumHeight,
onChanged: (double height) {},
onChangeEnd: (double height) {},
onChanged: (double height) {
tHeight = height;
},
onChangeEnd: (double height) {
tHeight = height;
},
),
);
}
Expand All @@ -24,4 +34,40 @@ void main() {
// assert
expect(find.byType(SfSlider), findsOneWidget);
});

testWidgets(
'Changing the value of the slider, calls the onChanged callback',
(widgetTester) async {
// arrange
final Widget widgetUnderTest = createWidgetUnderTest();
await widgetTester.pumpWidget(widgetUnderTest);
// act
await widgetTester.drag(
find.byType(SfSlider),
const Offset(0, -100),
);
await widgetTester.pump();
// assert
expect(tHeight, isNot(deskMinimumHeight));
await widgetTester.pumpAndSettle(const Duration(seconds: 1));
},
);

testWidgets(
'Changing the value of the slider, calls the onChangeEnd callback',
(widgetTester) async {
// arrange
final Widget widgetUnderTest = createWidgetUnderTest();
await widgetTester.pumpWidget(widgetUnderTest);
// act
await widgetTester.drag(
find.byType(SfSlider),
const Offset(0, -100),
);
await widgetTester.pump();
// assert
expect(tHeight, isNot(deskMinimumHeight));
await widgetTester.pumpAndSettle(const Duration(seconds: 1));
},
);
}

0 comments on commit 48f985d

Please sign in to comment.