Files
NeoTachyon/tests/luci_stacked_settings_validation.sh
T

32 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SECTION_JS="$ROOT_DIR/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js"
fail() {
printf 'FAIL: %s\n' "$1" >&2
exit 1
}
modal_source="$(sed -n '/^function renderStackedJsonSettingsModal(/,/^function renderJsonOutboundSettingsModal(/p' "$SECTION_JS")"
grep -Fq '.catch((error) => {' <<<"$modal_source" ||
fail "stacked settings Save must retain the validation error"
grep -Fq 'fkp-stacked-settings-validation-summary' <<<"$modal_source" ||
fail "stacked settings Save must render a visible validation summary"
grep -Fq '_("Cannot save settings")' <<<"$modal_source" ||
fail "stacked settings validation summary must explain that Save failed"
grep -Fq '_("Fix the highlighted fields and save again.")' <<<"$modal_source" ||
fail "stacked settings validation summary must tell the user how to recover"
grep -Fq 'const invalidInput = nodes.querySelector(".cbi-input-invalid");' <<<"$modal_source" ||
fail "stacked settings validation must target only the active nested form"
grep -Fq 'invalidInput.scrollIntoView({ block: "center", behavior: "smooth" });' <<<"$modal_source" ||
fail "stacked settings validation must reveal the first invalid field"
grep -Fq 'invalidInput.focus({ preventScroll: true });' <<<"$modal_source" ||
fail "stacked settings validation must focus the first invalid field"
[[ "$(grep -Fc 'clearValidationSummary();' <<<"$modal_source")" -ge 3 ]] ||
fail "stacked settings validation summary must be cleared before retry and close"
printf 'LuCI stacked settings validation checks passed\n'