vinted-rs 0.9.0

An async Vinted API wrapper
Documentation
use crate::{
    db::DbController,
    model::filter::{brand::Brand, category::Category, country::Country, size::Size},
};
use bb8_postgres::tokio_postgres::NoTls;

const DB_URL: &str = "postgres://postgres:postgres@localhost/vinted-rs";
const POOL_SIZE: u32 = 5;

#[tokio::test]
async fn test_get_brand_by_name() {
    let db: DbController<NoTls> = DbController::new(DB_URL, POOL_SIZE, NoTls).await.unwrap();

    let brand_name: String = String::from("adidas");

    let b: Brand = db.get_brand_by_name(&brand_name).await.unwrap();

    assert_eq!(
        b,
        Brand::builder()
            .title(String::from("adidas"))
            .id(14)
            .url(String::from("https://www.vinted.es/brand/adidas"))
            .build()
    );
}

#[tokio::test]
async fn test_get_brands_by_name() {
    let db: DbController<NoTls> = DbController::new(DB_URL, POOL_SIZE, NoTls).await.unwrap();

    let brand_name: String = String::from("adidas");

    let brands: Vec<Brand> = db.get_brands_by_name(&brand_name).await.unwrap();

    assert_eq!(brands.len(), 38);
}

#[tokio::test]
async fn test_get_category_by_name() {
    let db: DbController<NoTls> = DbController::new(DB_URL, POOL_SIZE, NoTls).await.unwrap();

    let category_name: String = String::from("Women");

    let c = db.get_category_by_title(&category_name).await.unwrap();

    assert_eq!(
        c,
        Category::builder()
            .code(String::from("WOMEN_ROOT"))
            .url(String::from("/women"))
            .url_en(String::from("/women"))
            .title(String::from("Women"))
            .id(1904)
            .parent_id(0)
            .build()
    );
}

#[tokio::test]
async fn test_get_country_by_iso() {
    let db: DbController<NoTls> = DbController::new(DB_URL, POOL_SIZE, NoTls).await.unwrap();
    let c = db.get_country_by_iso(&String::from("ES")).await.unwrap();

    assert_eq!(
        c,
        Country::builder()
            .id(7)
            .name(String::from("Espagne"))
            .local_name(String::from("España"))
            .iso_code(String::from("ES"))
            .flag(String::from("🇪🇸"))
            .build()
    );
}

#[tokio::test]
async fn test_get_size_by_title_and_type() {
    let db: DbController<NoTls> = DbController::new(DB_URL, POOL_SIZE, NoTls).await.unwrap();
    let size = db
        .get_size_by_title_and_type(
            &String::from("ES"),
            &"XL".to_string(),
            &"Pantalones de hombre".to_string(),
        )
        .await
        .unwrap();

    assert_eq!(
        size,
        Size::builder()
            .id(1654)
            .title_es(String::from("XL"))
            .title_en(String::from("XL"))
            .title_fr(String::from("XL"))
            .size_type_es(String::from("Pantalones de hombre"))
            .size_type_fr(String::from("Pantalons homme"))
            .size_type_en(String::from("Men's trousers"))
            .category_id(5)
            .build()
    );
}
#[tokio::test]
async fn test_get_sizes_for_category() {
    let db: DbController<NoTls> = DbController::new(DB_URL, POOL_SIZE, NoTls).await.unwrap();
    let sizes = db.get_sizes_for_category(5).await.unwrap();

    assert!(sizes.into_iter().all(|size| { size.category_id == 5 }));
}