#!/usr/bin/env bats # Integration tests for install.sh and uninstall.sh # Requires: bats-core (https://github.com/bats-core/bats-core) REPO_ROOT="$(cd "$(dirname "$BATS_TEST_FILENAME")/.." && pwd)" setup() { # Each test gets a fresh temp home directory export TEST_HOME TEST_HOME="$(mktemp -d)" export HOME="$TEST_HOME" export XDG_CONFIG_HOME="$TEST_HOME/.config" # Inject a fake inkscape so check_deps passes without the real binary local fake_bin="$TEST_HOME/bin" mkdir -p "$fake_bin" printf '#!/bin/sh\necho "Inkscape 1.3.2"\n' > "$fake_bin/inkscape" chmod +x "$fake_bin/inkscape" export PATH="$fake_bin:$PATH" } teardown() { rm -rf "$TEST_HOME" } _run_install() { bash "$REPO_ROOT/install.sh" --preset="${1:-cc}" --yes 2>&1 } _config_root() { echo "$TEST_HOME/.config/inkscape" } # ── Backup ──────────────────────────────────────────────────────────────────── @test "backup is created on first install" { mkdir -p "$(_config_root)" echo '' > "$(_config_root)/preferences.xml" _run_install cc local backup backup=$(ls -1d "$(_config_root)".bak-illuscape-* 2>/dev/null | head -1) [ -n "$backup" ] [ -f "$backup/preferences.xml" ] } @test "second install does not overwrite backup" { mkdir -p "$(_config_root)" echo '' > "$(_config_root)/preferences.xml" _run_install cc sleep 1 _run_install cc local backup_count backup_count=$(ls -1d "$(_config_root)".bak-illuscape-* 2>/dev/null | wc -l) [ "$backup_count" -eq 1 ] } # ── Keys ────────────────────────────────────────────────────────────────────── @test "CC preset installs illustrator-cc.xml" { _run_install cc [ -f "$(_config_root)/keys/illustrator-cc.xml" ] } @test "CS6 preset installs illustrator-cs6.xml" { _run_install cs6 [ -f "$(_config_root)/keys/illustrator-cs6.xml" ] } @test "CC preset does not install cs6 key file" { _run_install cc [ ! -f "$(_config_root)/keys/illustrator-cs6.xml" ] } # ── Palettes ────────────────────────────────────────────────────────────────── @test "all palette files are installed" { _run_install cc [ -f "$(_config_root)/palettes/Illustrator-Defaults.gpl" ] [ -f "$(_config_root)/palettes/Illustrator-Grays.gpl" ] [ -f "$(_config_root)/palettes/Illustrator-Earth.gpl" ] } # ── Templates ───────────────────────────────────────────────────────────────── @test "all template files are installed" { _run_install cc [ -f "$(_config_root)/templates/Letter.svg" ] [ -f "$(_config_root)/templates/A4.svg" ] [ -f "$(_config_root)/templates/Web-1920x1080.svg" ] [ -f "$(_config_root)/templates/Web-1280x720.svg" ] [ -f "$(_config_root)/templates/Print-CMYK-Letter.svg" ] [ -f "$(_config_root)/templates/Print-CMYK-A4.svg" ] } # ── Preferences merge ───────────────────────────────────────────────────────── @test "preferences.xml is created when missing" { _run_install cc [ -f "$(_config_root)/preferences.xml" ] } @test "CC preset sets px units in preferences.xml" { _run_install cc grep -q 'doc="px"' "$(_config_root)/preferences.xml" } @test "CS6 preset sets pt units in preferences.xml" { _run_install cs6 grep -q 'doc="pt"' "$(_config_root)/preferences.xml" } # ── Noninteractive ──────────────────────────────────────────────────────────── @test "--preset flag skips interactive prompt" { # If prompt were shown, it would hang — the test itself proves it didn't run bash "$REPO_ROOT/install.sh" --preset=cc --yes [ "$status" -eq 0 ] } # ── Uninstall ───────────────────────────────────────────────────────────────── @test "uninstall restores preferences.xml from backup" { mkdir -p "$(_config_root)" echo '' \ > "$(_config_root)/preferences.xml" _run_install cc bash "$REPO_ROOT/uninstall.sh" grep -q 'id="original"' "$(_config_root)/preferences.xml" } @test "uninstall removes palette files" { _run_install cc bash "$REPO_ROOT/uninstall.sh" [ ! -f "$(_config_root)/palettes/Illustrator-Defaults.gpl" ] }