schoolsoft 1.0.0-alpha.1

A library for interacting with SchoolSofts mobile app API
Documentation
#![allow(deprecated)]
use chrono::{Duration, NaiveDate};
use schoolsoft::types::error::{RequestError, TokenError};
use tokio::test;

use crate::mock::{basic_user, token_mock};

mod mock;

#[test]
async fn ok() {
    let mut server = mockito::Server::new();

    let url = server.url();

    let expiration_date =
        NaiveDate::from_ymd(2024, 2, 12).and_hms(17, 22, 23) + Duration::milliseconds(714);
    let target_token = "123notreal";

    let mock = token_mock(
        &mut server,
        target_token,
        Some(&expiration_date.to_string()),
    );

    let token = basic_user(&url)
        .get_token()
        .await
        .expect("Retrieving a token should work");

    assert_eq!(token.token, target_token);
    assert_eq!(token.expires, expiration_date);

    mock.assert();
}

#[test]
async fn unauthorized() {
    let mut server = mockito::Server::new();

    let url = server.url();

    let mock = server
        .mock("POST", "/mock_school/rest/app/token")
        .with_status(401)
        .create();

    let result = basic_user(&url)
        .get_token()
        .await
        .expect_err("This should not work");

    if let TokenError::RequestError(RequestError::Unauthorized) = result {
    } else {
        panic!("Expected Unauthorized, got {:?}", result)
    }

    mock.assert();
}