assemblrr/tests/unit/test_fzf_tui.sh
soulis-1256 a758a59aa5
feat(bazarr): multi-language subtitles and OpenSubtitles edit flow
Pick extra subtitle languages in setup and config edit (Jellyfin preferred
first, Bazarr downloads all). Config edit OpenSubtitles goes straight to
username/password, ignores leftover fzf Enter, and cancel leaves secrets.
2026-08-23 23:23:23 +03:00

73 lines
3.6 KiB
Bash

#!/bin/bash
# Unit tests for indexer fzf menu formatting / preselect binds
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck disable=SC1091
source "$SCRIPT_DIR/../helpers.sh"
# shellcheck disable=SC1091
source "$REPO_ROOT/lib/core.sh"
stub_log_error_no_exit
# shellcheck disable=SC1091
source "$REPO_ROOT/lib/fzf-tui.sh"
schema='[
{"name":"Alpha","enable":true,"description":"first\nline"},
{"name":"Bravo","enable":false,"description":"private tracker"},
{"name":"Charlie","enable":true,"description":"already added"}
]'
test_suite "format_prowlarr_indexer_menu"
menu=$(format_prowlarr_indexer_menu "$schema" '["Charlie"]')
assert_contains "$menu" $'Alpha\t\tfirst line' "public unused has empty badge"
assert_contains "$menu" $'Bravo\t[P]\tprivate tracker' "private unused marked [P]"
assert_contains "$menu" $'Charlie\t[already enabled]\talready added' "existing marked [already enabled]"
both=$(format_prowlarr_indexer_menu "$schema" '["Bravo"]')
assert_contains "$both" $'Bravo\t[already enabled] [P]\tprivate tracker' "existing private gets both badges"
empty=$(format_prowlarr_indexer_menu "$schema" '[]')
assert_not_contains "$empty" "[already enabled]" "no badge when none installed"
test_suite "fzf_preselect_start_bind"
data=$'Alpha\t\nBravo\t[P]\nCharlie\t[already enabled]'
assert_eq "start:pos(3)+select" "$(fzf_preselect_start_bind "$data" $'Charlie')" "one existing"
assert_eq "start:pos(1)+select+pos(3)+select" "$(fzf_preselect_start_bind "$data" $'Alpha\nCharlie')" "two existing"
assert_eq "" "$(fzf_preselect_start_bind "$data" $'Nope')" "unknown name → empty"
assert_eq "" "$(fzf_preselect_start_bind "$data" "")" "empty names → empty"
test_suite "format_path_menu"
menu=$(format_path_menu /home/u/assemblrr /home/u/assemblrr-media /mnt/e /media/u/disk)
assert_contains "$menu" $'home\tHome (default)\t/home/u/assemblrr + /home/u/assemblrr-media\t/home/u/assemblrr\t/home/u/assemblrr-media' \
"home default row"
assert_contains "$menu" $'all:/mnt/e\tWindows E: — everything here' "WSL drive everything"
assert_contains "$menu" $'media:/mnt/e\tWindows E: — media only (recommended)' "WSL drive media-only"
assert_contains "$menu" $'/mnt/e/assemblrr\t/mnt/e/assemblrr-media' "everything paths on E:"
assert_contains "$menu" $'/home/u/assemblrr\t/mnt/e/assemblrr-media' "media-only keeps home install"
assert_contains "$menu" $'all:/media/u/disk\tdisk — everything here' "linux mount uses basename"
assert_contains "$menu" $'browse\tBrowse for a folder...' "browse row"
assert_contains "$menu" $'custom\tType paths...' "custom row"
test_suite "_subtitle_stored_lang_codes / join"
SUBTITLE_LANGUAGE="eng"
unset SUBTITLE_LANGUAGES || true
assert_eq "eng" "$(_subtitle_stored_lang_codes)" "legacy single language"
SUBTITLE_LANGUAGES="eng,ell"
assert_eq $'eng\nell' "$(_subtitle_stored_lang_codes)" "list wins over single"
SUBTITLE_LANGUAGES="eng, ell, eng"
assert_eq $'eng\nell' "$(_subtitle_stored_lang_codes)" "strips spaces and duplicates"
assert_eq "eng,ell" "$(_subtitle_join_preferred_first eng ell eng)" "preferred first, unique"
assert_eq "ell,eng" "$(_subtitle_join_preferred_first ell eng)" "greek preferred"
test_suite "fzf_single_select_data default row first"
data=$'ell\tGreek\neng\tEnglish\nfra\tFrench'
reordered=$(
# Replicate the default-first reorder used by fzf_single_select_data
default=eng
preferred_row=$(printf '%s\n' "$data" | awk -F'\t' -v d="$default" '$1 == d { print; exit }')
rest=$(printf '%s\n' "$data" | awk -F'\t' -v d="$default" '$1 != d { print }')
printf '%s\n%s\n' "$preferred_row" "$rest"
)
assert_eq $'eng\tEnglish' "$(echo "$reordered" | head -1)" "preferred row is first"
test_summary