diff --git a/Cargo.toml b/Cargo.toml index f6932b0..1c0b047 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,3 +10,6 @@ ureq = "2.10" kxio = "1.2" ignore = "0.4" bon = "2.3" + +[dev-dependencies] +assert2 = "0.3" diff --git a/src/main.rs b/src/main.rs index 57fd966..2a9a380 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,9 @@ mod model; mod patterns; mod scanner; +#[cfg(test)] +mod tests; + fn main() -> Result<()> { println!("Forgejo TODO Checker!"); diff --git a/src/model/config.rs b/src/model/config.rs index 605ad12..7c7be4f 100644 --- a/src/model/config.rs +++ b/src/model/config.rs @@ -4,7 +4,7 @@ use bon::Builder; use regex::Regex; -#[derive(Builder)] +#[derive(Debug, Builder)] pub struct Config { fs: kxio::fs::FileSystem, repo: String, diff --git a/src/tests/init.rs b/src/tests/init.rs new file mode 100644 index 0000000..6cb0140 --- /dev/null +++ b/src/tests/init.rs @@ -0,0 +1,94 @@ +// +use super::*; + +use assert2::let_assert; +use model::Config; +use patterns::{issue_pattern, marker_pattern}; + +#[test] +fn init_when_all_valid() -> anyhow::Result<()> { + //given + let fs = kxio::fs::temp()?; + std::env::set_var("GITHUB_WORKSPACE", fs.base()); + std::env::set_var("GITHUB_REPOSITORY", "repo"); + std::env::set_var("GITHUB_SERVER_URL", "server"); + let expected = Config::builder() + .fs(kxio::fs::new(fs.base().to_path_buf())) + .repo("repo".to_string()) + .server("server".to_string()) + .prefix_pattern(marker_pattern()?) + .issue_pattern(issue_pattern()?) + .maybe_auth_token(Some("auth".to_string())) + .build(); + + //when + let result = init_config()?; + + //then + assert_eq!(result.fs().base(), expected.fs().base()); + assert_eq!(result.repo(), expected.repo()); + // assert_eq!(result.server(), expected.server()); + assert_eq!( + result.prefix_pattern().to_string(), + expected.prefix_pattern().to_string() + ); + assert_eq!( + result.issue_pattern().to_string(), + expected.issue_pattern().to_string() + ); + + Ok(()) +} + +#[test] +fn init_when_no_workspace() -> anyhow::Result<()> { + //given + std::env::remove_var("GITHUB_WORKSPACE"); + std::env::set_var("GITHUB_REPOSITORY", "repo"); + std::env::set_var("GITHUB_SERVER_URL", "server"); + + //when + let result = init_config(); + + //then + let_assert!(Err(e) = result); + assert_eq!(e.to_string(), "GITHUB_WORKSPACE"); + + Ok(()) +} + +#[test] +fn init_when_no_repository() -> anyhow::Result<()> { + //given + let fs = kxio::fs::temp()?; + std::env::set_var("GITHUB_WORKSPACE", fs.base()); + std::env::remove_var("GITHUB_REPOSITORY"); + std::env::set_var("GITHUB_SERVER_URL", "server"); + + //when + let result = init_config(); + + //then + let_assert!(Err(e) = result); + assert_eq!(e.to_string(), "GITHUB_REPOSITORY"); + + Ok(()) +} + +#[test] +fn init_when_no_server_url() -> anyhow::Result<()> { + //given + let fs = kxio::fs::temp()?; + std::env::set_var("GITHUB_WORKSPACE", fs.base()); + std::env::set_var("GITHUB_REPOSITORY", "repo"); + std::env::remove_var("GITHUB_SERVER_URL"); + + //when + let result = init_config(); + + //then + let_assert!(Err(e) = result); + assert_eq!(e.to_string(), "GITHUB_SERVER_URL"); + + Ok(()) +} diff --git a/src/tests/mod.rs b/src/tests/mod.rs new file mode 100644 index 0000000..2af0c17 --- /dev/null +++ b/src/tests/mod.rs @@ -0,0 +1,4 @@ +// +use super::*; + +mod init;