From 8a90f2dd483126cb503838432a8dd9f6a59bed6d Mon Sep 17 00:00:00 2001 From: "Raphael Schreiber (IT-PTR-CEN1-BDE22-Extern)" Date: Fri, 17 Oct 2025 10:49:07 +0200 Subject: [PATCH 1/2] feat: add all companies to the evu picker --- .../test/journey_search_overlay_test.dart | 10 +++- .../test/train_search_test.dart | 13 +++-- das_client/app/ios/Podfile.lock | 26 +++++----- das_client/app/l10n/strings_de.arb | 24 ++++++++-- .../app/lib/extension/ru_extension.dart | 48 ++++++++++++++++--- .../select_railway_undertaking_input.dart | 17 +++++-- ...way_undertaking_modal_controller_test.dart | 13 ++++- das_client/sfera/lib/src/model/ru.dart | 24 ++++++++-- 8 files changed, 135 insertions(+), 40 deletions(-) diff --git a/das_client/app/integration_test/test/journey_search_overlay_test.dart b/das_client/app/integration_test/test/journey_search_overlay_test.dart index f0cb04c24..6a58ed088 100644 --- a/das_client/app/integration_test/test/journey_search_overlay_test.dart +++ b/das_client/app/integration_test/test/journey_search_overlay_test.dart @@ -92,7 +92,10 @@ void main() { await tapElement(tester, primaryButton); // wait until T2 opened - await waitUntilExists(tester, find.descendant(of: find.byType(Header), matching: find.text('T2 SBB'))); + await waitUntilExists( + tester, + find.descendant(of: find.byType(Header), matching: find.text('T2 ${l10n.c_ru_sbb_p}')), + ); await tester.pumpAndSettle(); // should not display navigation buttons (autoAdvancement is active) @@ -115,7 +118,10 @@ void main() { await tapElement(tester, previousButton); // wait until T1 opened - await waitUntilExists(tester, find.descendant(of: find.byType(Header), matching: find.text('T1 SBB'))); + await waitUntilExists( + tester, + find.descendant(of: find.byType(Header), matching: find.text('T1 ${l10n.c_ru_sbb_p}')), + ); await disconnect(tester); }); diff --git a/das_client/app/integration_test/test/train_search_test.dart b/das_client/app/integration_test/test/train_search_test.dart index 3c97ef8c6..0b8d503f4 100644 --- a/das_client/app/integration_test/test/train_search_test.dart +++ b/das_client/app/integration_test/test/train_search_test.dart @@ -38,12 +38,11 @@ void main() { expect(find.text(l10n.c_ru_sbb_c), findsOneWidget); expect(find.descendant(of: modal, matching: find.text(l10n.c_ru_bls_p)), findsOneWidget); expect(find.text(l10n.c_ru_bls_c), findsOneWidget); - expect(find.text(l10n.c_ru_sob), findsOneWidget); - - await tapElement(tester, find.text(l10n.c_ru_sob)); - - expect(find.text(l10n.c_ru_sob), findsOneWidget); - expect(find.text(l10n.c_ru_sbb_p), findsNothing); + final sobI = find.text(l10n.c_ru_sob_i); + await tester.dragUntilVisible(sobI, modal, const Offset(0, -50)); + expect(sobI, findsOneWidget); + await tapElement(tester, sobI, warnIfMissed: false); + expect(sobI, findsOneWidget); }); testWidgets('test filter ru values', (tester) async { @@ -68,7 +67,7 @@ void main() { // Verify results are filtered expect(find.descendant(of: modal, matching: find.text(l10n.c_ru_sbb_p)), findsNothing); expect(find.descendant(of: modal, matching: find.text(l10n.c_ru_bls_p)), findsNothing); - expect(find.text(l10n.c_ru_sob), findsOneWidget); + expect(find.text(l10n.c_ru_sob_i), findsOneWidget); }); testWidgets('test load button disabled when validation fails', (tester) async { diff --git a/das_client/app/ios/Podfile.lock b/das_client/app/ios/Podfile.lock index e5c65db9f..d887675fa 100644 --- a/das_client/app/ios/Podfile.lock +++ b/das_client/app/ios/Podfile.lock @@ -143,20 +143,20 @@ SPEC CHECKSUMS: connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 - flutter_appauth: 88fcbc27871cbedac400db9d39b1363e4850179d - flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 - geolocator_apple: 66b711889fd333205763b83c9dcf0a57a28c7afd - integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573 - package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4 - path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - screen_brightness_ios: 6a6f7794b67f07c4f1e24f6374b2d8ad367ffb39 - sensors_plus: 7229095999f30740798f0eeef5cd120357a8f4f2 - shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + flutter_appauth: d4abcf54856e5d8ba82ed7646ffc83245d4aa448 + flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13 + geolocator_apple: ab36aa0e8b7d7a2d7639b3b4e48308394e8cef5e + integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e + package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 + path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + screen_brightness_ios: 9953fd7da5bd480f1a93990daeec2eb42d4f3b52 + sensors_plus: 6a11ed0c2e1d0bd0b20b4029d3bad27d96e0c65b + shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 sqlite3: 1d85290c3321153511f6e900ede7a1608718bbd5 - sqlite3_flutter_libs: 2c48c4ee7217fd653251975e43412250d5bcbbe2 - volume_controller: 2e3de73d6e7e81a0067310d17fb70f2f86d71ac7 - wakelock_plus: 76957ab028e12bfa4e66813c99e46637f367fc7e - webview_flutter_wkwebview: a4af96a051138e28e29f60101d094683b9f82188 + sqlite3_flutter_libs: e7fc8c9ea2200ff3271f08f127842131746b70e2 + volume_controller: 3657a1f65bedb98fa41ff7dc5793537919f31b12 + wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556 + webview_flutter_wkwebview: 1821ceac936eba6f7984d89a9f3bcb4dea99ebb2 PODFILE CHECKSUM: f9eb72e89e74819a2090fc510fed667ab5bc33c4 diff --git a/das_client/app/l10n/strings_de.arb b/das_client/app/l10n/strings_de.arb index ac19f073c..dcbf093ef 100644 --- a/das_client/app/l10n/strings_de.arb +++ b/das_client/app/l10n/strings_de.arb @@ -104,11 +104,29 @@ "w_additional_speed_restriction_modal_table_label_from": "Von", "w_additional_speed_restriction_modal_table_label_until": "Bis", "w_additional_speed_restriction_modal_table_label_reason": "Grund", - "c_ru_sbb_p": "SBB", + "c_ru_sbb": "SBB AG", + "c_ru_sbb_p": "SBB Personenverkehr", + "c_ru_sbb_epa": "SBB Voyageur (EPA)", "c_ru_sbb_c": "SBB Cargo", - "c_ru_bls_p": "BLS", + "c_ru_sbbc_int": "SBB Cargo International", + "c_ru_sbb_d": "SBB GmbH Deutschland", + "c_ru_sbb_infra_baulog": "SBB Infrastruktur Baulogistik", + "c_ru_sbb_infra_path": "SBB Infrastruktur PathOrderTool", + "c_ru_bls_n": "BLS Netz AG", + "c_ru_bls_p": "BLS Personenverkehr", + "c_ru_bls_nevu": "BLS Netz AG EVU", "c_ru_bls_c": "BLS Cargo", - "c_ru_sob": "SOB", + "c_ru_sob_t": "SOB Transport EVU", + "c_ru_sob_i": "SOB Infrastruktur", + "c_ru_sob_iti": "SOB Infrastruktur TI", + "c_ru_thu": "Thurbo AG", + "c_ru_ra": "RegionAlps SA", + "c_ru_travys": "TRAVYS SA", + "c_ru_transn": "transN", + "c_ru_tpfinfra": "TPF Infra SA", + "c_ru_tpftrafic": "TPF Trafic SA", + "c_ru_tmr": "TMR SA", + "c_ru_mbc": "MBC SA", "c_unknown": "Unbekannt", "c_train_number": "Zugnummer", "c_today": "Heute", diff --git a/das_client/app/lib/extension/ru_extension.dart b/das_client/app/lib/extension/ru_extension.dart index 4d3698e0c..276110da0 100644 --- a/das_client/app/lib/extension/ru_extension.dart +++ b/das_client/app/lib/extension/ru_extension.dart @@ -4,18 +4,54 @@ import 'package:sfera/component.dart'; extension RuExtension on RailwayUndertaking { String displayText(BuildContext context) => switch (this) { - RailwayUndertaking.sbbP => context.l10n.c_ru_sbb_p, - RailwayUndertaking.sbbC => context.l10n.c_ru_sbb_c, + RailwayUndertaking.blsN => context.l10n.c_ru_bls_n, RailwayUndertaking.blsP => context.l10n.c_ru_bls_p, + RailwayUndertaking.blsNEvu => context.l10n.c_ru_bls_nevu, RailwayUndertaking.blsC => context.l10n.c_ru_bls_c, - RailwayUndertaking.sob => context.l10n.c_ru_sob, + RailwayUndertaking.sbb => context.l10n.c_ru_sbb, + RailwayUndertaking.sbbP => context.l10n.c_ru_sbb_p, + RailwayUndertaking.sbbEPA => context.l10n.c_ru_sbb_epa, + RailwayUndertaking.sbbC => context.l10n.c_ru_sbb_c, + RailwayUndertaking.sbbCInt => context.l10n.c_ru_sbbc_int, + RailwayUndertaking.sbbD => context.l10n.c_ru_sbb_d, + RailwayUndertaking.sbbInfraBuildLog => context.l10n.c_ru_sbb_infra_baulog, + RailwayUndertaking.sbbInfraPath => context.l10n.c_ru_sbb_infra_path, + RailwayUndertaking.sobT => context.l10n.c_ru_sob_t, + RailwayUndertaking.sobI => context.l10n.c_ru_sob_i, + RailwayUndertaking.sobITi => context.l10n.c_ru_sob_iti, + RailwayUndertaking.thu => context.l10n.c_ru_thu, + RailwayUndertaking.ra => context.l10n.c_ru_ra, + RailwayUndertaking.travys => context.l10n.c_ru_travys, + RailwayUndertaking.transN => context.l10n.c_ru_transn, + RailwayUndertaking.tpfInfra => context.l10n.c_ru_tpfinfra, + RailwayUndertaking.tpfTrafic => context.l10n.c_ru_tpftrafic, + RailwayUndertaking.tmr => context.l10n.c_ru_tmr, + RailwayUndertaking.mbc => context.l10n.c_ru_mbc, }; String localizedText(AppLocalizations localizations) => switch (this) { - RailwayUndertaking.sbbP => localizations.c_ru_sbb_p, - RailwayUndertaking.sbbC => localizations.c_ru_sbb_c, + RailwayUndertaking.blsN => localizations.c_ru_bls_n, RailwayUndertaking.blsP => localizations.c_ru_bls_p, + RailwayUndertaking.blsNEvu => localizations.c_ru_bls_nevu, RailwayUndertaking.blsC => localizations.c_ru_bls_c, - RailwayUndertaking.sob => localizations.c_ru_sob, + RailwayUndertaking.sbb => localizations.c_ru_sbb, + RailwayUndertaking.sbbP => localizations.c_ru_sbb_p, + RailwayUndertaking.sbbEPA => localizations.c_ru_sbb_epa, + RailwayUndertaking.sbbC => localizations.c_ru_sbb_c, + RailwayUndertaking.sbbCInt => localizations.c_ru_sbbc_int, + RailwayUndertaking.sbbD => localizations.c_ru_sbb_d, + RailwayUndertaking.sbbInfraBuildLog => localizations.c_ru_sbb_infra_baulog, + RailwayUndertaking.sbbInfraPath => localizations.c_ru_sbb_infra_path, + RailwayUndertaking.sobT => localizations.c_ru_sob_t, + RailwayUndertaking.sobI => localizations.c_ru_sob_i, + RailwayUndertaking.sobITi => localizations.c_ru_sob_iti, + RailwayUndertaking.thu => localizations.c_ru_thu, + RailwayUndertaking.ra => localizations.c_ru_ra, + RailwayUndertaking.travys => localizations.c_ru_travys, + RailwayUndertaking.transN => localizations.c_ru_transn, + RailwayUndertaking.tpfInfra => localizations.c_ru_tpfinfra, + RailwayUndertaking.tpfTrafic => localizations.c_ru_tpftrafic, + RailwayUndertaking.tmr => localizations.c_ru_tmr, + RailwayUndertaking.mbc => localizations.c_ru_mbc, }; } diff --git a/das_client/app/lib/pages/journey/selection/railway_undertaking/widgets/select_railway_undertaking_input.dart b/das_client/app/lib/pages/journey/selection/railway_undertaking/widgets/select_railway_undertaking_input.dart index 78f6a936f..f53dd92c0 100644 --- a/das_client/app/lib/pages/journey/selection/railway_undertaking/widgets/select_railway_undertaking_input.dart +++ b/das_client/app/lib/pages/journey/selection/railway_undertaking/widgets/select_railway_undertaking_input.dart @@ -92,15 +92,24 @@ class _RailwayUndertakingTextFieldState extends State<_RailwayUndertakingTextFie hintText: widget.isModalVersion ? context.l10n.p_train_selection_ru_description : null, ), onTap: () { + final radius = Radius.circular(16); showModalBottomSheet( + context: context, isScrollControlled: true, backgroundColor: _modalBackgroundColor(context), shape: SelectRailwayUndertakingModal.shapeBorder, constraints: _modalConstraints, - context: context, - builder: (_) => Provider.value( - value: context.read(), - child: SelectRailwayUndertakingModal(selectedRailwayUndertaking: widget.selectedRailwayUndertaking), + builder: (_) => ClipRRect( + borderRadius: BorderRadius.only(topLeft: radius, topRight: radius), + child: Material( + color: _modalBackgroundColor(context), + child: Provider.value( + value: context.read(), + child: SelectRailwayUndertakingModal( + selectedRailwayUndertaking: widget.selectedRailwayUndertaking, + ), + ), + ), ), ); }, diff --git a/das_client/app/test/pages/journey/selection/railway_undertaking/select_railway_undertaking_modal_controller_test.dart b/das_client/app/test/pages/journey/selection/railway_undertaking/select_railway_undertaking_modal_controller_test.dart index ffe189e0d..b1931673c 100644 --- a/das_client/app/test/pages/journey/selection/railway_undertaking/select_railway_undertaking_modal_controller_test.dart +++ b/das_client/app/test/pages/journey/selection/railway_undertaking/select_railway_undertaking_modal_controller_test.dart @@ -87,7 +87,16 @@ void main() { // EXPECT expect( emitRegister, - orderedEquals([RailwayUndertaking.sbbC, RailwayUndertaking.sbbP]), + orderedEquals([ + RailwayUndertaking.sbbC, + RailwayUndertaking.sbbP, + RailwayUndertaking.sbb, + RailwayUndertaking.sbbCInt, + RailwayUndertaking.sbbD, + RailwayUndertaking.sbbInfraBuildLog, + RailwayUndertaking.sbbInfraPath, + RailwayUndertaking.sbbEPA, + ]), ); }); @@ -139,7 +148,7 @@ void main() { test('updateIsSelectingRailwayUndertaking_whenSetSelectedRuCalled_thenIsCalled', () { // ARRANGE - final newRu = RailwayUndertaking.sob; + final newRu = RailwayUndertaking.sobT; reset(mockUpdateAvailableRuFunction); // ACT diff --git a/das_client/sfera/lib/src/model/ru.dart b/das_client/sfera/lib/src/model/ru.dart index 3ffa68c41..7fe46b1a6 100644 --- a/das_client/sfera/lib/src/model/ru.dart +++ b/das_client/sfera/lib/src/model/ru.dart @@ -1,9 +1,27 @@ enum RailwayUndertaking { - sbbP(companyCode: '1185'), - sbbC(companyCode: '2185'), + blsN(companyCode: '0063'), blsP(companyCode: '1163'), + blsNEvu(companyCode: '2263'), blsC(companyCode: '3356'), - sob(companyCode: '5458'); + sbb(companyCode: '1085'), + sbbP(companyCode: '1385'), + sbbEPA(companyCode: '1285'), + sbbC(companyCode: '2185'), + sbbCInt(companyCode: '2585'), + sbbD(companyCode: '5404'), + sbbInfraBuildLog(companyCode: '5184'), + sbbInfraPath(companyCode: '5186'), + sobT(companyCode: '5458'), + sobI(companyCode: '5459'), + sobITi(companyCode: '5460'), + thu(companyCode: '3917'), + ra(companyCode: '5680'), + travys(companyCode: '5227'), + transN(companyCode: '5244'), + tpfInfra(companyCode: '5234'), + tpfTrafic(companyCode: '5495'), + tmr(companyCode: '5429'), + mbc(companyCode: '5230'); const RailwayUndertaking({ required this.companyCode, From 889cca29f1c71d24f3c12dcd08f2e22e3b5b5fae Mon Sep 17 00:00:00 2001 From: "Raphael Schreiber (IT-PTR-CEN1-BDE22-Extern)" Date: Fri, 17 Oct 2025 10:58:10 +0200 Subject: [PATCH 2/2] fix: fixed the conflicts --- .../widgets/select_railway_undertaking_input.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/das_client/app/lib/pages/journey/selection/railway_undertaking/widgets/select_railway_undertaking_input.dart b/das_client/app/lib/pages/journey/selection/railway_undertaking/widgets/select_railway_undertaking_input.dart index f53dd92c0..6f37feffd 100644 --- a/das_client/app/lib/pages/journey/selection/railway_undertaking/widgets/select_railway_undertaking_input.dart +++ b/das_client/app/lib/pages/journey/selection/railway_undertaking/widgets/select_railway_undertaking_input.dart @@ -100,7 +100,10 @@ class _RailwayUndertakingTextFieldState extends State<_RailwayUndertakingTextFie shape: SelectRailwayUndertakingModal.shapeBorder, constraints: _modalConstraints, builder: (_) => ClipRRect( - borderRadius: BorderRadius.only(topLeft: radius, topRight: radius), + borderRadius: BorderRadius.only( + topLeft: radius, + topRight: radius, + ), child: Material( color: _modalBackgroundColor(context), child: Provider.value(