tro 2.12.0

A Trello API client for the command line
Documentation
use super::*;

use colored::*;

#[test]
fn test_new() {
    let list = List::new("123", "my list", Some(vec![]));
    let expected = List {
        id: String::from("123"),
        name: String::from("my list"),
        cards: Some(vec![]),
        closed: false,
    };
    assert_eq!(list, expected);
}

#[test]
fn test_filter_none_cards() {
    let list = List::new("some-id", "some-name", None);

    assert_eq!(
        list.filter("my-label"),
        List::new("some-id", "some-name", None)
    );
}

#[test]
fn test_render_no_cards() {
    let list = List::new("aaaaa", "King Knight", None);
    let expected = "King Knight\n-----------".bold().to_string();
    assert_eq!(list.render(true), expected);
}

#[test]
fn test_render_with_cards() {
    let list = List::new(
        "aaaaa",
        "King Knight",
        Some(vec![
            Card::new("", "hello", "", None, "", None),
            Card::new("", "world", "", None, "", None),
        ]),
    );

    let expected = format!(
        "{}\n{}",
        "King Knight\n-----------".bold(),
        "* hello\n* world"
    );
    assert_eq!(list.render(true), expected);
}

#[test]
fn test_create() -> Result<()> {
    let _m = mockito::mock("POST", "/1/lists/")
        .match_header("authorization", "OAuth oauth_consumer_key=\"some-key\", oauth_token=\"some-token\"")
        .match_body("name=Today&idBoard=LEONSK")
        .with_status(200)
        .with_body(
            json!({
                "name": "Today",
                "id": "MTLDA",
                "closed": false,
            })
            .to_string(),
        )
        .create();

    let config = ClientConfig::new(&mockito::server_url(), "some-token", "some-key");
    let client = TrelloClient::new(config);

    let result = List::create(&client, "LEONSK", "Today")?;
    let expected = List::new("MTLDA", "Today", None);
    assert_eq!(result, expected);
    Ok(())
}

#[test]
fn test_update() -> Result<()> {
    let _m = mockito::mock("PUT", "/1/lists/MY-LIST-ID/")
        .match_header("authorization", "OAuth oauth_consumer_key=\"some-key\", oauth_token=\"some-token\"")
        .with_body("name=Today&closed=True")
        .with_status(200)
        .with_body(
            json!({
                "name": "Today",
                "id": "MY-LIST-ID",
                "closed": true,
            })
            .to_string(),
        )
        .create();

    let config = ClientConfig::new(&mockito::server_url(), "some-token", "some-key");
    let client = TrelloClient::new(config);

    let mut list = List::new("MY-LIST-ID", "Today", None);
    list.closed = true;

    let result = List::update(&client, &list)?;
    assert_eq!(result, list);
    Ok(())
}

#[test]
fn test_get_all() -> Result<()> {
    let _m = mockito::mock(
        "GET",
        "/1/boards/some-board-id/lists?fields=id%2Cname%2Cclosed",
    )
    .match_header("authorization", "OAuth oauth_consumer_key=\"some-key\", oauth_token=\"some-token\"")
    .with_status(200)
    .with_body(
        json!([
            {"name": "Red", "id": "823-123", "closed": false},
            {"name": "Green", "id": "222-222", "closed": false},
        ])
        .to_string(),
    )
    .create();

    let config = ClientConfig::new(&mockito::server_url(), "some-token", "some-key");
    let client = TrelloClient::new(config);

    let result = List::get_all(&client, "some-board-id", false)?;
    let expected = vec![
        List::new("823-123", "Red", None),
        List::new("222-222", "Green", None),
    ];
    assert_eq!(result, expected);
    Ok(())
}

#[test]
fn test_get_all_with_cards() -> Result<()> {
    let _m = mockito::mock(
        "GET",
        "/1/boards/some-board-id/lists?fields=id%2Cname%2Cclosed&cards=open",
    )
    .match_header("authorization", "OAuth oauth_consumer_key=\"some-key\", oauth_token=\"some-token\"")
    .with_status(200)
    .with_body(
        json!([
            {"name": "Red", "id": "823-123", "closed": false, "cards": []},
            {
                "name": "Green",
                "id": "222-222",
                "closed": false,
                "cards": [
                    {"id": "card1", "name": "apple", "desc": "", "closed": false, "url": ""},
                ],
            },
        ])
        .to_string(),
    )
    .create();

    let config = ClientConfig::new(&mockito::server_url(), "some-token", "some-key");
    let client = TrelloClient::new(config);

    let result = List::get_all(&client, "some-board-id", true)?;
    let expected = vec![
        List::new("823-123", "Red", Some(vec![])),
        List::new(
            "222-222",
            "Green",
            Some(vec![Card::new("card1", "apple", "", None, "", None)]),
        ),
    ];
    assert_eq!(result, expected);
    Ok(())
}