thumbor 0.1.1

A Rust client for the Thumbor image service
use std::sync::LazyLock;

use crate::{
    settings::{FitIn, ResponseMode},
    Filter, Server,
};

const TEST_BASE: &str = "http://my.server.com";
const SECURITY_KEY: &str = "my-security-key";
const IMAGE_PATH: &str = "my.server.com/some/path/to/image.jpg";
static SERVER: LazyLock<Server> =
    LazyLock::new(|| Server::new(TEST_BASE, SECURITY_KEY).expect("Server creation failed"));

#[test]
fn signing_of_a_known_url_results() {
    let width = 300;
    let height = 200;

    let builder = SERVER.settings_builder().resize((width, height)).build();

    let path = builder.to_path(IMAGE_PATH);

    assert_eq!(
        path,
        "/8ammJH8D-7tXy6kU3lTvoXlhu4o=/300x200/my.server.com/some/path/to/image.jpg"
    );
}

#[test]
fn signature_with_meta() {
    let builder = SERVER
        .settings_builder()
        .response(ResponseMode::Metadata)
        .build();

    let path = builder.to_path(IMAGE_PATH);

    assert_eq!(
        path,
        "/Ps3ORJDqxlSQ8y00T29GdNAh2CY=/meta/my.server.com/some/path/to/image.jpg"
    );
}

#[test]
fn signature_with_smart() {
    let builder = SERVER.settings_builder().smart(true).build();

    let path = builder.to_path(IMAGE_PATH);

    assert_eq!(
        path,
        "/-2NHpejRK2CyPAm61FigfQgJBxw=/smart/my.server.com/some/path/to/image.jpg"
    );
}

#[test]
fn signature_with_fit_in() {
    let builder = SERVER.settings_builder().fit_in(FitIn::Default).build();

    let path = builder.to_path(IMAGE_PATH);

    assert_eq!(
        path,
        "/uvLnA6TJlF-Cc-L8z9pEtfasO3s=/fit-in/my.server.com/some/path/to/image.jpg"
    );
}

#[test]
fn signature_with_filters() {
    let builder = SERVER
        .settings_builder()
        .filters([Filter::Brightness(10), Filter::Contrast(20)])
        .build();

    let path = builder.to_path(IMAGE_PATH);

    assert_eq!(
        path,
        "/ZZtPCw-BLYN1g42Kh8xTcRs0Qls=/filters:brightness(10):contrast(20)/my.server.com/some/path/to/image.jpg"
    );
}