#![allow(dead_code, deprecated)]
use chrono::NaiveDate;
use mockito::{Mock, ServerGuard};
use reqwest::Url;
use schoolsoft::user::{Org, Token, User, UserType};
pub fn basic_user(url: &str) -> User {
let url = Url::parse(url).expect("url should be parsable").join("/mock_school").expect("should be able to join with mock_school");
User::new(
url.clone(),
"mock_user".to_string(),
"123notreal".to_string(),
UserType::Student,
1337,
vec![Org {
id: 1,
name: "Mock School".to_string(),
blogger: false,
school_type: 1,
leisure_school: 1,
class: "f35b".to_string(),
token_login: format!("{}/jsp/app/TokenLogin.jsp?token=TOKEN_PLACEHOLDER&orgid=1&childid=1337&redirect=https%3A%2F%2Fsms1.schoolsoft.se%2Fmock_school%2Fjsp%2Fstudent%2Fright_student_startpage.jsp", url),
}],
)
}
pub fn basic_user_with_token(url: &str) -> User {
let mut user = basic_user(url);
let token = Token {
token: "one_of_those_tokens".to_string(),
now: || NaiveDate::from_ymd(2024, 2, 12).and_hms(19, 22, 23),
expires: NaiveDate::from_ymd(2024, 2, 12).and_hms(20, 22, 23),
};
dbg!(token.expires_in());
assert!(token.is_safe());
user.token = Some(token);
user
}
pub fn get(server: &mut ServerGuard, path: &str, body: &str, school: Option<&str>) -> Mock {
let path = format!("/{}/{}", school.unwrap_or("mock_school"), path);
server
.mock("GET", path.as_str())
.with_status(200)
.with_body(body)
.create()
}
pub fn post(server: &mut ServerGuard, path: &str, body: &str, school: Option<&str>) -> Mock {
let path = format!("/{}/{}", school.unwrap_or("mock_school"), path);
server
.mock("POST", path.as_str())
.with_status(200)
.with_body(body)
.create()
}
pub fn login_mock(server: &mut ServerGuard, school: Option<&str>) -> Mock {
let url = server.url();
let school = school.unwrap_or("mock_school");
post(
server,
"rest/app/login",
format!(
r#"{{
"pictureUrl": "pictureFile.jsp?studentId=1337",
"name": "Mock User",
"isOfAge": false,
"appKey": "123notreal",
"orgs": [
{{
"name": "Mock School",
"blogger": false,
"schoolType": 9,
"leisureSchool": 0,
"class": "F35b",
"orgId": 1,
"tokenLogin": "{url}/{school}/jsp/app/TokenLogin.jsp?token=TOKEN_PLACEHOLDER&orgid=1&childid=1337&redirect=https%3A%2F%2Fsms1.schoolsoft.se%2mock_school%2Fjsp%2Fstudent%2Fright_student_startpage.jsp"
}}
],
"type": 1,
"userId": 1337
}}"#,
)
.as_str(),
Some(school),
)
}
pub fn token_mock(server: &mut ServerGuard, token: &str, expiration: Option<&str>) -> Mock {
let expi_date = expiration.unwrap_or("2024-02-12 17:22:23.714");
post(
server,
"rest/app/token",
format!(
r#"{{
"expiryDate":"{expi_date}",
"token":"{token}"
}}"#
)
.as_str(),
None,
)
}
pub fn get_with_token_and_login(
server: &mut ServerGuard,
path: &str,
body: &str,
) -> (Mock, Mock, Mock) {
let school = Some("mock_school");
(
login_mock(server, school),
token_mock(server, "one_of_those_tokens", None),
get(server, path, body, school),
)
}