Skip to content

Commit 0ca6f1e

Browse files
committed
fixup! editoast: add train_schedule object to search endpoint
1 parent e45c644 commit 0ca6f1e

File tree

1 file changed

+68
-4
lines changed

1 file changed

+68
-4
lines changed

editoast/src/views/search.rs

+68-4
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,6 @@ use editoast_common::geometry::GeoJsonPoint;
217217
use editoast_derive::EditoastError;
218218
use editoast_derive::Search;
219219
use editoast_derive::SearchConfigStore;
220-
use editoast_schemas::train_schedule::Comfort;
221-
use editoast_schemas::train_schedule::Distribution;
222220
use editoast_schemas::train_schedule::Margins;
223221
use editoast_schemas::train_schedule::PathItem;
224222
use editoast_schemas::train_schedule::PowerRestrictionItem;
@@ -667,6 +665,7 @@ pub(super) struct SearchResultItemStudy {
667665
)]
668666
#[allow(unused)]
669667
/// A search result item for a query with `object = "scenario"`
668+
#[derive(serde::Deserialize)]
670669
pub(super) struct SearchResultItemScenario {
671670
#[search(sql = "scenario.id")]
672671
id: u64,
@@ -701,6 +700,7 @@ pub(super) struct SearchResultItemScenario {
701700
)]
702701
#[allow(unused)]
703702
/// A search result item for a query with `object = "trainschedule"`
703+
#[derive(serde::Deserialize)]
704704
pub(super) struct SearchResultItemTrainSchedule {
705705
#[search(sql = "train_schedule.id")]
706706
id: u64,
@@ -721,11 +721,11 @@ pub(super) struct SearchResultItemTrainSchedule {
721721
#[search(sql = "train_schedule.initial_speed")]
722722
initial_speed: f64,
723723
#[search(sql = "train_schedule.comfort")]
724-
comfort: Comfort,
724+
comfort: i64,
725725
#[search(sql = "train_schedule.path")]
726726
path: Vec<PathItem>,
727727
#[search(sql = "train_schedule.constraint_distribution")]
728-
constraint_distribution: Distribution,
728+
constraint_distribution: i64,
729729
#[search(sql = "train_schedule.speed_limit_tag")]
730730
speed_limit_tag: Option<String>,
731731
#[search(sql = "train_schedule.power_restrictions")]
@@ -746,3 +746,67 @@ pub(super) struct SearchResultItemTrainSchedule {
746746
object(name = "trainschedule", config = SearchResultItemTrainSchedule),
747747
)]
748748
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

Comments
 (0)