Skip to main content

headless_lms_server/controllers/
mock_sisu.rs

1use crate::prelude::*;
2use headless_lms_utils::services::sisu::{
3    Additional, CourseUnitSearchResults, Credits, Name, SearchResult, SisuCourseInfoElement,
4    SisuCourseInfoValidityPeriod,
5};
6use serde_json;
7
8#[derive(Deserialize, Debug)]
9#[serde(rename_all = "camelCase")]
10pub struct MockSisuRequest {
11    code_query: String,
12}
13
14async fn mock_sisu_id_query(
15    query_params: web::Query<MockSisuRequest>,
16    app_conf: web::Data<ApplicationConfiguration>,
17) -> ControllerResult<String> {
18    assert!(app_conf.test_mode && app_conf.test_sisu);
19    let res = match query_params.code_query.as_str() {
20        "TEST001" => {
21            let sisu_ids: Vec<SearchResult> = vec![
22                SearchResult {
23                    id: "mock-id-1-1".to_string(),
24                },
25                SearchResult {
26                    id: "mock-id-1-2".to_string(),
27                },
28            ];
29            serde_json::to_string(
30                &(CourseUnitSearchResults {
31                    search_results: sisu_ids,
32                }),
33            )
34        }
35        "TEST002" => {
36            let sisu_ids: Vec<SearchResult> = vec![
37                SearchResult {
38                    id: "mock-id-2-1".to_string(),
39                },
40                SearchResult {
41                    id: "mock-id-2-2".to_string(),
42                },
43            ];
44            serde_json::to_string(
45                &(CourseUnitSearchResults {
46                    search_results: sisu_ids,
47                }),
48            )
49        }
50        "TEST003" => {
51            let sisu_ids: Vec<SearchResult> = vec![
52                SearchResult {
53                    id: "mock-id-3-1".to_string(),
54                },
55                SearchResult {
56                    id: "mock-id-3-2".to_string(),
57                },
58            ];
59            serde_json::to_string(
60                &(CourseUnitSearchResults {
61                    search_results: sisu_ids,
62                }),
63            )
64        }
65
66        _ => serde_json::to_string(
67            &(CourseUnitSearchResults {
68                search_results: vec![],
69            }),
70        ),
71    }?;
72    let token = skip_authorize();
73    token.authorized_ok(res)
74}
75
76async fn mock_sisu_course_info(
77    app_conf: web::Data<ApplicationConfiguration>,
78    id: web::Path<String>,
79) -> ControllerResult<String> {
80    assert!(app_conf.test_mode && app_conf.test_sisu);
81    let res = match id.as_str() {
82        "mock-id-1-1" => serde_json::to_string(
83            &(SisuCourseInfoElement {
84                id: String::from("mock-id-1-1"),
85                university_org_ids: vec!["hy-university".to_string()],
86                group_id: "hy-CU-142971304".to_string(),
87                credits: Credits {
88                    min: None,
89                    max: None,
90                },
91                completion_methods: vec![],
92                name: Name {
93                    en: Some("Mock Docker 1".to_string()),
94                    fi: None,
95                    sv: None,
96                },
97                code: "TEST001".to_string(),
98                abbreviation: None,
99                validity_period: SisuCourseInfoValidityPeriod {
100                    start_date: None,
101                    end_date: None,
102                },
103                grade_scale_id: "sis-hyl-hyv".to_string(),
104                tweet_text: None,
105                outcomes: Some(Additional {
106                    en: Some("Mock outcomes".to_string()),
107                    fi: None,
108                    sv: None,
109                }),
110                prerequisites: Some(Additional {
111                    en: Some("Mock prerequisites".to_string()),
112                    fi: None,
113                    sv: None,
114                }),
115                content: Some(Additional {
116                    en: Some("Mock content".to_string()),
117                    fi: None,
118                    sv: None,
119                }),
120                additional: Some(Additional {
121                    en: Some("Mock additional".to_string()),
122                    fi: None,
123                    sv: None,
124                }),
125                learning_material: Some(Additional {
126                    en: Some("Mock learning materials".to_string()),
127                    fi: None,
128                    sv: None,
129                }),
130                literature: vec![],
131                study_level: "".to_string(),
132                course_unit_type: "".to_string(),
133                subject: None,
134                cefr_level: None,
135                organisations: vec![],
136                possible_attainment_languages: vec![],
137                part_of_degree: None,
138            }),
139        ),
140        "mock-id-2-1" => serde_json::to_string(
141            &(SisuCourseInfoElement {
142                id: String::from("mock-id-2-1"),
143                university_org_ids: vec!["hy-university".to_string()],
144                group_id: "hy-CU-142971304".to_string(),
145                credits: Credits {
146                    min: None,
147                    max: None,
148                },
149                completion_methods: vec![],
150                name: Name {
151                    en: Some("Mock Docker 2".to_string()),
152                    fi: None,
153                    sv: None,
154                },
155                code: "TEST002".to_string(),
156                abbreviation: None,
157                validity_period: SisuCourseInfoValidityPeriod {
158                    start_date: None,
159                    end_date: None,
160                },
161                grade_scale_id: "sis-hyl-hyv".to_string(),
162                tweet_text: None,
163                outcomes: Some(Additional {
164                    en: Some("Mock outcomes".to_string()),
165                    fi: None,
166                    sv: None,
167                }),
168                prerequisites: Some(Additional {
169                    en: Some("Mock prerequisites".to_string()),
170                    fi: None,
171                    sv: None,
172                }),
173                content: Some(Additional {
174                    en: Some("Mock content".to_string()),
175                    fi: None,
176                    sv: None,
177                }),
178                additional: Some(Additional {
179                    en: Some("Mock additional".to_string()),
180                    fi: None,
181                    sv: None,
182                }),
183                learning_material: Some(Additional {
184                    en: Some("Mock learning materials".to_string()),
185                    fi: None,
186                    sv: None,
187                }),
188                literature: vec![],
189                study_level: "".to_string(),
190                course_unit_type: "".to_string(),
191                subject: None,
192                cefr_level: None,
193                organisations: vec![],
194                possible_attainment_languages: vec![],
195                part_of_degree: None,
196            }),
197        ),
198        "mock-id-3-1" => serde_json::to_string(
199            &(SisuCourseInfoElement {
200                id: String::from("mock-id-3-1"),
201                university_org_ids: vec!["hy-university".to_string()],
202                group_id: "hy-CU-142971304".to_string(),
203                credits: Credits {
204                    min: None,
205                    max: None,
206                },
207                completion_methods: vec![],
208                name: Name {
209                    en: Some("Mock Docker 3".to_string()),
210                    fi: None,
211                    sv: None,
212                },
213                code: "TEST003".to_string(),
214                abbreviation: None,
215                validity_period: SisuCourseInfoValidityPeriod {
216                    start_date: None,
217                    end_date: None,
218                },
219                grade_scale_id: "sis-hyl-hyv".to_string(),
220                tweet_text: None,
221                outcomes: Some(Additional {
222                    en: Some("Mock outcomes".to_string()),
223                    fi: None,
224                    sv: None,
225                }),
226                prerequisites: Some(Additional {
227                    en: Some("Mock prerequisites".to_string()),
228                    fi: None,
229                    sv: None,
230                }),
231                content: Some(Additional {
232                    en: Some("Mock content".to_string()),
233                    fi: None,
234                    sv: None,
235                }),
236                additional: Some(Additional {
237                    en: Some("Mock additional".to_string()),
238                    fi: None,
239                    sv: None,
240                }),
241                learning_material: Some(Additional {
242                    en: Some("Mock learning materials".to_string()),
243                    fi: None,
244                    sv: None,
245                }),
246                literature: vec![],
247                study_level: "".to_string(),
248                course_unit_type: "".to_string(),
249                subject: None,
250                cefr_level: None,
251                organisations: vec![],
252                possible_attainment_languages: vec![],
253                part_of_degree: None,
254            }),
255        ),
256
257        _ => Ok("{}".to_string()),
258    }?;
259    let token = skip_authorize();
260    token.authorized_ok(res)
261}
262
263pub fn _add_routes(cfg: &mut ServiceConfig) {
264    cfg.route("course-unit-search", web::get().to(mock_sisu_id_query))
265        .route("course-units/v1/{id}", web::get().to(mock_sisu_course_info));
266}