use crate::utils::*; use anyhow::Result; use assert_fs::prelude::*; use predicates::prelude::*; #[test] fn fails_when_manifest_absent() -> Result<()> { let package = Package::builder().no_manifest().build()?; CargoAbout::new(&package)? .init() .assert() .failure() .stderr(predicate::str::contains("could not find `Cargo.toml`")); Ok(()) } #[test] fn fails_when_manifest_empty() -> Result<()> { let package = Package::builder().file("Cargo.toml", "").build()?; CargoAbout::new(&package)? .init() .assert() .failure() .stderr(predicate::str::contains("failed to parse manifest")); Ok(()) } #[test] fn writes_config_and_template_by_default() -> Result<()> { let package = Package::builder().no_template().no_about_config().build()?; CargoAbout::new(&package)?.init().assert().success(); let dir = &package.dir; dir.child(ABOUT_CONFIG_FILENAME) .assert(predicate::path::exists()); dir.child(ABOUT_TEMPLATE_FILENAME) .assert(predicate::path::exists()); Ok(()) } #[test] fn writes_config_only_when_no_handlebars_specifed() -> Result<()> { let package = Package::builder().no_template().no_about_config().build()?; CargoAbout::new(&package)? .init() .arg("--no-handlebars") .assert() .success() .stdout("") .stderr(""); let dir = &package.dir; dir.child(ABOUT_CONFIG_FILENAME) .assert(predicate::path::exists()); dir.child(ABOUT_TEMPLATE_FILENAME) .assert(predicate::path::missing()); Ok(()) } #[test] fn does_not_overwrite_by_default() -> Result<()> { let template_content = "A useless custom template"; let config_content = "A useless invalid config"; let package = Package::builder() .file(ABOUT_TEMPLATE_FILENAME, template_content) .file(ABOUT_CONFIG_FILENAME, config_content) .build()?; CargoAbout::new(&package)? .init() .assert() .success() .stdout("") .stderr(""); let config = &package.dir.child(ABOUT_CONFIG_FILENAME); let template = &package.dir.child(ABOUT_TEMPLATE_FILENAME); assert_eq!(std::fs::read_to_string(config)?, config_content); assert_eq!(std::fs::read_to_string(template)?, template_content); Ok(()) } #[test] fn overwrites_config_and_template_when_overwrite_specified() -> Result<()> { let template_content = "A useless custom template"; let config_content = "A useless invalid config"; let package = Package::builder() .file(ABOUT_TEMPLATE_FILENAME, template_content) .file(ABOUT_CONFIG_FILENAME, config_content) .build()?; CargoAbout::new(&package)? .init() .arg("--overwrite") .assert() .success() .stdout("") .stderr(""); let config = &package.dir.child(ABOUT_CONFIG_FILENAME); let template = &package.dir.child(ABOUT_TEMPLATE_FILENAME); assert_ne!(std::fs::read_to_string(config)?, config_content); assert_ne!(std::fs::read_to_string(template)?, template_content); Ok(()) } #[test] fn overwrites_config_only_when_no_handlebars_and_overwrite_specified() -> Result<()> { let template_content = "A useless custom template"; let config_content = "A useless invalid config"; let package = Package::builder() .file(ABOUT_TEMPLATE_FILENAME, template_content) .file(ABOUT_CONFIG_FILENAME, config_content) .build()?; CargoAbout::new(&package)? .init() .arg("--no-handlebars") .arg("--overwrite") .assert() .success() .stdout("") .stderr(""); let config = &package.dir.child(ABOUT_CONFIG_FILENAME); let template = &package.dir.child(ABOUT_TEMPLATE_FILENAME); assert_ne!(std::fs::read_to_string(config)?, config_content); assert_eq!(std::fs::read_to_string(template)?, template_content); Ok(()) }