Skip to content

Commit

Permalink
test: #10 🚨 Add some engine tests for new task handling
Browse files Browse the repository at this point in the history
  • Loading branch information
ddanier committed Apr 25, 2024
1 parent e18f580 commit cb7f12e
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 6 deletions.
92 changes: 89 additions & 3 deletions src/engine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ impl NurEngine {
Value::string(self.state.task_call.join(" "), Span::unknown()),
);
if self.state.task_name.is_some() {
let task_name = self.get_task_name();
let task_name = self.get_short_task_name();
self.engine_state.add_env_var(
NUR_ENV_NUR_TASK_NAME.to_string(),
Value::string(task_name, Span::unknown()),
Expand Down Expand Up @@ -246,7 +246,8 @@ impl NurEngine {
self.get_def(task_name)
}

pub(crate) fn get_task_name(&mut self) -> String {
// Return task name without the "nur " prefix
pub(crate) fn get_short_task_name(&self) -> String {
let task_name = self.state.task_name.clone().unwrap();

String::from(&task_name[4..])
Expand Down Expand Up @@ -489,7 +490,11 @@ mod tests {
let nurfile_path = temp_dir.path().join(NUR_FILE);
File::create(&nurfile_path).unwrap();

let args = vec![String::from("nur"), String::from("some_task")];
let args = vec![
String::from("nur"),
String::from("some-task"),
String::from("sub-task"),
];
let nur_state = NurState::new(temp_dir_path.clone(), args).unwrap();
let engine_state = init_engine_state(temp_dir_path).unwrap();

Expand Down Expand Up @@ -614,4 +619,85 @@ mod tests {

_cleanup_nur_engine(&temp_dir);
}

#[test]
fn test_nur_engine_will_set_task_name() {
let temp_dir = tempdir().unwrap();
let mut nur_engine = _prepare_nur_engine(&temp_dir);

let nurfile_path = temp_dir.path().join(NUR_FILE);
let mut nurfile = File::create(&nurfile_path).unwrap();
nurfile.write_all(b"def \"nur some-task\" [] {}").unwrap();

nur_engine.load_env().unwrap();
nur_engine.load_config().unwrap();
nur_engine.load_nurfiles().unwrap();

assert!(nur_engine.state.task_name.is_some());
assert!(nur_engine.state.task_name.clone().unwrap() == "nur some-task");
assert!(nur_engine.get_short_task_name() == "some-task");
}

#[test]
fn test_nur_engine_will_check_task_name_exists() {
let temp_dir = tempdir().unwrap();
let mut nur_engine = _prepare_nur_engine(&temp_dir);

let nurfile_path = temp_dir.path().join(NUR_FILE);
File::create(&nurfile_path).unwrap();

nur_engine.load_env().unwrap();
nur_engine.load_config().unwrap();
nur_engine.load_nurfiles().unwrap();

assert!(nur_engine.state.task_name.is_none());
}

#[test]
fn test_nur_engine_will_allow_sub_tasks() {
let temp_dir = tempdir().unwrap();
let mut nur_engine = _prepare_nur_engine(&temp_dir);

let nurfile_path = temp_dir.path().join(NUR_FILE);
let mut nurfile = File::create(&nurfile_path).unwrap();
nurfile
.write_all(b"def \"nur some-task\" [] {} ; def \"nur some-task sub-task\" [] {}")
.unwrap();

nur_engine.load_env().unwrap();
nur_engine.load_config().unwrap();
nur_engine.load_nurfiles().unwrap();

assert!(nur_engine.state.task_name.is_some());
assert!(nur_engine.state.task_name.clone().unwrap() == "nur some-task sub-task");
assert!(nur_engine.get_short_task_name() == "some-task sub-task");
}

#[test]
fn test_nur_engine_will_set_env() {
let temp_dir = tempdir().unwrap();
let mut nur_engine = _prepare_nur_engine(&temp_dir);

let nurfile_path = temp_dir.path().join(NUR_FILE);
let mut nurfile = File::create(&nurfile_path).unwrap();
nurfile.write_all(b"def \"nur some-task\" [] {}").unwrap();

assert!(nur_engine
.engine_state
.get_env_var(NUR_ENV_NUR_VERSION)
.is_some());

nur_engine.load_env().unwrap();
nur_engine.load_config().unwrap();
nur_engine.load_nurfiles().unwrap();

assert!(nur_engine
.engine_state
.get_env_var(NUR_ENV_NUR_TASK_NAME)
.is_some());
assert!(nur_engine
.engine_state
.get_env_var(NUR_ENV_NUR_TASK_CALL)
.is_some());
}
}
9 changes: 7 additions & 2 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,12 @@ fn main() -> Result<ExitCode, miette::ErrReport> {
if parsed_nur_args.list_tasks {
// TODO: Parse and handle commands without eval
nur_engine.eval_and_print(
r#"scope commands | where name starts-with "nur " and category == "default" | get name | each { |it| $it | str substring 4.. } | sort"#,
r#"scope commands
| where name starts-with "nur " and category == "default"
| get name
| each { |it| $it | str substring 4.. }
| sort
| table --theme none --index false"#,
PipelineData::empty(),
)?;

Expand Down Expand Up @@ -179,7 +184,7 @@ fn main() -> Result<ExitCode, miette::ErrReport> {
"Project path: {}",
nur_engine.state.project_path.to_str().unwrap()
);
println!("Executing task: {}", nur_engine.get_task_name());
println!("Executing task: {}", nur_engine.get_short_task_name());
println!();
exit_code = nur_engine.eval_and_print(full_task_call, input)?;
#[cfg(feature = "debug")]
Expand Down
2 changes: 1 addition & 1 deletion src/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ pub(crate) struct NurState {
pub(crate) args_to_nur: Vec<String>,
pub(crate) has_task_call: bool,
pub(crate) task_call: Vec<String>,
pub(crate) task_name: Option<String>,
pub(crate) task_name: Option<String>, // full task name, like "nur some-task"
}

impl NurState {
Expand Down

0 comments on commit cb7f12e

Please sign in to comment.