#[macro_use]
mod tester;
use tester::Tester;
use color_eyre::Result;
use glues_tui::input::KeyCode;
#[tokio::test]
async fn opens_note_on_l() -> Result<()> {
let mut t = Tester::new().await?;
t.open_instant().await?;
t.press('j').await;
t.press('l').await;
t.draw()?;
snap!(t, "note_open");
Ok(())
}
#[tokio::test]
async fn numbering_steps_move_next_prev() -> Result<()> {
let mut t = Tester::new().await?;
t.open_instant().await?;
t.press('2').await;
t.draw()?;
snap!(t, "numbering_open");
t.press('j').await;
t.draw()?;
snap!(t, "numbering_move_down_2");
t.press('2').await;
t.press('k').await;
t.draw()?;
snap!(t, "numbering_move_up_2");
Ok(())
}
#[tokio::test]
async fn gateway_mode_enter_and_first_select() -> Result<()> {
let mut t = Tester::new().await?;
t.open_instant().await?;
t.press('g').await;
t.draw()?;
snap!(t, "gateway_mode");
t.press('g').await;
t.draw()?;
snap!(t, "gateway_mode_select_first");
Ok(())
}
#[tokio::test]
async fn move_mode_enter_and_cancel_on_directory() -> Result<()> {
let mut t = Tester::new().await?;
t.open_instant().await?;
t.key(KeyCode::Char(' ')).await;
t.draw()?;
snap!(t, "move_mode_directory");
t.key(KeyCode::Esc).await;
t.draw()?;
snap!(t, "move_mode_cancelled_directory");
Ok(())
}
#[tokio::test]
async fn move_mode_enter_and_cancel_on_note() -> Result<()> {
let mut t = Tester::new().await?;
t.open_instant().await?;
t.press('j').await;
t.key(KeyCode::Char(' ')).await;
t.draw()?;
snap!(t, "move_mode_note");
t.key(KeyCode::Esc).await;
t.draw()?;
snap!(t, "move_mode_cancelled_note");
Ok(())
}
#[tokio::test]
async fn add_note_via_directory_actions() -> Result<()> {
let mut t = Tester::new().await?;
t.open_instant().await?;
t.press('m').await;
t.draw()?;
t.key(KeyCode::Enter).await;
t.draw()?;
snap!(t, "add_note_prompt_open");
for ch in "New Note".chars() {
t.press(ch).await;
}
t.key(KeyCode::Enter).await;
t.draw()?;
snap!(t, "note_added");
Ok(())
}
#[tokio::test]
async fn add_directory_via_directory_actions() -> Result<()> {
let mut t = Tester::new().await?;
t.open_instant().await?;
t.press('m').await;
t.draw()?;
t.press('j').await;
t.key(KeyCode::Enter).await;
t.draw()?;
snap!(t, "add_dir_prompt_open");
for ch in "Tmp".chars() {
t.press(ch).await;
}
t.key(KeyCode::Enter).await;
t.draw()?;
snap!(t, "dir_added");
Ok(())
}
#[tokio::test]
async fn rename_note_prompt_and_apply() -> Result<()> {
let mut t = Tester::new().await?;
t.open_instant().await?;
t.press('j').await;
t.press('m').await;
t.key(KeyCode::Enter).await;
t.draw()?;
snap!(t, "rename_note_prompt_open");
for _ in 0..20 {
t.key(KeyCode::Backspace).await;
}
for ch in "Renamed".chars() {
t.press(ch).await;
}
t.key(KeyCode::Enter).await;
t.draw()?;
snap!(t, "note_renamed");
Ok(())
}
#[tokio::test]
async fn remove_note_confirm_cancel_then_accept() -> Result<()> {
let mut t = Tester::new().await?;
t.open_instant().await?;
t.press('j').await;
t.press('m').await;
t.press('j').await;
t.key(KeyCode::Enter).await;
t.draw()?;
snap!(t, "remove_note_confirm");
t.press('n').await;
t.draw()?;
snap!(t, "remove_note_cancelled");
t.press('m').await;
t.press('j').await;
t.key(KeyCode::Enter).await;
t.press('y').await;
t.draw()?;
snap!(t, "note_removed");
Ok(())
}
#[tokio::test]
async fn remove_directory_confirm_cancel_then_accept() -> Result<()> {
let mut t = Tester::new().await?;
t.open_instant().await?;
t.press('m').await;
t.draw()?;
t.press('j').await; t.key(KeyCode::Enter).await;
for ch in "Tmp".chars() {
t.press(ch).await;
}
t.key(KeyCode::Enter).await;
t.draw()?;
t.press('j').await;
t.draw()?;
t.press('m').await;
t.press('j').await; t.press('j').await; t.key(KeyCode::Enter).await;
t.draw()?;
snap!(t, "remove_dir_confirm");
t.press('n').await;
t.draw()?;
snap!(t, "remove_dir_cancelled");
t.press('m').await;
t.press('j').await;
t.press('j').await;
t.key(KeyCode::Enter).await;
t.press('y').await;
t.draw()?;
snap!(t, "dir_removed");
Ok(())
}
#[tokio::test]
async fn note_actions_dialog_toggles() -> Result<()> {
let mut t = Tester::new().await?;
t.open_instant().await?;
t.press('j').await;
t.press('m').await;
t.draw()?;
snap!(t, "note_actions_open");
t.key(KeyCode::Esc).await;
t.draw()?;
snap!(t, "note_actions_closed");
Ok(())
}
#[tokio::test]
async fn dir_actions_dialog_toggles() -> Result<()> {
let mut t = Tester::new().await?;
t.open_instant().await?;
t.press('m').await;
t.draw()?;
snap!(t, "dir_actions_open");
t.key(KeyCode::Esc).await;
t.draw()?;
snap!(t, "dir_actions_closed");
Ok(())
}