trello-to-deck/src/tests/mod.rs
Paul Campbell 30a5e83bb4
Some checks failed
Test / build (map[name:stable]) (push) Successful in 1m55s
Test / build (map[name:nightly]) (push) Successful in 2m28s
Release Please / Release-plz (push) Failing after 16s
feat(trello): add command 'trello stack list'
2024-12-13 22:10:38 +00:00

179 lines
4.9 KiB
Rust

//
use std::collections::HashMap;
// type TestResult = Result<(), Box<dyn std::error::Error>>;
use assert2::let_assert;
use crate::{
config::AppConfig, f, init::run, nextcloud::NextcloudConfig, s, trello::TrelloConfig, Ctx, NAME,
};
mod config {
use super::*;
#[test]
fn load_config() {
//given
let fs = given::a_filesystem();
let file = fs.base().join(f!("{}.toml", NAME));
fs.file(&file)
.write(
[
"[trello]",
"api_key = \"trello-api-key\"",
"api_secret = \"trello-api-secret\"",
"board_name = \"trello-board-name\"",
"",
"[nextcloud]",
"hostname = \"nextcloud-hostname\"",
"username = \"nextcloud-username\"",
"password = \"nextcloud-password\"",
"board_id = 22",
]
.join("\n"),
)
.expect("write file");
let ctx = given::a_context(fs.as_real(), given::a_network().into(), given::a_printer());
//when
let_assert!(Ok(config) = AppConfig::load(&ctx));
//then
assert_eq!(
config,
AppConfig {
trello: TrelloConfig {
api_key: s!("trello-api-key").into(),
api_secret: s!("trello-api-secret").into(),
board_name: s!("trello-board-name").into(),
},
nextcloud: NextcloudConfig {
hostname: s!("nextcloud-hostname").into(),
username: s!("nextcloud-username").into(),
password: s!("nextcloud-password").into(),
board_id: 22.into()
}
}
);
}
}
mod init {
use super::*;
use test_log::test;
#[test]
fn when_file_does_not_exist_should_create() {
//given
let fs = given::a_filesystem();
let ctx = given::a_context(fs.as_real(), given::a_network().into(), given::a_printer());
//when
let_assert!(Ok(_) = run(&ctx));
//then
let path = ctx.fs.base().join(f!("{NAME}.toml"));
let file = ctx.fs.file(&path);
let contents = file.reader().expect("read file").to_string();
assert_eq!(contents, include_str!("../default-config.toml"));
}
#[test]
fn when_file_exists_should_err() {
//given
let fs = given::a_filesystem();
let path = fs.base().join(f!("{NAME}.toml"));
let file = fs.file(&path);
file.write("").expect("create file");
let ctx = given::a_context(fs.as_real(), given::a_network().into(), given::a_printer());
//when
let_assert!(Err(err) = run(&ctx));
//then
assert!(err
.to_string()
.contains("File already exists - not overwriting"));
}
}
mod template {
use super::*;
#[test]
fn expand_should_substitute_values() {
//given
let template = "pre{param1}mid{param2}post";
let params = HashMap::from([("param1", "-v1-"), ("param2", "-v2-")]);
//when
let result = crate::template::expand(template, params);
//then
assert_eq!(result, "pre-v1-mid-v2-post");
}
}
pub(crate) mod given {
use super::*;
use crate::nextcloud::NextcloudConfig;
use crate::trello::TrelloConfig;
use crate::{s, FullCtx};
use kxio::{
fs::{FileSystem, TempFileSystem},
net::{MockNet, Net},
print::Printer,
};
pub(crate) fn a_context(fs: FileSystem, net: Net, prt: Printer) -> Ctx {
Ctx { fs, net, prt }
}
pub(crate) fn a_filesystem() -> TempFileSystem {
kxio::fs::temp().expect("temp fs")
}
pub(crate) fn a_network() -> MockNet {
kxio::net::mock()
}
pub(crate) fn a_printer() -> Printer {
kxio::print::test()
}
pub(crate) fn a_trello_config() -> TrelloConfig {
TrelloConfig {
api_key: s!("trello-api-key").into(),
api_secret: s!("trello-api-secret").into(),
board_name: s!("trello-board-name").into(),
}
}
pub(crate) fn a_nextcloud_config() -> NextcloudConfig {
let hostname = s!("host-name").into();
let username = s!("username").into();
let password = s!("password").into();
let board_id = 2.into();
NextcloudConfig {
hostname,
username,
password,
board_id,
}
}
pub(crate) fn a_full_context(fs: TempFileSystem, net: MockNet) -> FullCtx {
FullCtx {
// fs: a_filesystem(),
net: net.into(),
prt: a_printer(),
cfg: AppConfig {
trello: a_trello_config(),
nextcloud: a_nextcloud_config(),
},
}
}
}