use beet_core::prelude::*;
use beet_flow::prelude::*;
#[action(run_on_dir_event)]
#[derive(Component)]
pub struct RunOnDirEvent;
fn run_on_dir_event(ev: On<DirEvent>, mut commands: Commands) {
commands.entity(ev.target()).trigger_target(GetOutcome);
}
#[cfg(test)]
mod tests {
use crate::prelude::*;
use beet_core::prelude::*;
use beet_flow::prelude::*;
#[beet_core::test]
async fn works() {
let tempdir = TempDir::new().unwrap();
let mut app = App::new();
app.add_plugins(CliPlugin)
.world_mut()
.spawn((
FsWatcher::new(tempdir.path().clone()),
RunOnDirEvent,
Sequence,
ExitOnEnd,
children![(
ContinueRun,
CommandConfig::parse_shell("sleep 0.1 && false")
.into_action()
)],
))
.trigger_target(GetOutcome);
let tempdir = tempdir.path().clone();
app.world_mut().run_async(async move |world| {
time_ext::sleep_millis(10).await;
fs_ext::write(tempdir.join("foobar.txt"), "foobar").unwrap();
time_ext::sleep_millis(60).await;
world.write_message(AppExit::Success);
});
app.run_async().await.xpect_eq(AppExit::Success);
}
}