use txtx_addon_kit::types::{
frontend::{
ActionItemResponse, ActionItemResponseType, ActionItemStatus, ProvidedInputResponse,
ReviewedInputResponse,
},
types::Value,
};
use txtx_addon_kit::{types::block_id::BlockId, Addon};
use txtx_test_utils::test_harness::setup_test;
use crate::std::StdAddon;
pub fn get_addon_by_namespace(namespace: &str) -> Option<Box<dyn Addon>> {
let available_addons: Vec<Box<dyn Addon>> = vec![Box::new(StdAddon::new())];
for addon in available_addons.into_iter() {
if namespace.starts_with(&format!("{}", addon.get_namespace())) {
return Some(addon);
}
}
None
}
#[test]
fn test_ab_c_runbook_no_env() {
let abc_tx = include_str!("./fixtures/ab_c.tx");
let harness = setup_test("ab_c.tx", &abc_tx, get_addon_by_namespace);
{
let action_panel_data =
harness.expect_action_panel(None, "runbook checklist", vec![vec![1]]);
let validate_button = &action_panel_data.groups[0].sub_groups[0].action_items[0];
let start_runbook = &action_panel_data.groups[0].sub_groups[0].action_items[0];
assert_eq!(start_runbook.construct_instance_name.to_uppercase(), "START RUNBOOK");
harness.send_and_expect_action_item_update(
ActionItemResponse {
action_item_id: start_runbook.id.clone(),
payload: ActionItemResponseType::ValidateBlock,
},
vec![(&validate_button.id, Some(ActionItemStatus::Success(None)))],
);
}
{
let inputs_panel_data =
harness.expect_action_panel(None, "variables review", vec![vec![2, 1]]);
let input_a_action = &inputs_panel_data.groups[0].sub_groups[0].action_items[0];
let input_b_action = &inputs_panel_data.groups[0].sub_groups[0].action_items[1];
assert_eq!(&input_a_action.internal_key, "check_input");
assert_eq!(&input_b_action.internal_key, "provide_input");
harness.send_and_expect_progress_bar_visibility_update(
ActionItemResponse {
action_item_id: input_a_action.id.clone(),
payload: ActionItemResponseType::ReviewInput(ReviewedInputResponse {
value_checked: true,
input_name: "value".into(),
force_execution: false,
}),
},
false,
);
harness.expect_action_item_update(
None,
vec![(&input_a_action.id, Some(ActionItemStatus::Success(None)))],
);
harness.expect_noop();
harness.send(&ActionItemResponse {
action_item_id: input_b_action.id.clone(),
payload: ActionItemResponseType::ProvideInput(ProvidedInputResponse {
updated_value: Value::integer(5),
input_name: "value".into(),
}),
});
harness.send_and_expect_action_item_update(
ActionItemResponse {
action_item_id: input_b_action.id.clone(),
payload: ActionItemResponseType::ReviewInput(ReviewedInputResponse {
value_checked: true,
input_name: "value".into(),
force_execution: false,
}),
},
vec![(&input_b_action.id, Some(ActionItemStatus::Success(None)))],
);
harness.send_and_expect_action_item_update(
ActionItemResponse {
action_item_id: BlockId::new(&vec![]),
payload: ActionItemResponseType::ValidateBlock,
},
vec![(&input_b_action.id, Some(ActionItemStatus::Success(None)))],
);
}
{
harness.expect_action_panel(None, "output review", vec![vec![1]]);
}
harness.expect_progress_bar_visibility_update(None, false);
harness.expect_runbook_complete();
}