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}