television/tests/cli/cli_config.rs

124 lines
4.1 KiB
Rust

//! Tests for CLI directory/config options: [PATH], --config-file, --cable-dir.
//!
//! These tests verify Television's configuration and directory handling capabilities,
//! ensuring that users can customize their setup and work in different directories.
use super::common::*;
use std::path::Path;
/// Tests that the PATH positional argument correctly sets the working directory.
#[test]
fn test_path_as_positional_argument_sets_working_directory() {
let mut tester = PtyTester::new();
let tmp_dir = Path::new(TARGET_DIR);
// Create initial files to be detected
std::fs::write(tmp_dir.join("UNIQUE16CHARIDfile.txt"), "").unwrap();
// Starts the files channel in the specified temporary directory
let cmd = tv_local_config_and_cable_with_args(&[
"files",
"--input",
"UNIQUE16CHARID",
tmp_dir.to_str().unwrap(),
]);
let mut child = tester.spawn_command_tui(cmd);
// Verify the TUI launched successfully with the files channel
tester.assert_tui_frame_contains(
"╭───────────────────────── files ──────────────────────────╮",
);
// Verify that the test file is present
tester.assert_tui_frame_contains("UNIQUE16CHARIDfile.txt");
// Send Ctrl+C to exit cleanly
tester.send(&ctrl('c'));
PtyTester::assert_exit_ok(&mut child, DEFAULT_DELAY);
}
/// Tests that the --config-file flag loads a custom configuration file.
#[test]
fn test_config_file_flag_loads_custom_config() {
let mut tester = PtyTester::new();
// This bypasses the default config locations and uses our test configuration
let cmd = tv_with_args(&[
"files",
"--config-file",
".config/config.toml",
"--cable-dir",
DEFAULT_CABLE_DIR,
]);
let mut child = tester.spawn_command_tui(cmd);
// Verify the TUI started with the custom config
tester.assert_tui_frame_contains("files");
// Send Ctrl+C to exit cleanly
tester.send(&ctrl('c'));
PtyTester::assert_exit_ok(&mut child, DEFAULT_DELAY);
}
/// Tests that the --config-file flag fails to load a custom configuration file.
#[test]
fn test_config_file_flag_fails_to_load_custom_config() {
let mut tester = PtyTester::new();
// This bypasses the default config locations and uses our test configuration
let cmd = tv_with_args(&[
"files",
"--config-file",
".config/config1.toml",
"--cable-dir",
DEFAULT_CABLE_DIR,
]);
tester.spawn_command(cmd);
// CLI should exit with error message, not show TUI
tester.assert_raw_output_contains("File does not exist");
}
/// Tests that the --cable-dir flag loads channels from a custom directory.
#[test]
fn test_cable_dir_flag_loads_custom_cable_dir() {
let mut tester = PtyTester::new();
// This loads channels from our test cable directory instead of the default location
let cmd = tv_with_args(&[
"files",
"--cable-dir",
"cable/unix",
"--config-file",
DEFAULT_CONFIG_FILE,
]);
let mut child = tester.spawn_command_tui(cmd);
// Verify the channel was found and loaded successfully
tester.assert_tui_frame_contains(
"╭───────────────────────── files ──────────────────────────╮",
);
// Send Ctrl+C to exit cleanly
tester.send(&ctrl('c'));
PtyTester::assert_exit_ok(&mut child, DEFAULT_DELAY);
}
/// Tests that the --cable-dir flag fails to load channels from a custom directory.
#[test]
fn test_cable_dir_flag_fails_to_load_custom_cable_dir() {
let mut tester = PtyTester::new();
// This bypasses the default config locations and uses our test configuration
let cmd = tv_with_args(&[
"files",
"--cable-dir",
"cable/unix1",
"--config-file",
DEFAULT_CONFIG_FILE,
]);
tester.spawn_command(cmd);
// CLI should exit with error message, not show TUI
tester.assert_raw_output_contains("Directory does not exist");
}