use assert_cmd::prelude::*;
use predicates::prelude::*;
use std::fs::{create_dir_all, File};
use std::io::prelude::*;
use std::process::Command;
use tempfile::tempdir;
#[test]
fn init() -> Result<(), Box<dyn std::error::Error>> {
let root_dir = tempdir()?;
let folder = root_dir.path().join("init-project");
let mut cmd = Command::cargo_bin("orcs")?;
cmd.arg("init").arg(&folder);
cmd.assert().success();
assert!(folder.join("orcs.toml").is_file());
let mut file = File::open(folder.join("orcs.toml"))?;
let mut data = String::new();
file.read_to_string(&mut data)?;
assert!(predicate::str::contains("init-project").eval(&data));
Ok(())
}
#[test]
fn init_load() -> Result<(), Box<dyn std::error::Error>> {
let root_dir = tempdir()?;
let folder = root_dir.path().join("init-load-project");
let mut cmd = Command::cargo_bin("orcs")?;
cmd.arg("init").arg(&folder);
cmd.assert().success();
assert!(folder.join("orcs.toml").is_file());
let mut cmd = Command::cargo_bin("orcs")?;
cmd.arg("load").arg("-p").arg(&folder);
cmd.assert()
.success()
.stdout(predicate::str::contains("init-load-project"));
Ok(())
}
#[test]
fn init_from_template() -> Result<(), Box<dyn std::error::Error>> {
let root_dir = tempdir()?;
let template_folder = root_dir.path().join("template");
let project_folder = root_dir.path().join("project-from-template");
create_dir_all(&template_folder.join("test_folder"))?;
let mut test_file = File::create(&template_folder.join("test_folder").join("test.txt"))?;
let test_data = "Hello, {{{ project_name }}}!";
test_file.write_all(test_data.as_bytes())?;
let mut cmd = Command::cargo_bin("orcs")?;
cmd.arg("init")
.arg("-p")
.arg(&project_folder)
.arg("-t")
.arg(&template_folder);
cmd.assert().success();
let mut file = File::open(project_folder.join("test_folder").join("test.txt"))?;
let mut data = String::new();
file.read_to_string(&mut data)?;
assert!(predicate::str::contains("project-from-template").eval(&data));
Ok(())
}