use super::open_board;
use crate::error::Result;
use crate::timezone::DisplayTimezone;
use std::path::Path;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TuiSettings {
pub confirm_quit: bool,
pub workflow: Vec<String>,
pub hidden_columns: Vec<String>,
pub key_bindings: crate::kanban_keys::KeyBindings,
pub markdown: bool,
pub timezone: DisplayTimezone,
}
pub async fn tui_settings(project_dir: &Path) -> Result<TuiSettings> {
let (_board_dir, _repo, config) = open_board(project_dir).await?;
Ok(TuiSettings {
confirm_quit: config.tui.confirm_quit,
workflow: config.columns,
hidden_columns: config.tui.hidden_columns,
key_bindings: config.tui.key_bindings,
markdown: config.display.markdown,
timezone: config.display.timezone,
})
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct DisplaySettings {
pub markdown: bool,
pub timezone: DisplayTimezone,
}
pub async fn display_settings(project_dir: &Path) -> Result<DisplaySettings> {
let (_board_dir, _repo, config) = open_board(project_dir).await?;
Ok(DisplaySettings {
markdown: config.display.markdown,
timezone: config.display.timezone,
})
}
#[cfg(test)]
mod tests {
use super::*;
use crate::service::init_board;
use tempfile::TempDir;
#[tokio::test]
async fn tui_settings_defaults_to_confirm_quit() {
let dir = TempDir::new().expect("temp dir");
init_board(dir.path()).await.expect("init");
let settings = tui_settings(dir.path()).await.expect("settings");
assert!(settings.confirm_quit);
assert_eq!(
settings
.key_bindings
.keys(crate::kanban_keys::KeyAction::Quit),
["q".to_string(), "Esc".to_string()]
);
assert_eq!(settings.workflow, ["todo", "in-progress", "review", "done"]);
assert!(settings.hidden_columns.is_empty());
}
#[tokio::test]
async fn tui_settings_on_uninitialized_dir_errors() {
let dir = TempDir::new().expect("temp dir");
assert!(tui_settings(dir.path()).await.is_err());
}
#[tokio::test]
async fn tui_settings_defaults_to_markdown_on() {
let dir = TempDir::new().expect("temp dir");
init_board(dir.path()).await.expect("init");
let settings = tui_settings(dir.path()).await.expect("settings");
assert!(settings.markdown);
}
#[tokio::test]
async fn display_settings_defaults_to_markdown_on() {
let dir = TempDir::new().expect("temp dir");
init_board(dir.path()).await.expect("init");
let settings = display_settings(dir.path()).await.expect("settings");
assert!(settings.markdown);
}
#[tokio::test]
async fn display_settings_on_uninitialized_dir_errors() {
let dir = TempDir::new().expect("temp dir");
assert!(display_settings(dir.path()).await.is_err());
}
}