fever_api 0.6.0

rust implementation of the FEVER-API
Documentation
use crate::models::ItemStatus;
use crate::FeverApi;
use reqwest::Client;
use std::env;
use url::Url;

fn test_setup_env(aggregator: &str) -> FeverApi {
    dotenv::dotenv().expect("Failed to read .env file");

    let url = env::var(format!("{}_URL", aggregator.to_uppercase()))
        .unwrap_or_else(|_| panic!("Failed to read {}_URL", aggregator.to_uppercase()));
    let user = env::var(format!("{}_USER", aggregator.to_uppercase()))
        .unwrap_or_else(|_| panic!("Failed to read {}_USER", aggregator.to_uppercase()));
    let pw = env::var(format!("{}_PW", aggregator.to_uppercase()))
        .unwrap_or_else(|_| panic!("Failed to read {}_PW", aggregator.to_uppercase()));

    let url = Url::parse(&url).unwrap();
    FeverApi::new(&url, &user, &pw)
}

#[tokio::test]
async fn api_version() {
    let api = test_setup_env("freshrss");

    let response = api.get_api_version(&Client::new()).await;
    assert!(response.is_ok());
    assert!(response.unwrap() == 3);
}

#[tokio::test]
async fn valid_credentials() {
    let api = test_setup_env("freshrss");

    let response = api.valid_credentials(&Client::new()).await;
    assert!(response.is_ok());
    assert!(response.unwrap());
}

#[tokio::test]
async fn groups() {
    let api = test_setup_env("freshrss");

    let response = api.get_groups(&Client::new()).await;
    assert!(response.is_ok());
}

#[tokio::test]
async fn feeds() {
    let api = test_setup_env("freshrss");

    let response = api.get_feeds(&Client::new()).await;
    assert!(response.is_ok());
}

#[tokio::test]
async fn favicons() {
    let api = test_setup_env("freshrss");

    let response = api.get_favicons(&Client::new()).await;
    assert!(response.is_ok());
}

#[tokio::test]
async fn items() {
    let api = test_setup_env("freshrss");

    let response = api.get_items(&Client::new()).await;
    assert!(response.is_ok());

    let response = api.get_items_since(5, &Client::new()).await;
    assert!(response.is_ok());

    let response = api.get_items_max(22, &Client::new()).await;
    assert!(response.is_ok());

    let response = api
        .get_items_with(vec![5, 7, 8, 9, 10], &Client::new())
        .await;
    assert!(response.is_ok());
}

#[tokio::test]
async fn links() {
    let api = test_setup_env("freshrss");

    let response = api.get_links(&Client::new()).await;
    assert!(response.is_ok());

    let response = api.get_links_with(0, 7, 1, &Client::new()).await;
    assert!(response.is_ok());
}

#[tokio::test]
async fn unread() {
    let api = test_setup_env("freshrss");

    let response = api.get_unread_items(&Client::new()).await;
    assert!(response.is_ok());
}

#[tokio::test]
async fn saved() {
    let api = test_setup_env("freshrss");

    let response = api.get_saved_items(&Client::new()).await;
    assert!(response.is_ok());
}

#[tokio::test]
async fn mark_item() {
    let api = test_setup_env("freshrss");

    let response = api.get_items_since(1, &Client::new()).await;
    assert!(response.is_ok());
    let items = &response.unwrap();
    assert!(!items.items.is_empty());
    let valid_item = &items.items[0];
    let id = valid_item.id;

    let response = api.get_saved_items(&Client::new()).await;
    assert!(response.is_ok());
    let saved_item_ids = response.unwrap().saved_item_ids;
    assert!(!saved_item_ids.contains(&id));
    let tmp: usize = saved_item_ids.len();

    let response = api.mark_item(ItemStatus::Saved, id, &Client::new()).await;
    assert!(response.is_ok());

    let response = api.get_saved_items(&Client::new()).await;
    assert!(response.is_ok());
    let saved_item_ids = response.unwrap().saved_item_ids;
    assert!(saved_item_ids.contains(&id));
    assert_eq!(tmp + 1, saved_item_ids.len());

    let response = api.mark_item(ItemStatus::Unsaved, id, &Client::new()).await;
    assert!(response.is_ok());

    let response = api.get_saved_items(&Client::new()).await;
    assert!(response.is_ok());

    let saved_item_ids = response.unwrap().saved_item_ids;
    assert!(!saved_item_ids.contains(&id));
    assert_eq!(tmp, saved_item_ids.len());
}