use super::*;
use colored::*;
#[test]
fn test_new() {
let board = Board::new("888", "some board", Some(vec![]), "https://trello.com/09");
let expected = Board {
id: String::from("888"),
name: String::from("some board"),
lists: Some(vec![]),
closed: false,
url: String::from("https://trello.com/09"),
};
assert_eq!(board, expected);
}
#[test]
fn test_render_no_lists() {
let board = Board::new("", "Knights", None, "");
#[rustfmt::skip]
let expected = [
" Knights ",
"=========",
].join("\n").bold().to_string();
assert_eq!(board.render(true), expected);
}
#[test]
fn test_render_lists() {
let board = Board::new(
"",
"Knights",
Some(vec![
List::new("", "King", None),
List::new("", "Shovel", None),
]),
"",
);
#[rustfmt::skip]
let expected = [
[
" Knights ",
"=========",
].join("\n").bold().to_string(),
String::from(""),
[
"King",
"----",
].join("\n").bold().to_string(),
String::from(""),
[
"Shovel",
"------",
].join("\n").bold().to_string(),
].join("\n");
assert_eq!(board.render(true), expected);
}
#[test]
fn test_render_lists_and_cards() {
let board = Board::new(
"",
"Knights",
Some(vec![
List::new(
"",
"King",
Some(vec![Card::new("", "Gyro Boots", "", None, "", None)]),
),
List::new(
"",
"Shovel",
Some(vec![Card::new("", "Flare Wand", "Relic", None, "", None)]),
),
]),
"",
);
#[rustfmt::skip]
let expected = [
[
" Knights ",
"=========",
].join("\n").bold().to_string(),
String::from(""),
[
"King",
"----",
].join("\n").bold().to_string(),
String::from("* Gyro Boots"),
String::from(""),
[
"Shovel",
"------",
].join("\n").bold().to_string(),
format!("* Flare Wand {}", "[...]".dimmed()),
].join("\n");
assert_eq!(board.render(true), expected);
}
#[test]
fn test_create() -> Result<()> {
let _m = mockito::mock("POST", "/1/boards/")
.match_header("authorization", "OAuth oauth_consumer_key=\"some-key\", oauth_token=\"some-token\"")
.match_body("name=MYTESTBOARD")
.with_status(200)
.with_body(
json!({
"name": "MYTESTBOARD",
"id": "231dgfe4r343",
"closed": false,
"url": "https://example.com/board",
})
.to_string(),
)
.create();
let config = ClientConfig::new(&mockito::server_url(), "some-token", "some-key");
let client = TrelloClient::new(config);
let result = Board::create(&client, "MYTESTBOARD")?;
let expected = Board::new(
"231dgfe4r343",
"MYTESTBOARD",
None,
"https://example.com/board",
);
assert_eq!(result, expected);
Ok(())
}
#[test]
fn test_update() -> Result<()> {
let _m = mockito::mock("PUT", "/1/boards/MY-BOARD-ID/")
.match_header("authorization", "OAuth oauth_consumer_key=\"some-key\", oauth_token=\"some-token\"")
.match_body("name=TODO&closed=true")
.with_status(200)
.with_body(
json!({
"name": "TODO",
"id": "MY-BOARD-ID",
"closed": true,
"url": "",
})
.to_string(),
)
.create();
let config = ClientConfig::new(&mockito::server_url(), "some-token", "some-key");
let client = TrelloClient::new(config);
let mut board = Board::new("MY-BOARD-ID", "TODO", None, "");
board.closed = true;
let result = Board::update(&client, &board)?;
assert_eq!(result, board);
Ok(())
}
#[test]
fn test_get_all() -> Result<()> {
let _m = mockito::mock(
"GET",
"/1/members/me/boards/?filter=open&fields=id%2Cname%2Cclosed%2Curl",
)
.match_header("authorization", "OAuth oauth_consumer_key=\"some-key\", oauth_token=\"some-secret-token\"")
.with_status(200)
.with_body(
json!([
{"name": "TODO", "id": "abc-def", "closed": false, "url": "bit.ly/1"},
{"name": "foo", "id": "123-456", "closed": false, "url": "bit.ly/2"},
])
.to_string(),
)
.create();
let config = ClientConfig::new(&mockito::server_url(), "some-secret-token", "some-key");
let client = TrelloClient::new(config);
let result = Board::get_all(&client)?;
let expected = vec![
Board::new("abc-def", "TODO", None, "bit.ly/1"),
Board::new("123-456", "foo", None, "bit.ly/2"),
];
assert_eq!(result, expected);
Ok(())
}
#[test]
fn test_get() -> Result<()> {
let _m = mockito::mock(
"GET",
"/1/boards/some-board-id?fields=id%2Cname%2Cclosed%2Curl",
)
.match_header("authorization", "OAuth oauth_consumer_key=\"KEY\", oauth_token=\"TOKEN\"")
.with_status(200)
.with_body(
json!({
"name": "My Favourite Board",
"id": "some-board-id",
"closed": false,
"url": "https://bit.ly/12",
})
.to_string(),
)
.create();
let config = ClientConfig::new(&mockito::server_url(), "TOKEN", "KEY");
let client = TrelloClient::new(config);
let result = Board::get(&client, "some-board-id")?;
let expected = Board::new(
"some-board-id",
"My Favourite Board",
None,
"https://bit.ly/12",
);
assert_eq!(result, expected);
Ok(())
}