dco3 0.20.1

Async API wrapper for DRACOON in Rust.
Documentation
#[cfg(test)]
mod tests {

    use chrono::DateTime;

    use crate::*;

    use crate::groups::{CreateGroupRequest, GroupsFilter, GroupsSortBy, UpdateGroupRequest};
    use crate::nodes::UserType;
    use crate::tests::dracoon::get_connected_client;

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

        let groups_res = include_str!("./responses/groups/groups_ok.json");

        let groups_mock = mock_server
            .mock("GET", "/api/v4/groups?offset=0")
            .with_status(200)
            .with_header("content-type", "application/json")
            .with_body(groups_res)
            .create();

        let groups = dracoon.groups().get_groups(None).await.unwrap();
        let group = groups.items.first().unwrap();

        groups_mock.assert();

        assert_eq!(groups.items.len(), 1);
        assert_eq!(group.id, 1);
        assert_eq!(group.name, "string");
        assert_eq!(group.created_by.id, 2);
        assert!(group.created_by.first_name.is_some());
        assert!(group.created_by.last_name.is_some());
        assert!(group.created_by.user_name.is_some());
        assert!(group.cnt_users.is_some());
        assert!(group.updated_by.is_some());
        assert_eq!(group.created_by.user_name.as_ref().unwrap(), "string");
        assert_eq!(
            group.created_by.first_name.as_ref().unwrap().clone(),
            "string"
        );
        assert_eq!(
            group.created_by.last_name.as_ref().unwrap().clone(),
            "string"
        );
        assert_eq!(
            group.created_at,
            DateTime::parse_from_rfc3339("2020-01-01T00:00:00.000Z").unwrap()
        );
        assert_eq!(group.created_by.id, 2);
        assert_eq!(group.created_by.user_type, UserType::Internal);
        assert_eq!(group.created_by.email.as_ref().unwrap(), "string");
        assert_eq!(group.created_by.avatar_uuid, "string");
        assert_eq!(group.cnt_users.unwrap(), 1);

