#!/bin/sh

FILE="$NVM_DIR/default-packages"

die () { echo "$@" ; cleanup ; exit 1; }
setup () {
  if [ -f $FILE ]; then
    ORIG_DEFAULT_PACKAGES=$(cat $FILE)
    mkdir ./tmp/ ||:
    mv $FILE ./tmp/default-packages ||:
  fi
  touch $FILE
}
cleanup () {
  rm -rf "$(nvm_version_path v6.10.1)" $FILE
  if [ "$ORIG_DEFAULT_PACKAGES" != "" ]; then
    rm -rf ./tmp/
    echo "$ORIG_DEFAULT_PACKAGES" > $FILE
  fi
}

setup

\. ../../nvm.sh

cat > $FILE << EOF
rimraf
object-inspect@1.0.2

# commented-package

stevemao/left-pad
daytime
EOF

printf %s "$(cat "${FILE}")" > $FILE # strip trailing newline

nvm install v6.10.1 2>&1
EXIT_CODE=$?
[ "_$EXIT_CODE" = "_0" ] || die "expected 'nvm install v6.10.1' to exit with 0, got $EXIT_CODE"

nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'rimraf'
if [ -z "$?" ]; then
  die "expected 'nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'rimraf'' to exit with 0, got $?"
fi

nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'daytime'
if [ -z "$?" ]; then
  die "expected 'nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'daytime'' to exit with 0, got $?"
fi

cleanup

setup

\. ../../nvm.sh

cat > $FILE << EOF
rimraf
object-inspect@1.0.2

# commented-package

stevemao/left-pad
EOF

nvm install v6.10.1 --skip-default-packages 2>&1
EXIT_CODE=$?
[ "_$EXIT_CODE" = "_0" ] || die "expected 'nvm install v6.10.1' to exit with 0, got $EXIT_CODE"

if nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'rimraf'; then
  die "expected 'nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'rimraf'' to be empty"
fi

cleanup

setup

cat > $FILE << EOF
not~a~package~name
EOF

nvm install v6.10.1
EXIT_CODE=$?
[ "_$EXIT_CODE" = "_0" ] || die "expected 'nvm install v6.10.1' to exit with 0, got $EXIT_CODE"

if nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'not~a~package~name'; then
  die "expected 'nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'not~a~package~name'' to exit with 1, got $?"
fi

cleanup

setup

cat > $FILE << EOF
object-inspect @ 1.0.2
EOF

nvm install v6.10.1 2>&1
EXIT_CODE=$?
[ "_$EXIT_CODE" = "_1" ] || die "expected 'nvm install v6.10.1' to exit with 1, got $EXIT_CODE"

if nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'object-inspect'; then
  die "expected 'nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'object-inspect'' to exit with 1, got $?"
fi

cleanup

setup

rm -rf $FILE

nvm install v6.10.1 2>&1
EXIT_CODE=$?
[ "_$EXIT_CODE" = "_0" ] || die "expected 'nvm install v6.10.1' to exit with 0, got $EXIT_CODE"

if nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'object-inspect'; then
  die "expected 'nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'object-inspect'' to exit with 1, got $?"
fi

touch $FILE

cleanup