@sebastienrousseau/dotfiles 0.2.481 → 0.2.499
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/ARCHITECTURE.md +29 -196
- package/docs/COMPLIANCE.md +10 -10
- package/docs/COPYRIGHT +3 -4
- package/docs/OPERATIONS.md +38 -65
- package/docs/PLAN.md +3 -3
- package/docs/PR_DESCRIPTION.md +85 -84
- package/docs/ROADMAP.md +11 -11
- package/docs/ROADMAP_legacy.md +556 -0
- package/docs/SECURITY_CHECKLIST.md +1 -1
- package/docs/TASK.md +4 -4
- package/docs/WALKTHROUGH.md +33 -152
- package/package.json +17 -5
- package/scripts/backup.sh +142 -0
- package/scripts/banner.sh +20 -0
- package/scripts/benchmark.sh +20 -0
- package/scripts/build.sh +41 -0
- package/scripts/clean.sh +31 -0
- package/scripts/compile.sh +54 -0
- package/scripts/copy.sh +108 -0
- package/scripts/{tools/detect-collisions.py → detect-collisions.py} +1 -1
- package/scripts/doctor.sh +79 -0
- package/scripts/dotfiles.sh +63 -0
- package/scripts/download.sh +35 -0
- package/scripts/help.sh +57 -0
- package/scripts/lock-configs.sh +57 -0
- package/scripts/package.sh +46 -0
- package/scripts/ssh.sh +55 -0
- package/scripts/teleport.sh +23 -0
- package/scripts/{tests/test-aliases.sh → test-aliases.sh} +3 -3
- package/scripts/test_smoke.sh +88 -0
- package/scripts/unpack.sh +28 -0
- package/scripts/{diagnostics/verify_state.sh → verify_state.sh} +21 -21
- package/templates/projects/go/README.md +0 -4
- package/templates/projects/node/README.md +0 -4
- package/templates/projects/python/README.md +0 -4
- package/templates/projects/python/pyproject.toml +0 -15
- package/CHANGELOG.md +0 -285
- package/LICENSE +0 -1283
- package/README.md +0 -315
- package/docs/ALIASES.md +0 -128
- package/docs/FEATURES.md +0 -166
- package/docs/FONTS.md +0 -147
- package/docs/INSTALL.md +0 -119
- package/docs/KEYS.md +0 -40
- package/docs/KEY_ROTATION.md +0 -219
- package/docs/LEGACY_ROADMAP.md +0 -142
- package/docs/NEOVIM_IDE_GUIDE.md +0 -52
- package/docs/README.md +0 -269
- package/docs/REPO_AUDIT.md +0 -23
- package/docs/SCREENSHOTS.md +0 -116
- package/docs/SECRETS.md +0 -76
- package/docs/SECURITY.md +0 -30
- package/docs/TESTING.md +0 -190
- package/docs/TOOLS.md +0 -146
- package/docs/TROUBLESHOOTING.md +0 -112
- package/docs/UTILS.md +0 -105
- package/docs/WSL2_NIX_TROUBLESHOOTING.md +0 -723
- package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -101
- package/docs/adr/ADR-002-shell-performance.md +0 -121
- package/docs/adr/ADR-003-security-first.md +0 -140
- package/docs/adr/ADR-004-cli-architecture.md +0 -157
- package/docs/adr/ADR-005-chezmoi-choice.md +0 -89
- package/docs/adr/ADR-006-shell-selection.md +0 -115
- package/docs/adr/README.md +0 -33
- package/docs/themes/README.md +0 -20
- package/dot_config/aider/aider.conf.yml +0 -32
- package/dot_config/alacritty/alacritty.toml.tmpl +0 -483
- package/dot_config/ansible/ansible.cfg.tmpl +0 -11
- package/dot_config/atuin/config.toml +0 -23
- package/dot_config/bat/config +0 -8
- package/dot_config/brave-flags.conf.tmpl +0 -7
- package/dot_config/btop/btop.conf +0 -16
- package/dot_config/btop/themes/tokyonight.theme +0 -34
- package/dot_config/bun/bunfig.toml.tmpl +0 -33
- package/dot_config/claude/mcp_servers.json +0 -49
- package/dot_config/clippy.toml +0 -55
- package/dot_config/containers/containers.conf +0 -14
- package/dot_config/curl/dot_curlrc +0 -18
- package/dot_config/dlv/config.yml +0 -39
- package/dot_config/docker/config.json.tmpl +0 -15
- package/dot_config/dotfiles/boot/README.md +0 -11
- package/dot_config/dotfiles/grub/README.md +0 -11
- package/dot_config/dotfiles/lock/README.md +0 -11
- package/dot_config/dotfiles/versions.env.tmpl +0 -19
- package/dot_config/duf/duf.conf +0 -6
- package/dot_config/duti/defaults.duti +0 -5
- package/dot_config/emoji/emoji.txt +0 -34
- package/dot_config/fastfetch/config.jsonc +0 -28
- package/dot_config/firefox/user.js +0 -8
- package/dot_config/flatpak/flatpak.list +0 -4
- package/dot_config/fontconfig/fonts.conf.tmpl +0 -44
- package/dot_config/gem/gemrc +0 -9
- package/dot_config/gh/config.yml +0 -12
- package/dot_config/ghostty/config.tmpl +0 -661
- package/dot_config/git/attributes +0 -12
- package/dot_config/git/config.tmpl +0 -77
- package/dot_config/git/ignore +0 -27
- package/dot_config/gnupg/gpg-agent.conf.tmpl +0 -11
- package/dot_config/go/aliases.sh +0 -61
- package/dot_config/go/env.sh +0 -24
- package/dot_config/go/golangci.yml +0 -118
- package/dot_config/go/gopls.json +0 -30
- package/dot_config/goose/config.yaml +0 -29
- package/dot_config/gtk-3.0/gtk.css.tmpl +0 -305
- package/dot_config/gtk-3.0/settings.ini.tmpl +0 -66
- package/dot_config/gtk-4.0/gtk.css.tmpl +0 -309
- package/dot_config/gtk-4.0/settings.ini.tmpl +0 -21
- package/dot_config/htop/htoprc +0 -20
- package/dot_config/ice/README.md +0 -13
- package/dot_config/inputrc +0 -2
- package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
- package/dot_config/just/justfile +0 -104
- package/dot_config/k9s/config.yaml.tmpl +0 -65
- package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
- package/dot_config/karabiner/karabiner.json +0 -14
- package/dot_config/kitty/kitty.conf.tmpl +0 -517
- package/dot_config/lazydocker/config.yml +0 -186
- package/dot_config/lazygit/config.yml +0 -23
- package/dot_config/lsd/config.yaml +0 -19
- package/dot_config/mas/masapps.txt +0 -5
- package/dot_config/minikube/config.json +0 -13
- package/dot_config/mise/config.toml +0 -41
- package/dot_config/mongosh/mongoshrc.js +0 -67
- package/dot_config/mycli/myclirc +0 -67
- package/dot_config/nano/nanorc +0 -28
- package/dot_config/ncdu/config +0 -12
- package/dot_config/nvim/init.lua +0 -4
- package/dot_config/nvim/lazy-lock.json +0 -27
- package/dot_config/nvim/lua/config/autocmds.lua +0 -63
- package/dot_config/nvim/lua/config/keymaps.lua +0 -87
- package/dot_config/nvim/lua/config/lazy.lua +0 -34
- package/dot_config/nvim/lua/config/options.lua +0 -48
- package/dot_config/nvim/lua/plugins/coding.lua +0 -234
- package/dot_config/nvim/lua/plugins/dap.lua +0 -201
- package/dot_config/nvim/lua/plugins/editor.lua +0 -59
- package/dot_config/nvim/lua/plugins/git.lua +0 -9
- package/dot_config/nvim/lua/plugins/lsp.lua +0 -221
- package/dot_config/nvim/lua/plugins/markdown.lua +0 -17
- package/dot_config/nvim/lua/plugins/rust.lua +0 -33
- package/dot_config/nvim/lua/plugins/sessions.lua +0 -32
- package/dot_config/nvim/lua/plugins/ui.lua +0 -537
- package/dot_config/nvim/snippets/all.lua +0 -9
- package/dot_config/nvim/snippets/python.lua +0 -16
- package/dot_config/pip/pip.conf.tmpl +0 -32
- package/dot_config/pypoetry/config.toml.tmpl +0 -6
- package/dot_config/pyrightconfig.json.tmpl +0 -5
- package/dot_config/raycast/README.md +0 -13
- package/dot_config/redis/redisclirc +0 -41
- package/dot_config/shell/00-container-detect.sh +0 -53
- package/dot_config/shell/00-core-paths.sh.tmpl +0 -95
- package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
- package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
- package/dot_config/shell/50-logic-functions.sh.tmpl +0 -10
- package/dot_config/shell/90-theme-switch.sh +0 -70
- package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -35
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -23
- package/dot_config/shell/Brewfile +0 -207
- package/dot_config/shell/Brewfile.cask +0 -92
- package/dot_config/shell/Brewfile.cli +0 -119
- package/dot_config/shell/README.md +0 -267
- package/dot_config/shell/custom/context_suggest.zsh +0 -68
- package/dot_config/shell/custom/error_analysis.zsh +0 -45
- package/dot_config/sops/dot_sops.yaml +0 -23
- package/dot_config/starship.toml.tmpl +0 -124
- package/dot_config/task/Taskfile.yml +0 -86
- package/dot_config/tflint/tflint.hcl.tmpl +0 -9
- package/dot_config/tmux/tmux.conf.tmpl +0 -181
- package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
- package/dot_config/vscode/extensions.txt +0 -11
- package/dot_config/vscode/settings.json.tmpl +0 -123
- package/dot_config/waybar/style.css +0 -8
- package/dot_config/wezterm/wezterm.lua.tmpl +0 -236
- package/dot_config/wget/wgetrc +0 -12
- package/dot_config/yarn/yarnrc.yml.tmpl +0 -36
- package/dot_config/yazi/yazi.toml +0 -40
- package/dot_config/zellij/config.kdl +0 -79
- package/dot_config/zsh/dot_zprofile +0 -13
- package/dot_config/zsh/dot_zshenv +0 -6
- package/dot_config/zsh/dot_zshrc.tmpl +0 -199
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -5
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
- package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -123
- package/dot_config/zsh/rc.d/40-bell.zsh.tmpl +0 -20
- package/dot_config/zsh/rc.d/50-login-fortune.zsh.tmpl +0 -9
- package/dot_local/bin/executable_ai_core +0 -130
- package/dot_local/bin/executable_b64 +0 -59
- package/dot_local/bin/executable_dot +0 -178
- package/dot_local/bin/executable_dot_completion +0 -55
- package/dot_local/bin/executable_epoch +0 -62
- package/dot_local/bin/executable_extract +0 -108
- package/dot_local/bin/executable_git-ai-commit +0 -160
- package/dot_local/bin/executable_git-ai-diff +0 -154
- package/dot_local/bin/executable_hash +0 -123
- package/dot_local/bin/executable_hex +0 -79
- package/dot_local/bin/executable_ip +0 -37
- package/dot_local/bin/executable_jsonv +0 -54
- package/dot_local/bin/executable_jwt +0 -78
- package/dot_local/bin/executable_kill-port +0 -59
- package/dot_local/bin/executable_lorem +0 -103
- package/dot_local/bin/executable_regex +0 -96
- package/dot_local/bin/executable_tmux-sessionizer +0 -187
- package/dot_local/bin/executable_tour +0 -137
- package/dot_local/bin/executable_update +0 -108
- package/dot_local/bin/executable_uuid +0 -57
- package/dot_local/bin/executable_yamlv +0 -39
- package/dot_local/bin/executable_zig-install +0 -89
- package/dot_local/bin/voice_ops +0 -7
- package/dot_local/share/bash-completion/completions/dot +0 -54
- package/dot_local/share/zsh/completions/.keep +0 -0
- package/install.sh +0 -255
- package/scripts/ci/validate-ci-config.sh +0 -222
- package/scripts/demo/record.sh +0 -41
- package/scripts/diagnostics/benchmark.sh +0 -201
- package/scripts/diagnostics/doctor.sh +0 -115
- package/scripts/diagnostics/drift-dashboard.sh +0 -26
- package/scripts/diagnostics/health.sh +0 -356
- package/scripts/diagnostics/history-analysis.sh +0 -77
- package/scripts/diagnostics/security-score.sh +0 -392
- package/scripts/dot/commands/appearance.sh +0 -63
- package/scripts/dot/commands/core.sh +0 -130
- package/scripts/dot/commands/diagnostics.sh +0 -100
- package/scripts/dot/commands/meta.sh +0 -117
- package/scripts/dot/commands/restore.sh +0 -209
- package/scripts/dot/commands/secrets.sh +0 -81
- package/scripts/dot/commands/security.sh +0 -73
- package/scripts/dot/commands/tools.sh +0 -228
- package/scripts/dot/lib/utils.sh +0 -72
- package/scripts/fonts/install-nerd-fonts.sh +0 -59
- package/scripts/fonts/patch-fonts.sh +0 -34
- package/scripts/ops/chezmoi-apply.sh +0 -42
- package/scripts/ops/chezmoi-diff.sh +0 -14
- package/scripts/ops/chezmoi-remove.sh +0 -43
- package/scripts/ops/chezmoi-update.sh +0 -16
- package/scripts/ops/heal.sh +0 -466
- package/scripts/ops/health-check.sh +0 -380
- package/scripts/ops/rollback.sh +0 -531
- package/scripts/ops/teleport.sh +0 -32
- package/scripts/secrets/age-init.sh +0 -69
- package/scripts/secrets/create-secrets-file.sh +0 -44
- package/scripts/secrets/encrypt-ssh-key.sh +0 -42
- package/scripts/security/backup.sh +0 -17
- package/scripts/security/dns-doh.sh +0 -29
- package/scripts/security/encryption-check.sh +0 -39
- package/scripts/security/enforce-policies.sh +0 -339
- package/scripts/security/firewall.sh +0 -34
- package/scripts/security/lock-configs.sh +0 -57
- package/scripts/security/lock-screen.sh +0 -33
- package/scripts/security/manage-secrets.sh +0 -415
- package/scripts/security/telemetry-kill.sh +0 -28
- package/scripts/security/usb-safety.sh +0 -29
- package/scripts/tests/README.md +0 -241
- package/scripts/tests/benchmark.sh +0 -91
- package/scripts/tests/framework/assertions.sh +0 -283
- package/scripts/tests/framework/mocks.sh +0 -201
- package/scripts/tests/framework/test_runner.sh +0 -189
- package/scripts/tests/integration/test_install.sh +0 -237
- package/scripts/tests/performance/benchmark_runner.sh +0 -156
- package/scripts/tests/performance/regression_check.sh +0 -73
- package/scripts/tests/performance/stress_test.sh +0 -65
- package/scripts/tests/test-docker.sh +0 -48
- package/scripts/tests/unit/test_ai_aliases.sh +0 -158
- package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
- package/scripts/tests/unit/test_backup.sh +0 -227
- package/scripts/tests/unit/test_case_functions.sh +0 -238
- package/scripts/tests/unit/test_cd_aliases.sh +0 -367
- package/scripts/tests/unit/test_dot_cli.sh +0 -217
- package/scripts/tests/unit/test_encode64.sh +0 -67
- package/scripts/tests/unit/test_environment.sh +0 -78
- package/scripts/tests/unit/test_extract.sh +0 -163
- package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
- package/scripts/tests/unit/test_genpass.sh +0 -298
- package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
- package/scripts/tests/unit/test_installers.sh +0 -172
- package/scripts/tests/unit/test_keygen.sh +0 -68
- package/scripts/tests/unit/test_logging.sh +0 -96
- package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
- package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
- package/scripts/tests/unit/test_prependpath.sh +0 -66
- package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
- package/scripts/tests/unit/test_rd.sh +0 -230
- package/scripts/tests/unit/test_security_fixes.sh +0 -130
- package/scripts/tests/unit/test_security_scripts.sh +0 -87
- package/scripts/tests/unit/test_template_validation.sh +0 -238
- package/scripts/tests/unit/test_utility_functions.sh +0 -144
- package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
- package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
- package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
- package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
- package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
- package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
- package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
- package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
- package/scripts/tests/unit/test_zipf.sh +0 -76
- package/scripts/theme/apply-gnome-theme.sh +0 -297
- package/scripts/theme/install-boot-logo.sh +0 -61
- package/scripts/theme/install-catppuccin-themes.sh +0 -346
- package/scripts/theme/install-cursors.sh +0 -24
- package/scripts/theme/install-file-icons.sh +0 -25
- package/scripts/theme/install-grub-theme.sh +0 -51
- package/scripts/theme/install-lock-icon.sh +0 -29
- package/scripts/theme/switch.sh +0 -250
- package/scripts/theme/wallpaper-rotate.sh +0 -82
- package/scripts/theme/wallpaper-sync.sh +0 -42
- package/scripts/tools/cmatrix.sh +0 -20
- package/scripts/tools/emoji-picker.sh +0 -45
- package/scripts/tools/figlet-banner.sh +0 -17
- package/scripts/tools/log-rotate.sh +0 -29
- package/scripts/tools/lolcat-wrap.sh +0 -18
- package/scripts/tools/pipes.sh +0 -47
- package/scripts/tuning/linux.sh +0 -175
- package/scripts/tuning/macos.sh +0 -46
- package/templates/projects/molecule/README.md +0 -7
- package/templates/projects/molecule/converge.yml +0 -7
- package/templates/projects/molecule/molecule.yml +0 -16
- package/templates/projects/packer/README.md +0 -15
- package/templates/projects/packer/main.pkr.hcl +0 -15
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC1091,SC2034
|
|
3
|
-
# Unit tests for utility functions: hostinfo, size, banner, stopwatch
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
-
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
|
|
8
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
9
|
-
source "$SCRIPT_DIR/../framework/mocks.sh"
|
|
10
|
-
|
|
11
|
-
FUNCS_DIR="$REPO_ROOT/.chezmoitemplates/functions"
|
|
12
|
-
|
|
13
|
-
echo "Testing utility functions..."
|
|
14
|
-
|
|
15
|
-
# ============ hostinfo ============
|
|
16
|
-
|
|
17
|
-
if [[ -f "$FUNCS_DIR/hostinfo.sh" ]]; then
|
|
18
|
-
source "$FUNCS_DIR/hostinfo.sh"
|
|
19
|
-
fi
|
|
20
|
-
|
|
21
|
-
test_start "hostinfo_function_exists"
|
|
22
|
-
assert_true "type hostinfo &>/dev/null" "hostinfo function should exist"
|
|
23
|
-
|
|
24
|
-
test_start "hostinfo_help"
|
|
25
|
-
if type hostinfo &>/dev/null; then
|
|
26
|
-
output=$(hostinfo --help 2>&1)
|
|
27
|
-
if [[ "$output" == *"Usage:"* ]]; then
|
|
28
|
-
((TESTS_PASSED++))
|
|
29
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: --help shows usage"
|
|
30
|
-
else
|
|
31
|
-
((TESTS_FAILED++))
|
|
32
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: --help should show usage"
|
|
33
|
-
fi
|
|
34
|
-
fi
|
|
35
|
-
|
|
36
|
-
test_start "hostinfo_help_exit_code"
|
|
37
|
-
if type hostinfo &>/dev/null; then
|
|
38
|
-
hostinfo --help >/dev/null 2>&1
|
|
39
|
-
assert_equals "0" "$?" "hostinfo --help should exit 0"
|
|
40
|
-
fi
|
|
41
|
-
|
|
42
|
-
test_start "hostinfo_shows_username"
|
|
43
|
-
if type hostinfo &>/dev/null; then
|
|
44
|
-
# Use timeout to avoid network-dependent delays (hostinfo fetches public IP)
|
|
45
|
-
set +e
|
|
46
|
-
output=$(timeout 5 bash -c 'source "'"$FUNCS_DIR/hostinfo.sh"'" && hostinfo' 2>&1)
|
|
47
|
-
set -e
|
|
48
|
-
if [[ "$output" == *"Username"* ]]; then
|
|
49
|
-
((TESTS_PASSED++))
|
|
50
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: output contains Username"
|
|
51
|
-
else
|
|
52
|
-
((TESTS_FAILED++))
|
|
53
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: output should contain Username"
|
|
54
|
-
echo -e " Output: ${output:0:200}"
|
|
55
|
-
fi
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
|
-
test_start "hostinfo_shows_hostname"
|
|
59
|
-
if type hostinfo &>/dev/null; then
|
|
60
|
-
set +e
|
|
61
|
-
output=$(timeout 5 bash -c 'source "'"$FUNCS_DIR/hostinfo.sh"'" && hostinfo' 2>&1)
|
|
62
|
-
set -e
|
|
63
|
-
if [[ "$output" == *"Hostname"* ]]; then
|
|
64
|
-
((TESTS_PASSED++))
|
|
65
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: output contains Hostname"
|
|
66
|
-
else
|
|
67
|
-
((TESTS_FAILED++))
|
|
68
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: output should contain Hostname"
|
|
69
|
-
fi
|
|
70
|
-
fi
|
|
71
|
-
|
|
72
|
-
# ============ size ============
|
|
73
|
-
|
|
74
|
-
if [[ -f "$FUNCS_DIR/size.sh" ]]; then
|
|
75
|
-
source "$FUNCS_DIR/size.sh"
|
|
76
|
-
fi
|
|
77
|
-
|
|
78
|
-
test_start "size_function_exists"
|
|
79
|
-
assert_true "type size &>/dev/null" "size function should exist"
|
|
80
|
-
|
|
81
|
-
test_start "size_no_args"
|
|
82
|
-
if type size &>/dev/null; then
|
|
83
|
-
set +e
|
|
84
|
-
output=$(size 2>&1)
|
|
85
|
-
ec=$?
|
|
86
|
-
set -e
|
|
87
|
-
assert_equals "1" "$ec" "size with no args should fail"
|
|
88
|
-
fi
|
|
89
|
-
|
|
90
|
-
test_start "size_with_file"
|
|
91
|
-
if type size &>/dev/null; then
|
|
92
|
-
test_dir=$(mock_dir "size_test")
|
|
93
|
-
echo "test content" >"$test_dir/test.txt"
|
|
94
|
-
output=$(size "$test_dir/test.txt" 2>&1) || true
|
|
95
|
-
if [[ "$output" == *"INFO"* ]] || [[ "$output" == *"bytes"* ]] || [[ "$output" == *"size"* ]]; then
|
|
96
|
-
((TESTS_PASSED++))
|
|
97
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: shows size information"
|
|
98
|
-
else
|
|
99
|
-
((TESTS_FAILED++))
|
|
100
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should show size information"
|
|
101
|
-
echo -e " Output: $output"
|
|
102
|
-
fi
|
|
103
|
-
rm -rf "$test_dir"
|
|
104
|
-
fi
|
|
105
|
-
|
|
106
|
-
# ============ banner ============
|
|
107
|
-
|
|
108
|
-
if [[ -f "$FUNCS_DIR/banner.sh" ]]; then
|
|
109
|
-
source "$FUNCS_DIR/banner.sh"
|
|
110
|
-
fi
|
|
111
|
-
|
|
112
|
-
test_start "banner_function_exists"
|
|
113
|
-
assert_true "type banner &>/dev/null" "banner function should exist"
|
|
114
|
-
|
|
115
|
-
test_start "banner_no_script_error"
|
|
116
|
-
if type banner &>/dev/null; then
|
|
117
|
-
# Without the figlet-banner.sh script, banner should fail gracefully
|
|
118
|
-
set +e
|
|
119
|
-
DOTFILES_DIR="/nonexistent" output=$(banner "test" 2>&1)
|
|
120
|
-
ec=$?
|
|
121
|
-
set -e
|
|
122
|
-
if [[ $ec -ne 0 ]] || [[ "$output" == *"not found"* ]] || [[ "$output" == *"ERROR"* ]]; then
|
|
123
|
-
((TESTS_PASSED++))
|
|
124
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: graceful error when script missing"
|
|
125
|
-
else
|
|
126
|
-
((TESTS_PASSED++))
|
|
127
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: banner handled missing script"
|
|
128
|
-
fi
|
|
129
|
-
fi
|
|
130
|
-
|
|
131
|
-
# ============ Cross-cutting: error path tests ============
|
|
132
|
-
|
|
133
|
-
test_start "size_too_many_args"
|
|
134
|
-
if type size &>/dev/null; then
|
|
135
|
-
set +e
|
|
136
|
-
output=$(size "arg1" "arg2" 2>&1)
|
|
137
|
-
ec=$?
|
|
138
|
-
set -e
|
|
139
|
-
assert_equals "1" "$ec" "size with 2 args should fail"
|
|
140
|
-
fi
|
|
141
|
-
|
|
142
|
-
echo ""
|
|
143
|
-
echo "Utility function tests completed."
|
|
144
|
-
print_summary
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC1091,SC2034,SC2016
|
|
3
|
-
# Unit tests for Wave 1: Eager/Lazy alias split (90/91 templates)
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
-
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
|
|
8
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
9
|
-
|
|
10
|
-
EAGER_TMPL="$REPO_ROOT/dot_config/shell/90-ux-aliases.sh.tmpl"
|
|
11
|
-
LAZY_TMPL="$REPO_ROOT/dot_config/shell/91-ux-aliases-lazy.sh.tmpl"
|
|
12
|
-
|
|
13
|
-
echo "Testing Wave 1: Eager/Lazy alias split..."
|
|
14
|
-
|
|
15
|
-
# --- Eager template (90) ---
|
|
16
|
-
|
|
17
|
-
test_start "eager_template_exists"
|
|
18
|
-
assert_file_exists "$EAGER_TMPL" "90-ux-aliases.sh.tmpl should exist"
|
|
19
|
-
|
|
20
|
-
test_start "eager_template_has_shebang"
|
|
21
|
-
first_line=$(head -n 1 "$EAGER_TMPL")
|
|
22
|
-
if [[ "$first_line" == "#!/usr/bin/env bash" ]]; then
|
|
23
|
-
((TESTS_PASSED++))
|
|
24
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: has proper shebang"
|
|
25
|
-
else
|
|
26
|
-
((TESTS_FAILED++))
|
|
27
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should have #!/usr/bin/env bash shebang"
|
|
28
|
-
fi
|
|
29
|
-
|
|
30
|
-
test_start "eager_template_defines_core_categories"
|
|
31
|
-
assert_file_contains "$EAGER_TMPL" 'coreCategories' "should define coreCategories list"
|
|
32
|
-
|
|
33
|
-
test_start "eager_template_includes_cd"
|
|
34
|
-
assert_file_contains "$EAGER_TMPL" '"cd"' "should include cd in core categories"
|
|
35
|
-
|
|
36
|
-
test_start "eager_template_includes_git"
|
|
37
|
-
assert_file_contains "$EAGER_TMPL" '"git"' "should include git in core categories"
|
|
38
|
-
|
|
39
|
-
test_start "eager_template_includes_editor"
|
|
40
|
-
assert_file_contains "$EAGER_TMPL" '"editor"' "should include editor in core categories"
|
|
41
|
-
|
|
42
|
-
test_start "eager_template_includes_sudo"
|
|
43
|
-
assert_file_contains "$EAGER_TMPL" '"sudo"' "should include sudo in core categories"
|
|
44
|
-
|
|
45
|
-
test_start "eager_template_includes_modern"
|
|
46
|
-
assert_file_contains "$EAGER_TMPL" '"modern"' "should include modern in core categories"
|
|
47
|
-
|
|
48
|
-
test_start "eager_template_filters_isCore"
|
|
49
|
-
assert_file_contains "$EAGER_TMPL" 'if and $isCore' "should filter by isCore == true"
|
|
50
|
-
|
|
51
|
-
test_start "eager_template_excludes_macOS_inline"
|
|
52
|
-
assert_file_contains "$EAGER_TMPL" 'not (contains "/macOS/" $name)' "should exclude macOS aliases from main loop"
|
|
53
|
-
|
|
54
|
-
test_start "eager_template_has_macos_section"
|
|
55
|
-
assert_file_contains "$EAGER_TMPL" 'eq .chezmoi.os "darwin"' "should have OS-specific macOS section"
|
|
56
|
-
|
|
57
|
-
test_start "eager_template_uses_glob"
|
|
58
|
-
assert_file_contains "$EAGER_TMPL" 'glob $globPattern' "should discover aliases via glob"
|
|
59
|
-
|
|
60
|
-
test_start "eager_template_has_bash_compat"
|
|
61
|
-
assert_file_contains "$EAGER_TMPL" 'expand_aliases' "should enable expand_aliases for bash compatibility"
|
|
62
|
-
|
|
63
|
-
# Count expected core categories (14)
|
|
64
|
-
test_start "eager_template_has_14_core_categories"
|
|
65
|
-
core_count=$(grep -oE '"[a-z]+"' "$EAGER_TMPL" | head -14 | wc -l)
|
|
66
|
-
if [[ $core_count -eq 14 ]]; then
|
|
67
|
-
((TESTS_PASSED++))
|
|
68
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: has 14 core categories"
|
|
69
|
-
else
|
|
70
|
-
((TESTS_FAILED++))
|
|
71
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: expected 14 core categories, found $core_count"
|
|
72
|
-
fi
|
|
73
|
-
|
|
74
|
-
# --- Lazy template (91) ---
|
|
75
|
-
|
|
76
|
-
test_start "lazy_template_exists"
|
|
77
|
-
assert_file_exists "$LAZY_TMPL" "91-ux-aliases-lazy.sh.tmpl should exist"
|
|
78
|
-
|
|
79
|
-
test_start "lazy_template_has_shebang"
|
|
80
|
-
first_line=$(head -n 1 "$LAZY_TMPL")
|
|
81
|
-
if [[ "$first_line" == "#!/usr/bin/env bash" ]]; then
|
|
82
|
-
((TESTS_PASSED++))
|
|
83
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: has proper shebang"
|
|
84
|
-
else
|
|
85
|
-
((TESTS_FAILED++))
|
|
86
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should have #!/usr/bin/env bash shebang"
|
|
87
|
-
fi
|
|
88
|
-
|
|
89
|
-
test_start "lazy_template_defines_core_categories"
|
|
90
|
-
assert_file_contains "$LAZY_TMPL" 'coreCategories' "should define coreCategories for exclusion"
|
|
91
|
-
|
|
92
|
-
test_start "lazy_template_excludes_core"
|
|
93
|
-
assert_file_contains "$LAZY_TMPL" 'not $isCore' "should filter by NOT isCore"
|
|
94
|
-
|
|
95
|
-
test_start "lazy_template_excludes_macOS"
|
|
96
|
-
assert_file_contains "$LAZY_TMPL" 'not (contains "/macOS/" $name)' "should exclude macOS aliases"
|
|
97
|
-
|
|
98
|
-
test_start "lazy_template_has_bash_compat"
|
|
99
|
-
assert_file_contains "$LAZY_TMPL" 'expand_aliases' "should enable expand_aliases for bash compatibility"
|
|
100
|
-
|
|
101
|
-
test_start "lazy_template_uses_glob"
|
|
102
|
-
assert_file_contains "$LAZY_TMPL" 'glob $globPattern' "should discover aliases via glob"
|
|
103
|
-
|
|
104
|
-
# Verify both templates use the same coreCategories list
|
|
105
|
-
test_start "templates_share_core_categories"
|
|
106
|
-
eager_cats=$(grep 'coreCategories' "$EAGER_TMPL" | head -1)
|
|
107
|
-
lazy_cats=$(grep 'coreCategories' "$LAZY_TMPL" | head -1)
|
|
108
|
-
if [[ "$eager_cats" == "$lazy_cats" ]]; then
|
|
109
|
-
((TESTS_PASSED++))
|
|
110
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: eager and lazy templates use identical coreCategories"
|
|
111
|
-
else
|
|
112
|
-
((TESTS_FAILED++))
|
|
113
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: coreCategories differ between templates"
|
|
114
|
-
echo -e " Eager: $eager_cats"
|
|
115
|
-
echo -e " Lazy: $lazy_cats"
|
|
116
|
-
fi
|
|
117
|
-
|
|
118
|
-
# Verify both templates use the same glob pattern
|
|
119
|
-
test_start "templates_share_glob_pattern"
|
|
120
|
-
eager_glob=$(grep 'globPattern' "$EAGER_TMPL" | head -1)
|
|
121
|
-
lazy_glob=$(grep 'globPattern' "$LAZY_TMPL" | head -1)
|
|
122
|
-
if [[ "$eager_glob" == "$lazy_glob" ]]; then
|
|
123
|
-
((TESTS_PASSED++))
|
|
124
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: eager and lazy templates use identical globPattern"
|
|
125
|
-
else
|
|
126
|
-
((TESTS_FAILED++))
|
|
127
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: globPattern differs between templates"
|
|
128
|
-
fi
|
|
129
|
-
|
|
130
|
-
echo ""
|
|
131
|
-
echo "Wave 1 alias split tests completed."
|
|
132
|
-
print_summary
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC1091,SC2034
|
|
3
|
-
# Unit tests for Wave 1: CI chezmoi version pinning
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
-
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
|
|
8
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
9
|
-
|
|
10
|
-
CI_FILE="$REPO_ROOT/.github/workflows/ci.yml"
|
|
11
|
-
|
|
12
|
-
echo "Testing Wave 1: CI chezmoi version pinning..."
|
|
13
|
-
|
|
14
|
-
test_start "ci_yml_exists"
|
|
15
|
-
assert_file_exists "$CI_FILE" "ci.yml should exist"
|
|
16
|
-
|
|
17
|
-
test_start "ci_chezmoi_version_env"
|
|
18
|
-
assert_file_contains "$CI_FILE" "CHEZMOI_VERSION:" "should define CHEZMOI_VERSION env variable"
|
|
19
|
-
|
|
20
|
-
test_start "ci_chezmoi_version_pinned"
|
|
21
|
-
# Verify the version is a proper semver (not 'latest')
|
|
22
|
-
if grep -q 'CHEZMOI_VERSION:.*"[0-9]' "$CI_FILE"; then
|
|
23
|
-
((TESTS_PASSED++))
|
|
24
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: CHEZMOI_VERSION is pinned to a semver"
|
|
25
|
-
else
|
|
26
|
-
((TESTS_FAILED++))
|
|
27
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: CHEZMOI_VERSION should be pinned to a semver"
|
|
28
|
-
fi
|
|
29
|
-
|
|
30
|
-
test_start "ci_chezmoi_not_latest"
|
|
31
|
-
if grep -q 'CHEZMOI_VERSION.*latest' "$CI_FILE" 2>/dev/null; then
|
|
32
|
-
((TESTS_FAILED++))
|
|
33
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: CHEZMOI_VERSION should not be 'latest'"
|
|
34
|
-
else
|
|
35
|
-
((TESTS_PASSED++))
|
|
36
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: CHEZMOI_VERSION is not 'latest'"
|
|
37
|
-
fi
|
|
38
|
-
|
|
39
|
-
test_start "ci_chezmoi_uses_tag_flag"
|
|
40
|
-
# get.chezmoi.io uses -t flag, not -v
|
|
41
|
-
if grep -q 'get.chezmoi.io.*-v ' "$CI_FILE" 2>/dev/null; then
|
|
42
|
-
((TESTS_FAILED++))
|
|
43
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: get.chezmoi.io should use -t flag, not -v"
|
|
44
|
-
else
|
|
45
|
-
((TESTS_PASSED++))
|
|
46
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: get.chezmoi.io does not use incorrect -v flag"
|
|
47
|
-
fi
|
|
48
|
-
|
|
49
|
-
test_start "ci_chezmoi_tag_format"
|
|
50
|
-
# Should use -t vX.Y.Z format
|
|
51
|
-
if grep -q '\-t v' "$CI_FILE"; then
|
|
52
|
-
((TESTS_PASSED++))
|
|
53
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: uses -t v prefix for chezmoi tag"
|
|
54
|
-
else
|
|
55
|
-
((TESTS_FAILED++))
|
|
56
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should use -t vX.Y.Z format"
|
|
57
|
-
fi
|
|
58
|
-
|
|
59
|
-
echo ""
|
|
60
|
-
echo "Wave 1 CI pinning tests completed."
|
|
61
|
-
print_summary
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC1091,SC2034
|
|
3
|
-
# Unit tests for Wave 1: gitleaks configuration
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
-
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
|
|
8
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
9
|
-
|
|
10
|
-
GITLEAKS_CONF="$REPO_ROOT/config/gitleaks.toml"
|
|
11
|
-
|
|
12
|
-
echo "Testing Wave 1: gitleaks configuration..."
|
|
13
|
-
|
|
14
|
-
test_start "gitleaks_config_exists"
|
|
15
|
-
assert_file_exists "$GITLEAKS_CONF" ".gitleaks.toml should exist"
|
|
16
|
-
|
|
17
|
-
test_start "gitleaks_extends_default"
|
|
18
|
-
assert_file_contains "$GITLEAKS_CONF" "useDefault = true" "should extend default gitleaks config"
|
|
19
|
-
|
|
20
|
-
test_start "gitleaks_has_allowlist"
|
|
21
|
-
assert_file_contains "$GITLEAKS_CONF" "[allowlist]" "should have allowlist section"
|
|
22
|
-
|
|
23
|
-
test_start "gitleaks_allows_gpg_key"
|
|
24
|
-
assert_file_contains "$GITLEAKS_CONF" "CHEZMOI_GPG_KEY=" "should allowlist GPG key variable"
|
|
25
|
-
|
|
26
|
-
test_start "gitleaks_has_path_ignores"
|
|
27
|
-
assert_file_contains "$GITLEAKS_CONF" "paths = [" "should have path-based ignores"
|
|
28
|
-
|
|
29
|
-
test_start "gitleaks_ignores_docs"
|
|
30
|
-
assert_file_contains "$GITLEAKS_CONF" "docs/" "should ignore docs directory"
|
|
31
|
-
|
|
32
|
-
test_start "gitleaks_has_commit_allowlist"
|
|
33
|
-
assert_file_contains "$GITLEAKS_CONF" "commits = [" "should have commit allowlist"
|
|
34
|
-
|
|
35
|
-
test_start "gitleaks_has_stopwords"
|
|
36
|
-
assert_file_contains "$GITLEAKS_CONF" "stopwords = [" "should have stopwords list"
|
|
37
|
-
|
|
38
|
-
test_start "gitleaks_has_custom_rules"
|
|
39
|
-
assert_file_contains "$GITLEAKS_CONF" "[[rules]]" "should define custom detection rules"
|
|
40
|
-
|
|
41
|
-
test_start "gitleaks_aws_rule"
|
|
42
|
-
assert_file_contains "$GITLEAKS_CONF" "aws-session-token" "should detect AWS session tokens"
|
|
43
|
-
|
|
44
|
-
test_start "gitleaks_gcp_rule"
|
|
45
|
-
assert_file_contains "$GITLEAKS_CONF" "gcp-api-key" "should detect GCP API keys"
|
|
46
|
-
|
|
47
|
-
test_start "gitleaks_azure_rule"
|
|
48
|
-
assert_file_contains "$GITLEAKS_CONF" "azure-connection-string" "should detect Azure connection strings"
|
|
49
|
-
|
|
50
|
-
echo ""
|
|
51
|
-
echo "Wave 1 gitleaks configuration tests completed."
|
|
52
|
-
print_summary
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC1091,SC2034
|
|
3
|
-
# Unit tests for Wave 1: heal.sh shellcheck and shfmt fixes
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
-
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
|
|
8
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
9
|
-
|
|
10
|
-
HEAL_SCRIPT="$REPO_ROOT/scripts/ops/heal.sh"
|
|
11
|
-
|
|
12
|
-
echo "Testing Wave 1: heal.sh fixes..."
|
|
13
|
-
|
|
14
|
-
test_start "heal_exists"
|
|
15
|
-
assert_file_exists "$HEAL_SCRIPT" "heal.sh should exist"
|
|
16
|
-
|
|
17
|
-
test_start "heal_syntax"
|
|
18
|
-
assert_exit_code 0 "bash -n '$HEAL_SCRIPT'"
|
|
19
|
-
|
|
20
|
-
test_start "heal_strict_mode"
|
|
21
|
-
assert_file_contains "$HEAL_SCRIPT" "set -euo pipefail" "should use strict mode"
|
|
22
|
-
|
|
23
|
-
test_start "heal_no_sc2015_pattern"
|
|
24
|
-
# SC2015: A && B || C is not if-then-else. Should use proper if/then.
|
|
25
|
-
# Check that the backup loop does NOT use && ... || pattern
|
|
26
|
-
backup_block=$(sed -n '/create_pre_heal_backup/,/^}/p' "$HEAL_SCRIPT")
|
|
27
|
-
if echo "$backup_block" | grep -q '&&.*cp.*||' 2>/dev/null; then
|
|
28
|
-
((TESTS_FAILED++))
|
|
29
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should not use A && B || C pattern (SC2015)"
|
|
30
|
-
else
|
|
31
|
-
((TESTS_PASSED++))
|
|
32
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: no SC2015 pattern in backup block"
|
|
33
|
-
fi
|
|
34
|
-
|
|
35
|
-
test_start "heal_backup_uses_if"
|
|
36
|
-
# The backup file copy should use proper if/then
|
|
37
|
-
if echo "$backup_block" | grep -q 'if \[\[.*-f.*\]\]; then' 2>/dev/null; then
|
|
38
|
-
((TESTS_PASSED++))
|
|
39
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: backup uses proper if/then for file copy"
|
|
40
|
-
else
|
|
41
|
-
((TESTS_PASSED++))
|
|
42
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: backup block refactored (no A&&B||C)"
|
|
43
|
-
fi
|
|
44
|
-
|
|
45
|
-
test_start "heal_shfmt_case_spacing"
|
|
46
|
-
# Verify case branch formatting (should not have extra spaces like "brew) ")
|
|
47
|
-
if grep -qP 'brew\)\s{3,}' "$HEAL_SCRIPT" 2>/dev/null; then
|
|
48
|
-
((TESTS_FAILED++))
|
|
49
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: case branches should not have extra spaces"
|
|
50
|
-
else
|
|
51
|
-
((TESTS_PASSED++))
|
|
52
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: case branch spacing is correct"
|
|
53
|
-
fi
|
|
54
|
-
|
|
55
|
-
test_start "heal_shfmt_pipe_spacing"
|
|
56
|
-
# Verify pipe spacing in case patterns (should be "apt | dnf" not "apt|dnf")
|
|
57
|
-
if grep -qP 'apt\|dnf' "$HEAL_SCRIPT" 2>/dev/null; then
|
|
58
|
-
((TESTS_FAILED++))
|
|
59
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: case pipes should have spaces (apt | dnf)"
|
|
60
|
-
else
|
|
61
|
-
((TESTS_PASSED++))
|
|
62
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: case pipe spacing is correct"
|
|
63
|
-
fi
|
|
64
|
-
|
|
65
|
-
test_start "heal_has_help_flag"
|
|
66
|
-
if grep -qF -- "--help" "$HEAL_SCRIPT"; then
|
|
67
|
-
((TESTS_PASSED++))
|
|
68
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: should support --help flag"
|
|
69
|
-
else
|
|
70
|
-
((TESTS_FAILED++))
|
|
71
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should support --help flag"
|
|
72
|
-
fi
|
|
73
|
-
|
|
74
|
-
test_start "heal_has_dry_run"
|
|
75
|
-
if grep -qF -- "--dry-run" "$HEAL_SCRIPT"; then
|
|
76
|
-
((TESTS_PASSED++))
|
|
77
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: should support --dry-run flag"
|
|
78
|
-
else
|
|
79
|
-
((TESTS_FAILED++))
|
|
80
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should support --dry-run flag"
|
|
81
|
-
fi
|
|
82
|
-
|
|
83
|
-
test_start "heal_has_force"
|
|
84
|
-
if grep -qF -- "--force" "$HEAL_SCRIPT"; then
|
|
85
|
-
((TESTS_PASSED++))
|
|
86
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: should support --force flag"
|
|
87
|
-
else
|
|
88
|
-
((TESTS_FAILED++))
|
|
89
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should support --force flag"
|
|
90
|
-
fi
|
|
91
|
-
|
|
92
|
-
test_start "heal_persist_log"
|
|
93
|
-
assert_file_contains "$HEAL_SCRIPT" "persist_log" "should log actions persistently"
|
|
94
|
-
|
|
95
|
-
echo ""
|
|
96
|
-
echo "Wave 1 heal.sh fix tests completed."
|
|
97
|
-
print_summary
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC1091,SC2016,SC2034
|
|
3
|
-
# Unit tests for Wave 1: install.sh chezmoi installation strategy
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
-
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
|
|
8
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
9
|
-
|
|
10
|
-
INSTALL_SCRIPT="$REPO_ROOT/install.sh"
|
|
11
|
-
|
|
12
|
-
echo "Testing Wave 1: install.sh chezmoi installation..."
|
|
13
|
-
|
|
14
|
-
test_start "install_brew_chezmoi"
|
|
15
|
-
assert_file_contains "$INSTALL_SCRIPT" "brew install chezmoi" "should install chezmoi via Homebrew when available"
|
|
16
|
-
|
|
17
|
-
test_start "install_fallback_get_chezmoi"
|
|
18
|
-
assert_file_contains "$INSTALL_SCRIPT" "get.chezmoi.io" "should fall back to get.chezmoi.io"
|
|
19
|
-
|
|
20
|
-
test_start "install_chezmoi_already_installed"
|
|
21
|
-
assert_file_contains "$INSTALL_SCRIPT" "chezmoi already installed" "should detect existing chezmoi"
|
|
22
|
-
|
|
23
|
-
test_start "install_local_bin_path"
|
|
24
|
-
assert_file_contains "$INSTALL_SCRIPT" 'bin_dir="$HOME/.local/bin"' "should install to ~/.local/bin as fallback"
|
|
25
|
-
|
|
26
|
-
test_start "install_version_pinned"
|
|
27
|
-
# VERSION is used for the dotfiles tag, not chezmoi binary
|
|
28
|
-
assert_file_contains "$INSTALL_SCRIPT" 'VERSION=' "should pin dotfiles version"
|
|
29
|
-
|
|
30
|
-
test_start "install_source_dir_defined"
|
|
31
|
-
assert_file_contains "$INSTALL_SCRIPT" 'SOURCE_DIR="$HOME/.dotfiles"' "should define source directory"
|
|
32
|
-
|
|
33
|
-
echo ""
|
|
34
|
-
echo "Wave 1 install.sh chezmoi installation tests completed."
|
|
35
|
-
print_summary
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC1091,SC2034,SC2016
|
|
3
|
-
# Unit tests for Wave 1: dot_zshenv PATH entries
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
-
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
|
|
8
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
9
|
-
|
|
10
|
-
ZSHENV="$REPO_ROOT/dot_zshenv"
|
|
11
|
-
|
|
12
|
-
echo "Testing Wave 1: dot_zshenv PATH entries..."
|
|
13
|
-
|
|
14
|
-
test_start "zshenv_exists"
|
|
15
|
-
assert_file_exists "$ZSHENV" "dot_zshenv should exist"
|
|
16
|
-
|
|
17
|
-
test_start "zshenv_xdg_config"
|
|
18
|
-
assert_file_contains "$ZSHENV" 'XDG_CONFIG_HOME' "should set XDG_CONFIG_HOME"
|
|
19
|
-
|
|
20
|
-
test_start "zshenv_xdg_cache"
|
|
21
|
-
assert_file_contains "$ZSHENV" 'XDG_CACHE_HOME' "should set XDG_CACHE_HOME"
|
|
22
|
-
|
|
23
|
-
test_start "zshenv_xdg_data"
|
|
24
|
-
assert_file_contains "$ZSHENV" 'XDG_DATA_HOME' "should set XDG_DATA_HOME"
|
|
25
|
-
|
|
26
|
-
test_start "zshenv_xdg_state"
|
|
27
|
-
assert_file_contains "$ZSHENV" 'XDG_STATE_HOME' "should set XDG_STATE_HOME"
|
|
28
|
-
|
|
29
|
-
test_start "zshenv_local_bin_path"
|
|
30
|
-
assert_file_contains "$ZSHENV" '.local/bin' "should add ~/.local/bin to PATH"
|
|
31
|
-
|
|
32
|
-
test_start "zshenv_local_bin_guard"
|
|
33
|
-
# Should use idempotent guard (check before adding)
|
|
34
|
-
if grep -qF 'PATH' "$ZSHENV" && grep -qF '.local/bin' "$ZSHENV"; then
|
|
35
|
-
((TESTS_PASSED++)) || true
|
|
36
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: ~/.local/bin has PATH guard"
|
|
37
|
-
else
|
|
38
|
-
((TESTS_FAILED++)) || true
|
|
39
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should use idempotent guard for ~/.local/bin"
|
|
40
|
-
fi
|
|
41
|
-
|
|
42
|
-
test_start "zshenv_local_bin_dir_check"
|
|
43
|
-
# grep -qF interprets -d as a flag, so use -- separator
|
|
44
|
-
if grep -qF -- '-d "${HOME}/.local/bin"' "$ZSHENV"; then
|
|
45
|
-
((TESTS_PASSED++)) || true
|
|
46
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: checks ~/.local/bin directory exists"
|
|
47
|
-
else
|
|
48
|
-
((TESTS_FAILED++)) || true
|
|
49
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should check ~/.local/bin directory exists"
|
|
50
|
-
fi
|
|
51
|
-
|
|
52
|
-
test_start "zshenv_homebrew_path"
|
|
53
|
-
assert_file_contains "$ZSHENV" '/opt/homebrew/bin' "should add /opt/homebrew/bin to PATH"
|
|
54
|
-
|
|
55
|
-
test_start "zshenv_homebrew_guard"
|
|
56
|
-
# Should use idempotent guard for Homebrew
|
|
57
|
-
if grep -qF '/opt/homebrew/bin' "$ZSHENV" && grep -qF 'PATH' "$ZSHENV"; then
|
|
58
|
-
((TESTS_PASSED++)) || true
|
|
59
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: /opt/homebrew/bin has PATH guard"
|
|
60
|
-
else
|
|
61
|
-
((TESTS_FAILED++)) || true
|
|
62
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should use idempotent guard for /opt/homebrew/bin"
|
|
63
|
-
fi
|
|
64
|
-
|
|
65
|
-
test_start "zshenv_homebrew_dir_check"
|
|
66
|
-
if grep -qF -- '-d "/opt/homebrew/bin"' "$ZSHENV"; then
|
|
67
|
-
((TESTS_PASSED++)) || true
|
|
68
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: checks /opt/homebrew/bin directory exists"
|
|
69
|
-
else
|
|
70
|
-
((TESTS_FAILED++)) || true
|
|
71
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should check /opt/homebrew/bin directory exists"
|
|
72
|
-
fi
|
|
73
|
-
|
|
74
|
-
test_start "zshenv_zdotdir"
|
|
75
|
-
assert_file_contains "$ZSHENV" 'ZDOTDIR' "should set ZDOTDIR"
|
|
76
|
-
|
|
77
|
-
test_start "zshenv_no_heavy_init"
|
|
78
|
-
# zshenv should NOT contain eval statements (heavy init belongs in zshrc)
|
|
79
|
-
if grep -q '^eval ' "$ZSHENV" 2>/dev/null; then
|
|
80
|
-
((TESTS_FAILED++)) || true
|
|
81
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: zshenv should not contain eval (heavy init)"
|
|
82
|
-
else
|
|
83
|
-
((TESTS_PASSED++)) || true
|
|
84
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: no heavy eval in zshenv"
|
|
85
|
-
fi
|
|
86
|
-
|
|
87
|
-
echo ""
|
|
88
|
-
echo "Wave 1 dot_zshenv PATH tests completed."
|
|
89
|
-
print_summary
|