From 61d32c03c4b290ac032ad291174ec8eb54900600 Mon Sep 17 00:00:00 2001 From: duongynhi000005-oss Date: Tue, 26 May 2026 00:35:29 +0000 Subject: [PATCH] Add BATS test setup for node-reinstall --- .travis.yml | 8 ++++ Makefile | 3 ++ README.md | 8 ++++ test/node-reinstall.bats | 92 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 .travis.yml create mode 100644 test/node-reinstall.bats diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..887b09a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,8 @@ +language: bash + +before_script: + - git clone --depth 1 https://github.com/bats-core/bats-core.git + - sudo bats-core/install.sh /usr/local + +script: + - bats test/node-reinstall.bats diff --git a/Makefile b/Makefile index 3b5077a..2f42485 100644 --- a/Makefile +++ b/Makefile @@ -15,3 +15,6 @@ readme: echo "## Commands" >> README.md echo '' >> README.md ./node-reinstall -h | sed -n -e '/Commands:/,// p' | tail -n +3 >> README.md + +test: + bats test/node-reinstall.bats diff --git a/README.md b/README.md index 93ebe77..8a5b8da 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,14 @@ Whenever you feel like you need to completely re-install Node and NPM, simply ex Usage: node-reinstall [--nave|--nvm|--nvm-latest] [-h|--help] [-v|--version] [NODE_VERSION] +## Test + +Run the BATS suite with: + +```bash +make test +``` + ## Commands node-reinstall re-install node and npm using nvm diff --git a/test/node-reinstall.bats b/test/node-reinstall.bats new file mode 100644 index 0000000..03b59f5 --- /dev/null +++ b/test/node-reinstall.bats @@ -0,0 +1,92 @@ +#!/usr/bin/env bats + +setup() { + TMPROOT="$(mktemp -d)" + export HOME="$TMPROOT/home" + export PREFIX="$TMPROOT/prefix" + export PATH="$TMPROOT/mock-bin:$PATH" + export LOGDIR="$TMPROOT/logs" + + mkdir -p "$HOME" "$PREFIX/bin" "$TMPROOT/mock-bin" "$LOGDIR" + + cat >"$TMPROOT/mock-bin/sudo" <<'EOF' +#!/usr/bin/env bash +exit 0 +EOF + chmod +x "$TMPROOT/mock-bin/sudo" + + cat >"$TMPROOT/mock-bin/rm" <<'EOF' +#!/usr/bin/env bash +exit 0 +EOF + chmod +x "$TMPROOT/mock-bin/rm" + + cat >"$TMPROOT/mock-bin/node" <<'EOF' +#!/usr/bin/env bash +echo "v18.19.0" +EOF + chmod +x "$TMPROOT/mock-bin/node" + + cat >"$TMPROOT/mock-bin/which" <<'EOF' +#!/usr/bin/env bash +if [[ "${1:-}" == "npm" ]]; then + exit 1 +fi +command -v "$1" +EOF + chmod +x "$TMPROOT/mock-bin/which" + + cat >"$TMPROOT/mock-bin/curl" <<'EOF' +#!/usr/bin/env bash +out="" +for ((i=1; i<=$#; i++)); do + if [[ "${!i}" == "-o" ]]; then + j=$((i + 1)) + out="${!j}" + fi +done + +if [[ -n "$out" ]]; then + cat >"$out" <<'SH' +#!/usr/bin/env bash +exit 0 +SH + chmod +x "$out" + exit 0 +fi + +echo '{"tag_name":"v0.39.7"}' +EOF + chmod +x "$TMPROOT/mock-bin/curl" + + cat >"$TMPROOT/mock-bin/nave" <>"$LOGDIR/nave.log" +exit 0 +EOF + chmod +x "$TMPROOT/mock-bin/nave" +} + +teardown() { + rm -rf "$TMPROOT" +} + +@test "help prints usage" { + run bash ./node-reinstall --help + [ "$status" -eq 0 ] + [[ "$output" == *"Usage:"* ]] +} + +@test "version prints version" { + run bash ./node-reinstall --version + [ "$status" -eq 0 ] + [ "$output" = "0.0.17" ] +} + +@test "force nave path completes with mocked externals" { + run bash ./node-reinstall --force --nave 18.19.0 + [ "$status" -eq 0 ] + [[ "$output" == *"node-reinstall is done."* ]] + [ -f "$LOGDIR/nave.log" ] + grep -q 'usemain v18.19.0' "$LOGDIR/nave.log" +}