Skip to content

Commit 2020764

Browse files
feat: curves and km-board without speed data (#478) (#656)
1 parent 3d074d9 commit 2020764

File tree

7 files changed

+97
-34
lines changed

7 files changed

+97
-34
lines changed

das_client/integration_test/test/train_journey_table_test.dart

+54-18
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,55 @@ import '../util/test_utils.dart';
2222

2323
void main() {
2424
group('train journey table test', () {
25+
testWidgets('test find one curve is found when breakingSeries A50 is chosen', (tester) async {
26+
await prepareAndStartApp(tester);
27+
28+
// load train journey by filling out train selection page
29+
await loadTrainJourney(tester, trainNumber: 'T5');
30+
31+
// change breakseries to A50
32+
await _selectBreakSeries(tester, breakSeries: 'A50');
33+
34+
// check if the breakseries A50 is chosen.
35+
final breakingSeriesHeaderCell = find.byKey(TrainJourney.breakingSeriesHeaderKey);
36+
expect(breakingSeriesHeaderCell, findsOneWidget);
37+
expect(find.descendant(of: breakingSeriesHeaderCell, matching: find.text('A50')), findsNWidgets(1));
38+
39+
final scrollableFinder = find.byType(ListView);
40+
expect(scrollableFinder, findsOneWidget);
41+
42+
final curveName = findDASTableRowByText(l10n.p_train_journey_table_curve_type_curve);
43+
expect(curveName, findsOneWidget);
44+
45+
final curveIcon = find.descendant(of: curveName, matching: find.byKey(CurvePointRow.curvePointIconKey));
46+
expect(curveIcon, findsOneWidget);
47+
48+
await disconnect(tester);
49+
});
50+
51+
testWidgets('test find two curves when breakingSeries R115 is chosen', (tester) async {
52+
await prepareAndStartApp(tester);
53+
54+
// load train journey by filling out train selection page
55+
await loadTrainJourney(tester, trainNumber: 'T5');
56+
57+
final scrollableFinder = find.byType(ListView);
58+
expect(scrollableFinder, findsOneWidget);
59+
60+
// find and check if the default breakseries is chosen
61+
final breakingSeriesHeaderCell = find.byKey(TrainJourney.breakingSeriesHeaderKey);
62+
expect(breakingSeriesHeaderCell, findsOneWidget);
63+
expect(find.descendant(of: breakingSeriesHeaderCell, matching: find.text('R115')), findsNWidgets(1));
64+
65+
final curveName = findDASTableRowByText(l10n.p_train_journey_table_curve_type_curve);
66+
expect(curveName, findsExactly(2));
67+
68+
final curveIcon = find.descendant(of: curveName, matching: find.byKey(CurvePointRow.curvePointIconKey));
69+
expect(curveIcon, findsExactly(2));
70+
71+
await disconnect(tester);
72+
});
73+
2574
testWidgets('test balise multiple level crossings', (tester) async {
2675
await prepareAndStartApp(tester);
2776

@@ -212,21 +261,15 @@ void main() {
212261
'Genève': '60',
213262
'New Line Speed A Missing': '60',
214263
'42.5': '44', // 2. Curve
215-
'40.5': null, // 3. Curve
216264
'Gland': '60',
217265
};
218266

219267
for (final entry in expectedSpeeds.entries) {
220268
final tableRow = findDASTableRowByText(entry.key);
221269
expect(tableRow, findsOneWidget);
222270

223-
if (entry.value != null) {
224-
final speedText = find.descendant(of: tableRow, matching: find.text(entry.value!));
225-
expect(speedText, findsOneWidget);
226-
} else {
227-
final textWidgets = find.descendant(of: tableRow, matching: find.byWidgetPredicate((it) => it is Text));
228-
expect(textWidgets, findsNWidgets(2)); // KM and Kurve text widgets
229-
}
271+
final speedText = find.descendant(of: tableRow, matching: find.text(entry.value));
272+
expect(speedText, findsOneWidget);
230273
}
231274

232275
await disconnect(tester);
@@ -250,22 +293,15 @@ void main() {
250293
'New Line Speed All': '90',
251294
'Genève': 'XX',
252295
'New Line Speed A Missing': 'XX',
253-
'42.5': 'XX', // 2. Curve
254-
'40.5': null, // 3. Curve
255296
'Gland': '90',
256297
};
257298

258299
for (final entry in expectedSpeeds.entries) {
259300
final tableRow = findDASTableRowByText(entry.key);
260301
expect(tableRow, findsOneWidget);
261302

262-
if (entry.value != null) {
263-
final speedText = find.descendant(of: tableRow, matching: find.text(entry.value!));
264-
expect(speedText, findsOneWidget);
265-
} else {
266-
final textWidgets = find.descendant(of: tableRow, matching: find.byWidgetPredicate((it) => it is Text));
267-
expect(textWidgets, findsNWidgets(2)); // KM and Kurve text widgets
268-
}
303+
final speedText = find.descendant(of: tableRow, matching: find.text(entry.value));
304+
expect(speedText, findsOneWidget);
269305
}
270306

271307
await disconnect(tester);
@@ -1007,7 +1043,7 @@ Future<void> _selectBreakSeries(WidgetTester tester, {required String breakSerie
10071043
// Open break series bottom sheet
10081044
await tapElement(tester, find.byKey(TrainJourney.breakingSeriesHeaderKey));
10091045

1010-
// Check if the bottom sheeet is opened
1046+
// Check if the bottom sheet is opened
10111047
expect(find.text(l10n.p_train_journey_break_series), findsOneWidget);
10121048
await tapElement(tester, find.text(breakSeries));
10131049

das_client/ios/Podfile.lock

+8-8
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,15 @@ EXTERNAL SOURCES:
6262

6363
SPEC CHECKSUMS:
6464
AppAuth: 501c04eda8a8d11f179dbe8637b7a91bb7e5d2fa
65-
battery_plus: 34f72fa2afeeea83bbae306c72a25828d3ec727a
66-
device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342
65+
battery_plus: b42253f6d2dde71712f8c36fef456d99121c5977
66+
device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe
6767
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
68-
flutter_appauth: aef998cfbcc307dff7f2fbe1f59a50323748dc25
69-
flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
70-
integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573
71-
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
72-
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
73-
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
68+
flutter_appauth: 273bf736e38f7d85000b1a9ac15ace5800c277f2
69+
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
70+
integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e
71+
isar_flutter_libs: 9fc2cfb928c539e1b76c481ba5d143d556d94920
72+
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
73+
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
7474

7575
PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796
7676

das_client/lib/app/pages/journey/train_journey/widgets/train_journey.dart

+12-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import 'package:das_client/app/widgets/table/das_table_column.dart';
2929
import 'package:das_client/model/journey/additional_speed_restriction_data.dart';
3030
import 'package:das_client/model/journey/balise.dart';
3131
import 'package:das_client/model/journey/balise_level_crossing_group.dart';
32+
import 'package:das_client/model/journey/base_data.dart';
3233
import 'package:das_client/model/journey/base_data_extension.dart';
3334
import 'package:das_client/model/journey/break_series.dart';
3435
import 'package:das_client/model/journey/cab_signaling.dart';
@@ -101,7 +102,9 @@ class TrainJourney extends StatelessWidget {
101102
}
102103

103104
List<BaseRowBuilder> _rows(BuildContext context, Journey journey, TrainJourneySettings settings) {
104-
final rows = journey.data.groupBaliseAndLeveLCrossings(settings.expandedGroups);
105+
final rows = journey.data
106+
.whereNot((it) => _isCurvePointWithoutSpeed(it, journey, settings))
107+
.groupBaliseAndLeveLCrossings(settings.expandedGroups);
105108

106109
final groupedRows =
107110
rows.whereType<BaliseLevelCrossingGroup>().map((it) => it.groupedElements).expand((it) => it).toList();
@@ -269,4 +272,12 @@ class TrainJourney extends StatelessWidget {
269272
trainJourneyCubit.updateBreakSeries(selectedBreakSeries);
270273
}
271274
}
275+
276+
bool _isCurvePointWithoutSpeed(BaseData data, Journey journey, TrainJourneySettings settings) {
277+
final currentTrainSeries = settings.selectedBreakSeries?.trainSeries ?? journey.metadata.breakSeries?.trainSeries;
278+
final currentBreakSeries = settings.selectedBreakSeries?.breakSeries ?? journey.metadata.breakSeries?.breakSeries;
279+
280+
return data.type == Datatype.curvePoint &&
281+
data.localSpeedData?.speedsFor(currentTrainSeries, currentBreakSeries) == null;
282+
}
272283
}

das_client/lib/model/journey/base_data_extension.dart

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import 'package:das_client/model/journey/balise_level_crossing_group.dart';
22
import 'package:das_client/model/journey/base_data.dart';
33
import 'package:das_client/model/journey/datatype.dart';
44

5-
extension BaseDataExtension on List<BaseData> {
5+
extension BaseDataExtension on Iterable<BaseData> {
66
List<BaseData> groupBaliseAndLeveLCrossings(List<int> expandedGroups) {
77
final List<BaseData> resultList = [];
88

99
for (int i = 0; i < length; i++) {
10-
final currentElement = this[i];
10+
final currentElement = elementAt(i);
1111
if (!currentElement.canGroup) {
1212
// Just add elements to the result that are unable to be grouped
1313
resultList.add(currentElement);
@@ -17,7 +17,7 @@ extension BaseDataExtension on List<BaseData> {
1717
final groupedElements = [currentElement];
1818
// check the next elements if they can be grouped with the currentElement.
1919
for (int j = i + 1; j < length; j++) {
20-
final nextElement = this[j];
20+
final nextElement = elementAt(j);
2121
if (nextElement.canGroup && currentElement.canGroupWith(nextElement)) {
2222
groupedElements.add(nextElement);
2323
} else {

sfera_mock/src/main/resources/static_sfera_resources/T9999_mixed_journey/SFERA_SP_T9999_1.xml

+5-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,11 @@
3232
<NetworkSpecificParameter name="curvePointType" value="begin"/>
3333
<NetworkSpecificParameter name="curveType" value="curve"/>
3434
<NetworkSpecificParameter name="xmlCurveSpeed" value="
35-
&lt;curveSpeed text=&quot;Kurve 1&quot; comment=&quot;Kurve 1&quot;&gt;
35+
&lt;curveSpeed text=&quot;Kurve 1&quot; comment=&quot;Kurve 1 comment&quot;&gt;
36+
&lt;speeds&gt;
37+
&lt;v trainSeries=&quot;R&quot; speed=&quot;44&quot;/&gt;
38+
&lt;v trainSeries=&quot;A&quot; speed=&quot;55&quot;/&gt;
39+
&lt;/speeds&gt;
3640
&lt;/curveSpeed&gt;
3741
"/>
3842
</NetworkSpecificPoint>

sfera_mock/src/main/resources/static_sfera_resources/T9999_mixed_journey/SFERA_SP_T9999_2.xml

+5-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@
3131
<!-- 'curve' (begins on the line and ends on the line or a station or a halt) -->
3232
<NetworkSpecificParameter name="curveType" value="curve"/>
3333
<NetworkSpecificParameter name="xmlCurveSpeed" value="
34-
&lt;curveSpeed text=&quot;Kurve 1&quot; comment=&quot;Kurve 1&quot;&gt;
34+
&lt;curveSpeed text=&quot;Kurve 1&quot; comment=&quot;Kurve 1 after comment&quot;&gt;
35+
&lt;speeds&gt;
36+
&lt;v trainSeries=&quot;R&quot; speed=&quot;44&quot;/&gt;
37+
&lt;v trainSeries=&quot;A&quot; speed=&quot;55&quot;/&gt;
38+
&lt;/speeds&gt;
3539
&lt;/curveSpeed&gt;
3640
"/>
3741
</NetworkSpecificPoint>

sfera_mock/src/main/resources/static_sfera_resources/T9999_mixed_journey/SFERA_SP_T9999_3.xml

+10-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@
2626
<!-- 'stationExitCurve' (begins in a station) -->
2727
<NetworkSpecificParameter name="curveType" value="stationExitCurve"/>
2828
<NetworkSpecificParameter name="xmlCurveSpeed" value="
29-
&lt;curveSpeed text=&quot;Kurve 1&quot; comment=&quot;Kurve 2&quot;&gt;
29+
&lt;curveSpeed text=&quot;Kurve 5&quot; comment=&quot;Kurve 5 after stop&quot;&gt;
30+
&lt;speeds&gt;
31+
&lt;v trainSeries=&quot;R&quot; speed=&quot;44&quot;/&gt;
32+
&lt;v trainSeries=&quot;A&quot; speed=&quot;55&quot;/&gt;
33+
&lt;/speeds&gt;
3034
&lt;/curveSpeed&gt;
3135
"/>
3236
</NetworkSpecificPoint>
@@ -38,7 +42,11 @@
3842
<!-- 'curveAfterHalt' (begins at an halt). -->
3943
<NetworkSpecificParameter name="curveType" value="curveAfterHalt"/>
4044
<NetworkSpecificParameter name="xmlCurveSpeed" value="
41-
&lt;curveSpeed text=&quot;Kurve 1&quot; comment=&quot;Kurve 3&quot;&gt;
45+
&lt;curveSpeed text=&quot;Kurve 5&quot; comment=&quot;Kurve 5 after stop&quot;&gt;
46+
&lt;speeds&gt;
47+
&lt;v trainSeries=&quot;R&quot; speed=&quot;44&quot;/&gt;
48+
&lt;v trainSeries=&quot;A&quot; speed=&quot;55&quot;/&gt;
49+
&lt;/speeds&gt;
4250
&lt;/curveSpeed&gt;
4351
"/>
4452
</NetworkSpecificPoint>

0 commit comments

Comments
 (0)