dco3 0.20.1

Async API wrapper for DRACOON in Rust.
Documentation
#[cfg(test)]
mod tests {
    use dco3_crypto::{DracoonCrypto, DracoonRSACrypto, UserKeyPairContainer};

    use crate::{
        tests::dracoon::{assert_user_account, get_connected_client},
        user::UpdateUserAccountRequest,
        User, UserAccountKeyPairs,
    };

    #[tokio::test]
    async fn test_get_keypair() {
        let (client, mock_server) = get_connected_client().await;
        let mut mock_server = mock_server;

        let keypair_res = include_str!("../tests/responses/keypair_ok.json");

        let kp_from_json = serde_json::from_str::<UserKeyPairContainer>(keypair_res).unwrap();
        let plain_kp_compare =
            DracoonCrypto::decrypt_keypair("TopSecret1234!", kp_from_json).unwrap();

        let keypair_mock = mock_server
            .mock("GET", "/api/v4/user/account/keypair")
            .with_status(200)
            .with_body(keypair_res)
            .with_header("content-type", "application/json")
            .create();

        let keypair = client
            .user()
            .get_user_keypair("TopSecret1234!")
            .await
            .unwrap();

        keypair_mock.assert();

        assert_eq!(
            keypair.private_key_container.private_key,
            plain_kp_compare.private_key_container.private_key
        );
        assert_eq!(
            keypair.public_key_container.public_key,
            plain_kp_compare.public_key_container.public_key
        );
        assert_eq!(
            keypair.private_key_container.version,
            plain_kp_compare.private_key_container.version
        );
        assert_eq!(
            keypair.public_key_container.version,
            plain_kp_compare.public_key_container.version
        );
    }

    #[tokio::test]
    async fn test_set_keypair() {
        let (client, mock_server) = get_connected_client().await;
        let mut mock_server = mock_server;

        let keypair_mock = mock_server
            .mock("POST", "/api/v4/user/account/keypair")
            .with_status(204)
            .create();

        let res = client.user().set_user_keypair("TopSecret1234!").await;

        keypair_mock.assert();

        assert!(res.is_ok());
    }

    #[tokio::test]
    async fn test_delete_keypair() {
        let (client, mock_server) = get_connected_client().await;
        let mut mock_server = mock_server;

        let keypair_mock = mock_server
            .mock("DELETE", "/api/v4/user/account/keypair")
            .with_status(204)
            .create();

        let res = client.user().delete_user_keypair().await;

        keypair_mock.assert();

        assert!(res.is_ok());
    }

    #[tokio::test]
    async fn test_get_user_account() {
        let (client, mut mock_server) = get_connected_client().await;

        let account_res = include_str!("../tests/responses/user_info_ok.json");
        let user_account_mock = mock_server
            .mock("GET", "/api/v4/user/account")
            .with_status(200)
            .with_header("content-type", "application/json")
            .with_body(account_res)
            .create();

        let user_account = client.user().get_user_account().await.unwrap();

        user_account_mock.assert();

        assert_user_account(&user_account);
    }

    #[tokio::test]
    async fn test_update_user_account() {
        let (client, mut mock_server) = get_connected_client().await;

        let account_res = include_str!("../tests/responses/user_info_ok.json");

        let user_account_mock = mock_server
            .mock("PUT", "/api/v4/user/account")
            .with_status(200)
            .with_header("content-type", "application/json")
            .with_body(account_res)
            .create();

        let update = UpdateUserAccountRequest::builder()
            .with_first_name("test")
            .with_last_name("test")
            .with_phone("test")
            .with_email("test@localhost")
            .build();

        let user_account = client.user().update_user_account(update).await.unwrap();

        user_account_mock.assert();

        assert_user_account(&user_account);
    }

    #[tokio::test]
    async fn test_get_customer_info() {
        let (client, mut mock_server) = get_connected_client().await;

        let customer_res = include_str!("../tests/responses/customer_info_ok.json");

        let customer_mock = mock_server
            .mock("GET", "/api/v4/user/account/customer")
            .with_status(200)
            .with_header("content-type", "application/json")
            .with_body(customer_res)
            .create();

        let customer = client.user().get_customer_info().await.unwrap();

        customer_mock.assert();

        assert_eq!(customer.name, "string");
        assert_eq!(customer.id, 1);
        assert!(customer.is_provider_customer);
        assert_eq!(customer.accounts_limit, 100);
        assert_eq!(customer.space_limit, 100);
        assert_eq!(customer.space_used, 10);
        assert_eq!(customer.accounts_used, 10);
        assert_eq!(customer.cnt_guest_user.unwrap(), 1);
        assert_eq!(customer.cnt_internal_user.unwrap(), 9);
        assert!(customer.customer_encryption_enabled);
    }
}