        assert_eq!(
            group
                .updated_by
                .as_ref()
                .unwrap()
                .user_name
                .as_ref()
                .unwrap(),
            "string"
        );
        assert_eq!(
            group
                .updated_by
                .as_ref()
                .unwrap()
                .first_name
                .as_ref()
                .unwrap()
                .clone(),
            "string"
        );
        assert_eq!(
            group
                .updated_by
                .as_ref()
                .unwrap()
                .last_name
                .as_ref()
                .unwrap()
                .clone(),
            "string"
        );
        assert_eq!(
            group.updated_at.as_ref().unwrap(),
            &DateTime::parse_from_rfc3339("2023-07-23T08:58:01.236Z").unwrap()
        );
        assert_eq!(group.updated_by.as_ref().unwrap().id, 2);
        assert_eq!(
            group.updated_by.as_ref().unwrap().user_type,
            UserType::Internal
        );
        assert_eq!(
            group.updated_by.as_ref().unwrap().email.as_ref().unwrap(),
            "string"
        );
        assert_eq!(group.updated_by.as_ref().unwrap().avatar_uuid, "string");
    }

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

        let groups_res = include_str!("./responses/groups/groups_ok.json");

        let groups_mock = mock_server
            .mock("GET", "/api/v4/groups?offset=0&filter=name%3Aeq%3Astring")
            .with_status(200)
            .with_header("content-type", "application/json")
            .with_body(groups_res)
            .create();

        let params = ListAllParams::builder()
            .with_filter(GroupsFilter::Name(FilterOperator::Eq, "string".to_string()))
            .build();

        let groups = dracoon.groups().get_groups(Some(params)).await.unwrap();

        groups_mock.assert();
    }

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

        let groups_res = include_str!("./responses/groups/groups_ok.json");

        let groups_mock = mock_server
            .mock("GET", "/api/v4/groups?offset=0&sort=name%3Aasc")
            .with_status(200)
            .with_header("content-type", "application/json")
            .with_body(groups_res)
            .create();

        let params = ListAllParams::builder()
            .with_sort(GroupsSortBy::Name(SortOrder::Asc))
            .build();

        let groups = dracoon.groups().get_groups(Some(params)).await.unwrap();

        groups_mock.assert();
    }

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

        let groups_res = include_str!("./responses/groups/groups_ok.json");

        let groups_mock = mock_server
            .mock("GET", "/api/v4/groups?offset=0")
            .with_status(200)
            .with_header("content-type", "application/json")
            .with_body(groups_res)
            .create();

        let params = ListAllParams::default();

        let groups = dracoon.groups().get_groups(Some(params)).await.unwrap();

        groups_mock.assert();
    }

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

        let groups_res = include_str!("./responses/groups/groups_ok.json");

        let groups_mock = mock_server
            .mock("GET", "/api/v4/groups?limit=10&offset=0")
            .with_status(200)
            .with_header("content-type", "application/json")
            .with_body(groups_res)
            .create();

        let params = ListAllParams::builder().with_limit(10).build();

        let groups = dracoon.groups().get_groups(Some(params)).await.unwrap();

        groups_mock.assert();
    }

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

        let groups_res = include_str!("./responses/groups/group_ok.json");

        let group_mock = mock_server
            .mock("GET", "/api/v4/groups/123")
            .with_status(200)
            .with_header("content-type", "application/json")
            .with_body(groups_res)
            .create();

        let group = dracoon.groups().get_group(123).await.unwrap();

        group_mock.assert();

        assert_eq!(group.id, 1);
        assert_eq!(group.name, "string");
        assert_eq!(group.created_by.id, 2);
        assert!(group.created_by.first_name.is_some());
        assert!(group.created_by.last_name.is_some());
        assert!(group.created_by.user_name.is_some());
        assert!(group.cnt_users.is_some());
        assert!(group.updated_by.is_some());
        assert_eq!(group.created_by.user_name.as_ref().unwrap(), "string");
        assert_eq!(
            group.created_by.first_name.as_ref().unwrap().clone(),
            "string"
        );
        assert_eq!(
            group.created_by.last_name.as_ref().unwrap().clone(),
            "string"
        );
        assert_eq!(
            group.created_at,
            DateTime::parse_from_rfc3339("2020-01-01T00:00:00.000Z").unwrap()
        );
        assert_eq!(group.created_by.id, 2);
        assert_eq!(group.created_by.user_type, UserType::Internal);
        assert_eq!(group.created_by.email.as_ref().unwrap(), "string");
        assert_eq!(group.created_by.avatar_uuid, "string");
    }

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

        let group_res = include_str!("./responses/groups/group_ok.json");

        let group_mock = mock_server
            .mock("POST", "/api/v4/groups")
            .with_status(200)
            .with_header("content-type", "application/json")
            .with_body(group_res)
            .create();

        let group = CreateGroupRequest::new("string", None);

        let group = dracoon.groups().create_group(group).await.unwrap();

        group_mock.assert();

        assert_eq!(group.id, 1);
        assert_eq!(group.name, "string");
        assert_eq!(group.created_by.id, 2);
        assert!(group.created_by.first_name.is_some());
        assert!(group.created_by.last_name.is_some());
        assert!(group.created_by.user_name.is_some());
        assert!(group.cnt_users.is_some());
        assert!(group.updated_by.is_some());
        assert_eq!(group.created_by.user_name.as_ref().unwrap(), "string");
        assert_eq!(
            group.created_by.first_name.as_ref().unwrap().clone(),
            "string"
        );
        assert_eq!(
            group.created_by.last_name.as_ref().unwrap().clone(),
            "string"
        );
        assert_eq!(
            group.created_at,
            DateTime::parse_from_rfc3339("2020-01-01T00:00:00.000Z").unwrap()
        );
        assert_eq!(group.created_by.id, 2);
        assert_eq!(group.created_by.user_type, UserType::Internal);
        assert_eq!(group.created_by.email.as_ref().unwrap(), "string");
        assert_eq!(group.created_by.avatar_uuid, "string");
    }

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

        let group_res = include_str!("./responses/groups/group_ok.json");

        let group_mock = mock_server
            .mock("PUT", "/api/v4/groups/123")
            .with_status(200)
            .with_header("content-type", "application/json")
            .with_body(group_res)
            .create();

        let update = UpdateGroupRequest::name("string");

        let group = dracoon.groups().update_group(123, update).await.unwrap();

        group_mock.assert();

        assert_eq!(group.id, 1);
        assert_eq!(group.name, "string");
        assert_eq!(group.created_by.id, 2);
        assert!(group.created_by.first_name.is_some());
        assert!(group.created_by.last_name.is_some());
        assert!(group.created_by.user_name.is_some());
        assert!(group.cnt_users.is_some());
        assert!(group.updated_by.is_some());
        assert_eq!(group.created_by.user_name.as_ref().unwrap(), "string");
        assert_eq!(
            group.created_by.first_name.as_ref().unwrap().clone(),
            "string"
        );
        assert_eq!(
            group.created_by.last_name.as_ref().unwrap().clone(),
            "string"
        );
        assert_eq!(
            group.created_at,
            DateTime::parse_from_rfc3339("2020-01-01T00:00:00.000Z").unwrap()
        );
        assert_eq!(group.created_by.id, 2);
        assert_eq!(group.created_by.user_type, UserType::Internal);
        assert_eq!(group.created_by.email.as_ref().unwrap(), "string");
        assert_eq!(group.created_by.avatar_uuid, "string");
    }

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

        let groups_mock = mock_server
            .mock("DELETE", "/api/v4/groups/123")
            .with_status(204)
            .create();

        dracoon.groups().delete_group(123).await.unwrap();

        groups_mock.assert();
    }
}