@@ -217,8 +217,6 @@ use editoast_common::geometry::GeoJsonPoint;
217
217
use editoast_derive:: EditoastError ;
218
218
use editoast_derive:: Search ;
219
219
use editoast_derive:: SearchConfigStore ;
220
- use editoast_schemas:: train_schedule:: Comfort ;
221
- use editoast_schemas:: train_schedule:: Distribution ;
222
220
use editoast_schemas:: train_schedule:: Margins ;
223
221
use editoast_schemas:: train_schedule:: PathItem ;
224
222
use editoast_schemas:: train_schedule:: PowerRestrictionItem ;
@@ -667,6 +665,7 @@ pub(super) struct SearchResultItemStudy {
667
665
) ]
668
666
#[ allow( unused) ]
669
667
/// A search result item for a query with `object = "scenario"`
668
+ #[ derive( serde:: Deserialize ) ]
670
669
pub ( super ) struct SearchResultItemScenario {
671
670
#[ search( sql = "scenario.id" ) ]
672
671
id : u64 ,
@@ -701,6 +700,7 @@ pub(super) struct SearchResultItemScenario {
701
700
) ]
702
701
#[ allow( unused) ]
703
702
/// A search result item for a query with `object = "trainschedule"`
703
+ #[ derive( serde:: Deserialize ) ]
704
704
pub ( super ) struct SearchResultItemTrainSchedule {
705
705
#[ search( sql = "train_schedule.id" ) ]
706
706
id : u64 ,
@@ -721,11 +721,11 @@ pub(super) struct SearchResultItemTrainSchedule {
721
721
#[ search( sql = "train_schedule.initial_speed" ) ]
722
722
initial_speed : f64 ,
723
723
#[ search( sql = "train_schedule.comfort" ) ]
724
- comfort : Comfort ,
724
+ comfort : i64 ,
725
725
#[ search( sql = "train_schedule.path" ) ]
726
726
path : Vec < PathItem > ,
727
727
#[ search( sql = "train_schedule.constraint_distribution" ) ]
728
- constraint_distribution : Distribution ,
728
+ constraint_distribution : i64 ,
729
729
#[ search( sql = "train_schedule.speed_limit_tag" ) ]
730
730
speed_limit_tag : Option < String > ,
731
731
#[ search( sql = "train_schedule.power_restrictions" ) ]
@@ -746,3 +746,67 @@ pub(super) struct SearchResultItemTrainSchedule {
746
746
object( name = "trainschedule" , config = SearchResultItemTrainSchedule ) ,
747
747
) ]
748
748
pub struct SearchConfigFinder ;
749
+
750
+ #[ cfg( test) ]
751
+ pub mod test {
752
+
753
+ use axum:: http:: StatusCode ;
754
+ use pretty_assertions:: assert_eq;
755
+ use rstest:: rstest;
756
+ use serde_json:: json;
757
+
758
+ use super :: * ;
759
+ use crate :: models:: fixtures:: { create_simple_train_schedule, create_timetable} ;
760
+ use crate :: views:: test_app:: TestAppBuilder ;
761
+ use crate :: models:: train_schedule:: TrainSchedule ;
762
+
763
+ #[ rstest]
764
+ async fn search_trainschedule_post ( ) {
765
+ let app = TestAppBuilder :: default_app ( ) ;
766
+ let pool = app. db_pool ( ) ;
767
+
768
+ // Create the timetable in the database
769
+ let timetable = create_timetable ( & mut pool. get_ok ( ) ) . await ;
770
+ let timetable_id = timetable. id ;
771
+
772
+ // Load data of the json file
773
+ #[ derive( serde:: Deserialize ) ]
774
+ struct TrainScheduleInfo {
775
+ pub train_name : String ,
776
+ }
777
+ let train_schedule_info: TrainScheduleInfo = serde_json:: from_str ( include_str ! ( "../tests/train_schedules/simple.json" ) )
778
+ . expect ( "Unable to parse" ) ;
779
+ let train_name = train_schedule_info. train_name ;
780
+
781
+ // Add a train_schedule in the database
782
+ let train_schedule: TrainSchedule = create_simple_train_schedule ( & mut pool. get_ok ( ) , timetable_id) . await ;
783
+ assert_eq ! ( train_schedule. train_name, train_name) ;
784
+
785
+ // The body
786
+ let request = app. post ( "/search" ) . json ( & json ! ( {
787
+ "object" : "trainschedule" ,
788
+ "query" : [
789
+ "and" ,
790
+ [
791
+ "search" ,
792
+ [
793
+ "train_name"
794
+ ] ,
795
+ train_name
796
+ ] ,
797
+ [
798
+ "=" ,
799
+ [
800
+
801
+ "timetable_id"
802
+ ] ,
803
+ timetable_id
804
+ ]
805
+ ] ,
806
+ } ) ) ;
807
+
808
+ let response: Vec < SearchResultItemTrainSchedule > = app. fetch ( request) . assert_status ( StatusCode :: OK ) . json_into ( ) ;
809
+
810
+ assert_eq ! ( response[ 0 ] . train_name, train_name) ;
811
+ }
812
+ }
0 commit comments