-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
213 additions
and
0 deletions.
There are no files selected for viewing
213 changes: 213 additions & 0 deletions
213
das_client/test/app/pages/journey/train_journey/automatic_advancement_controller_test.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,213 @@ | ||
import 'package:das_client/app/pages/journey/train_journey/automatic_advancement_controller.dart'; | ||
import 'package:das_client/app/pages/journey/train_journey/widgets/table/base_row_builder.dart'; | ||
import 'package:das_client/app/pages/journey/train_journey/widgets/table/config/train_journey_settings.dart'; | ||
import 'package:das_client/app/pages/journey/train_journey/widgets/table/service_point_row.dart'; | ||
import 'package:das_client/app/pages/journey/train_journey/widgets/table/signal_row.dart'; | ||
import 'package:das_client/model/journey/base_data.dart'; | ||
import 'package:das_client/model/journey/journey.dart'; | ||
import 'package:das_client/model/journey/metadata.dart'; | ||
import 'package:das_client/model/journey/service_point.dart'; | ||
import 'package:das_client/model/journey/signal.dart'; | ||
import 'package:das_client/model/localized_string.dart'; | ||
import 'package:flutter/cupertino.dart'; | ||
import 'package:flutter_test/flutter_test.dart'; | ||
import 'package:mockito/annotations.dart'; | ||
import 'package:mockito/mockito.dart'; | ||
|
||
import 'automatic_advancement_controller_test.mocks.dart'; | ||
|
||
@GenerateNiceMocks([ | ||
MockSpec<ScrollController>(), | ||
MockSpec<ScrollPosition>(), | ||
]) | ||
void main() { | ||
test('test does nothing without anything provided', () { | ||
final scrollControllerMock = MockScrollController(); | ||
final testee = AutomaticAdvancementController(controller: scrollControllerMock); | ||
|
||
testee.scrollToCurrentPosition(); | ||
|
||
verifyNever(scrollControllerMock.animateTo(any, duration: anyNamed('duration'), curve: anyNamed('curve'))); | ||
}); | ||
|
||
test('test scrolls to correct element offset', () { | ||
final List<BaseData> journeyData = [ | ||
Signal(order: 0, kilometre: []), | ||
Signal(order: 100, kilometre: []), | ||
Signal(order: 200, kilometre: []), | ||
Signal(order: 300, kilometre: []), | ||
Signal(order: 400, kilometre: []), | ||
]; | ||
final journeyRows = journeyData.map((data) => SignalRow(metadata: Metadata(), data: data as Signal)).toList(); | ||
final journey = Journey( | ||
metadata: Metadata(currentPosition: journeyData[2]), | ||
data: journeyData, | ||
); | ||
|
||
final scrollControllerMock = MockScrollController(); | ||
final scrollPositionMock = MockScrollPosition(); | ||
when(scrollControllerMock.positions).thenReturn([scrollPositionMock]); | ||
when(scrollControllerMock.position).thenReturn(scrollPositionMock); | ||
when(scrollPositionMock.maxScrollExtent).thenReturn(BaseRowBuilder.rowHeight * 4); | ||
|
||
final testee = AutomaticAdvancementController(controller: scrollControllerMock); | ||
|
||
testee.updateRenderedRows(journeyRows); | ||
testee.handleJourneyUpdate(journey, TrainJourneySettings(automaticAdvancementActive: true)); | ||
|
||
verify(scrollControllerMock.animateTo(BaseRowBuilder.rowHeight * 2, | ||
duration: anyNamed('duration'), curve: anyNamed('curve'))) | ||
.called(1); | ||
}); | ||
|
||
test('test does not scroll to correct element offset if not active', () { | ||
final List<BaseData> journeyData = [ | ||
Signal(order: 0, kilometre: []), | ||
Signal(order: 100, kilometre: []), | ||
Signal(order: 200, kilometre: []), | ||
Signal(order: 300, kilometre: []), | ||
Signal(order: 400, kilometre: []), | ||
]; | ||
final journeyRows = journeyData.map((data) => SignalRow(metadata: Metadata(), data: data as Signal)).toList(); | ||
final journey = Journey( | ||
metadata: Metadata(currentPosition: journeyData[2]), | ||
data: journeyData, | ||
); | ||
|
||
final scrollControllerMock = MockScrollController(); | ||
final scrollPositionMock = MockScrollPosition(); | ||
when(scrollControllerMock.positions).thenReturn([scrollPositionMock]); | ||
when(scrollControllerMock.position).thenReturn(scrollPositionMock); | ||
when(scrollPositionMock.maxScrollExtent).thenReturn(BaseRowBuilder.rowHeight * 4); | ||
|
||
final testee = AutomaticAdvancementController(controller: scrollControllerMock); | ||
|
||
testee.updateRenderedRows(journeyRows); | ||
testee.handleJourneyUpdate(journey, TrainJourneySettings(automaticAdvancementActive: false)); | ||
|
||
verifyNever(scrollControllerMock.animateTo(any, duration: anyNamed('duration'), curve: anyNamed('curve'))); | ||
}); | ||
|
||
test('test respects maxScrollExtent when scrolling', () { | ||
final List<BaseData> journeyData = [ | ||
Signal(order: 0, kilometre: []), | ||
Signal(order: 100, kilometre: []), | ||
Signal(order: 200, kilometre: []), | ||
Signal(order: 300, kilometre: []), | ||
Signal(order: 400, kilometre: []), | ||
]; | ||
final journeyRows = journeyData.map((data) => SignalRow(metadata: Metadata(), data: data as Signal)).toList(); | ||
final journey = Journey( | ||
metadata: Metadata(currentPosition: journeyData[2]), | ||
data: journeyData, | ||
); | ||
|
||
final scrollControllerMock = MockScrollController(); | ||
final scrollPositionMock = MockScrollPosition(); | ||
when(scrollControllerMock.positions).thenReturn([scrollPositionMock]); | ||
when(scrollControllerMock.position).thenReturn(scrollPositionMock); | ||
when(scrollPositionMock.maxScrollExtent).thenReturn(BaseRowBuilder.rowHeight * 1.5); | ||
|
||
final testee = AutomaticAdvancementController(controller: scrollControllerMock); | ||
|
||
testee.updateRenderedRows(journeyRows); | ||
testee.handleJourneyUpdate(journey, TrainJourneySettings(automaticAdvancementActive: true)); | ||
|
||
verify(scrollControllerMock.animateTo(BaseRowBuilder.rowHeight * 1.5, | ||
duration: anyNamed('duration'), curve: anyNamed('curve'))) | ||
.called(1); | ||
}); | ||
|
||
test('test only scroll if positon is different then the last update', () { | ||
final List<BaseData> journeyData = [ | ||
Signal(order: 0, kilometre: []), | ||
Signal(order: 100, kilometre: []), | ||
Signal(order: 200, kilometre: []), | ||
Signal(order: 300, kilometre: []), | ||
Signal(order: 400, kilometre: []), | ||
]; | ||
final journeyRows = journeyData.map((data) => SignalRow(metadata: Metadata(), data: data as Signal)).toList(); | ||
final journey = Journey( | ||
metadata: Metadata(currentPosition: journeyData[2]), | ||
data: journeyData, | ||
); | ||
|
||
final scrollControllerMock = MockScrollController(); | ||
final scrollPositionMock = MockScrollPosition(); | ||
when(scrollControllerMock.positions).thenReturn([scrollPositionMock]); | ||
when(scrollControllerMock.position).thenReturn(scrollPositionMock); | ||
when(scrollPositionMock.maxScrollExtent).thenReturn(BaseRowBuilder.rowHeight * 4); | ||
|
||
final testee = AutomaticAdvancementController(controller: scrollControllerMock); | ||
|
||
testee.updateRenderedRows(journeyRows); | ||
testee.handleJourneyUpdate(journey, TrainJourneySettings(automaticAdvancementActive: true)); | ||
testee.handleJourneyUpdate(journey, TrainJourneySettings(automaticAdvancementActive: true)); | ||
|
||
verify(scrollControllerMock.animateTo(BaseRowBuilder.rowHeight * 2, | ||
duration: anyNamed('duration'), curve: anyNamed('curve'))) | ||
.called(1); | ||
}); | ||
|
||
test('test does nothing if not attached to a scrollview', () { | ||
final List<BaseData> journeyData = [ | ||
Signal(order: 0, kilometre: []), | ||
Signal(order: 100, kilometre: []), | ||
Signal(order: 200, kilometre: []), | ||
Signal(order: 300, kilometre: []), | ||
Signal(order: 400, kilometre: []), | ||
]; | ||
final journeyRows = journeyData.map((data) => SignalRow(metadata: Metadata(), data: data as Signal)).toList(); | ||
final journey = Journey( | ||
metadata: Metadata(currentPosition: journeyData[2]), | ||
data: journeyData, | ||
); | ||
|
||
final scrollControllerMock = MockScrollController(); | ||
final scrollPositionMock = MockScrollPosition(); | ||
when(scrollControllerMock.positions).thenReturn([]); | ||
when(scrollControllerMock.position).thenReturn(scrollPositionMock); | ||
when(scrollPositionMock.maxScrollExtent).thenReturn(BaseRowBuilder.rowHeight * 4); | ||
|
||
final testee = AutomaticAdvancementController(controller: scrollControllerMock); | ||
|
||
testee.updateRenderedRows(journeyRows); | ||
testee.handleJourneyUpdate(journey, TrainJourneySettings(automaticAdvancementActive: true)); | ||
|
||
verifyNever(scrollControllerMock.animateTo(any, duration: anyNamed('duration'), curve: anyNamed('curve'))); | ||
}); | ||
|
||
test('test scrolling adjust to sticky header', () { | ||
final signalData = Signal(order: 100, kilometre: []); | ||
final targetSignalData = Signal(order: 300, kilometre: []); | ||
final servicePointData = ServicePoint(order: 0, kilometre: [], name: LocalizedString()); | ||
final List<BaseRowBuilder> rows = [ | ||
ServicePointRow(metadata: Metadata(), data: servicePointData), | ||
SignalRow(metadata: Metadata(), data: signalData), | ||
SignalRow(metadata: Metadata(), data: signalData), | ||
SignalRow(metadata: Metadata(), data: signalData), | ||
ServicePointRow(metadata: Metadata(), data: servicePointData), | ||
SignalRow(metadata: Metadata(), data: targetSignalData), | ||
]; | ||
|
||
final journey = Journey( | ||
metadata: Metadata(currentPosition: targetSignalData), | ||
data: [], | ||
); | ||
|
||
final scrollControllerMock = MockScrollController(); | ||
final scrollPositionMock = MockScrollPosition(); | ||
when(scrollControllerMock.positions).thenReturn([scrollPositionMock]); | ||
when(scrollControllerMock.position).thenReturn(scrollPositionMock); | ||
when(scrollPositionMock.maxScrollExtent).thenReturn(BaseRowBuilder.rowHeight * 10); | ||
|
||
final testee = AutomaticAdvancementController(controller: scrollControllerMock); | ||
|
||
testee.updateRenderedRows(rows); | ||
testee.handleJourneyUpdate(journey, TrainJourneySettings(automaticAdvancementActive: true)); | ||
|
||
verify(scrollControllerMock.animateTo(BaseRowBuilder.rowHeight * 3 + ServicePointRow.rowHeight, | ||
duration: anyNamed('duration'), curve: anyNamed('curve'))) | ||
.called(1); | ||
}); | ||
} |