tetr_ch 0.8.0

A Rust wrapper for the TETRA CHANNEL API.
Documentation
use tetr_ch::{
    model::{
        leaderboard::{HistoricalLeaderboard, Leaderboard},
        news::NewsItems,
        records_leaderboard::RecordsLeaderboard,
        user_records::UserRecords,
    },
    prelude::*,
};

type Rsp<T> = Result<tetr_ch::model::response::Response<T>, tetr_ch::client::error::ResponseError>;

#[tokio::test]
async fn client_get_leaderboard_successes_if_valid_limit() {
    let criteria = user_leaderboard::SearchCriteria::new()
        .after([15200., 0., 0.])
        .limit(1)
        .country("jp");
    let _: Rsp<Leaderboard> = Client::new()
        .get_leaderboard(UserLeaderboardType::League, Some(criteria))
        .await;
}

#[tokio::test]
#[should_panic(expected = "The limit must be between 1 and 100, but got 0.")]
async fn client_get_leaderboard_panics_if_limit_is_zero() {
    let criteria = user_leaderboard::SearchCriteria {
        limit: Some(0),
        ..Default::default()
    };
    let _: Rsp<Leaderboard> = Client::new()
        .get_leaderboard(UserLeaderboardType::League, Some(criteria))
        .await;
}

#[tokio::test]
#[should_panic(expected = "The limit must be between 1 and 100, but got 101.")]
async fn client_get_leaderboard_panics_if_limit_is_101() {
    let criteria = user_leaderboard::SearchCriteria {
        limit: Some(101),
        ..Default::default()
    };
    let _: Rsp<Leaderboard> = Client::new()
        .get_leaderboard(UserLeaderboardType::League, Some(criteria))
        .await;
}

#[tokio::test]
async fn client_get_historical_league_leaderboard_successes_if_valid_limit() {
    let criteria = user_leaderboard::SearchCriteria::new()
        .after([15200., 0., 0.])
        .limit(1)
        .country("jp");
    let _: Rsp<HistoricalLeaderboard> = Client::new()
        .get_historical_league_leaderboard("1", Some(criteria))
        .await;
}

#[tokio::test]
#[should_panic(expected = "The limit must be between 1 and 100, but got 0.")]
async fn client_get_historical_league_leaderboard_panics_if_limit_is_zero() {
    let criteria = user_leaderboard::SearchCriteria {
        limit: Some(0),
        ..Default::default()
    };
    let _: Rsp<HistoricalLeaderboard> = Client::new()
        .get_historical_league_leaderboard("1", Some(criteria))
        .await;
}

#[tokio::test]
#[should_panic(expected = "The limit must be between 1 and 100, but got 101.")]
async fn client_get_historical_league_leaderboard_panics_if_limit_is_101() {
    let criteria = user_leaderboard::SearchCriteria {
        limit: Some(101),
        ..Default::default()
    };
    let _: Rsp<HistoricalLeaderboard> = Client::new()
        .get_historical_league_leaderboard("1", Some(criteria))
        .await;
}

#[tokio::test]
async fn client_get_user_records_successes_if_valid_limit() {
    let criteria = record::SearchCriteria::new()
        .after([500000., 0., 0.])
        .limit(1);
    let _: Rsp<UserRecords> = Client::new()
        .get_user_records(
            "rinrin-rs",
            record::Gamemode::FortyLines,
            record::LeaderboardType::Top,
            Some(criteria),
        )
        .await;
}

#[tokio::test]
#[should_panic(expected = "The limit must be between 1 and 100, but got 0.")]
async fn client_get_user_records_panics_if_limit_is_zero() {
    let criteria = record::SearchCriteria {
        limit: Some(0),
        ..Default::default()
    };
    let _: Rsp<UserRecords> = Client::new()
        .get_user_records(
            "rinrin-rs",
            record::Gamemode::FortyLines,
            record::LeaderboardType::Top,
            Some(criteria),
        )
        .await;
}

#[tokio::test]
#[should_panic(expected = "The limit must be between 1 and 100, but got 101.")]
async fn client_get_user_records_panics_if_limit_is_101() {
    let criteria = record::SearchCriteria {
        limit: Some(101),
        ..Default::default()
    };
    let _: Rsp<UserRecords> = Client::new()
        .get_user_records(
            "rinrin-rs",
            record::Gamemode::FortyLines,
            record::LeaderboardType::Top,
            Some(criteria),
        )
        .await;
}

#[tokio::test]
async fn client_get_records_leaderboard_successes_if_valid_limit() {
    let criteria = record_leaderboard::SearchCriteria::new()
        .after([500000., 0., 0.])
        .limit(1);
    let id =
        RecordsLeaderboardId::new("zenith", Scope::Country("JP".to_string()), Some("@2024w31"));
    let _: Rsp<RecordsLeaderboard> = Client::new()
        .get_records_leaderboard(id, Some(criteria))
        .await;
}

#[tokio::test]
#[should_panic(expected = "The limit must be between 1 and 100, but got 0.")]
async fn client_get_records_leaderboard_panics_if_limit_is_zero() {
    let criteria = record_leaderboard::SearchCriteria {
        limit: Some(0),
        ..Default::default()
    };
    let id =
        RecordsLeaderboardId::new("zenith", Scope::Country("JP".to_string()), Some("@2024w31"));
    let _: Rsp<RecordsLeaderboard> = Client::new()
        .get_records_leaderboard(id, Some(criteria))
        .await;
}

#[tokio::test]
#[should_panic(expected = "The limit must be between 1 and 100, but got 101.")]
async fn client_get_records_leaderboard_panics_if_limit_is_101() {
    let criteria = record_leaderboard::SearchCriteria {
        limit: Some(101),
        ..Default::default()
    };
    let id =
        RecordsLeaderboardId::new("zenith", Scope::Country("JP".to_string()), Some("@2024w31"));
    let _: Rsp<RecordsLeaderboard> = Client::new()
        .get_records_leaderboard(id, Some(criteria))
        .await;
}

#[tokio::test]
async fn client_get_news_all_successes_if_valid_limit() {
    let _: Rsp<NewsItems> = Client::new().get_news_all(1).await;
}

#[tokio::test]
#[should_panic(expected = "The limit must be between 1 and 100, but got 0.")]
async fn client_get_news_all_panics_if_limit_is_zero() {
    let _: Rsp<NewsItems> = Client::new().get_news_all(0).await;
}

#[tokio::test]
#[should_panic(expected = "The limit must be between 1 and 100, but got 101.")]
async fn client_get_news_all_panics_if_limit_is_101() {
    let _: Rsp<NewsItems> = Client::new().get_news_all(101).await;
}

#[tokio::test]
async fn client_get_news_latest_successes_if_valid_limit() {
    let _: Rsp<NewsItems> = Client::new()
        .get_news_latest(
            NewsStreamParam::User("621db46d1d638ea850be2aa0".to_string()),
            1,
        )
        .await;
}

#[tokio::test]
#[should_panic(expected = "The limit must be between 1 and 100, but got 0.")]
async fn client_get_news_latest_panics_if_limit_is_zero() {
    let _: Rsp<NewsItems> = Client::new()
        .get_news_latest(
            NewsStreamParam::User("621db46d1d638ea850be2aa0".to_string()),
            0,
        )
        .await;
}

#[tokio::test]
#[should_panic(expected = "The limit must be between 1 and 100, but got 101.")]
async fn client_get_news_latest_panics_if_limit_is_101() {
    let _: Rsp<NewsItems> = Client::new()
        .get_news_latest(
            NewsStreamParam::User("621db46d1d638ea850be2aa0".to_string()),
            101,
        )
        .await;
}