#!/bin/sh

cleanup () {
  unset -f setup cleanup die
  unset _PROFILE
  rm -f .bashrc .bash_profile .zshrc .profile test_profile > /dev/null 2>&1
}
die () { echo $@ ; cleanup ; exit 1; }

NVM_ENV=testing . ../../install.sh

setup () {
  touch .bashrc
  touch .bash_profile
  touch .zshrc
  touch .profile
  touch test_profile
}

#Let's hack $HOME
HOME="."

setup

#Let's force $SHELL to be bash
SHELL="/bin/bash"

# $SHELL is set to bash and .bashrc is there, it must be detected
_PROFILE=$(nvm_detect_profile)
[ "_$_PROFILE" = "_$HOME/.bashrc" ] || echo "_\$HOME/.bashrc: _$HOME/.bashrc\n" \
                                       echo "_\$_PROFILE: _$_PROFILE\n" \
                                       die "nvm_detect_profile didn't pick $SHELL and $HOME/.bashrc"

#Let's force $SHELL to be zsh
SHELL="/usr/bin/zsh"

# $SHELL is set to zsh and .zshrc is there, it must be detected
_PROFILE=$(nvm_detect_profile)
[ "_$_PROFILE" = "_$HOME/.zshrc" ] || echo "_\$HOME/.zshrc: _$HOME/.zshrc\n" \
                                      echo "_\$_PROFILE: _$_PROFILE\n" \
                                      die "nvm_detect_profile didn't pick $SHELL and $HOME/.zshrc"


# if we unset shell it looks for the files
unset SHELL

# $PROFILE points to a valid file, its path must be returned
PROFILE="test_profile"
_PROFILE=$(nvm_detect_profile)
[ "_$_PROFILE" = "_$PROFILE" ] || echo "_\$_PROFILE: _$_PROFILE\n" \
                                  echo "_\$PROFILE: _$PROFILE\n" \
                                  die "nvm_detect_profile didn't pick \$PROFILE"

# $PROFILE doesn't point to a valid file, its path must not be returned
PROFILE="invalid_profile"
_PROFILE=$(nvm_detect_profile)
[ "_$_PROFILE" != "_$PROFILE" ] || echo "_\$_PROFILE: _$_PROFILE\n" \
                                   echo "_\$PROFILE: _$PROFILE\n" \
                                   die "nvm_detect_profile shouldn't pick \$PROFILE when it's not a valid file"


# Below are tests for when $PROFILE is undefined
rm test_profile
unset PROFILE

# It should favor .profile if file exists
_PROFILE=$(nvm_detect_profile)
[ "_$_PROFILE" = "_$HOME/.profile" ] || echo "_\$_PROFILE: _$_PROFILE\n" \
                                        echo "_\$PROFILE: _$PROFILE\n" \
                                        die "nvm_detect_profile should have selected .profile"

rm .profile
# Otherwise, it should favor .bashrc if file exists
_PROFILE=$(nvm_detect_profile)
[ "_$_PROFILE" = "_$HOME/.bashrc" ] || echo "_\$_PROFILE: _$_PROFILE\n" \
                                       echo "_\$PROFILE: _$PROFILE\n" \
                                       die "nvm_detect_profile should have selected .bashrc"

rm .bashrc
# Otherwise, it should favor .bash_profile if file exists
_PROFILE=$(nvm_detect_profile)
[ "_$_PROFILE" = "_$HOME/.bash_profile" ] || echo "_\$_PROFILE: _$_PROFILE\n" \
                                             echo "_\$PROFILE: _$PROFILE\n" \
                                             die "nvm_detect_profile should have selected .bash_profile"

rm .bash_profile
# Otherwise, it should favor .zshrc if file exists
_PROFILE=$(nvm_detect_profile)
[ "_$_PROFILE" = "_$HOME/.zshrc" ] || echo "_\$_PROFILE: _$_PROFILE\n" \
                                      echo "_\$PROFILE: _$PROFILE\n" \
                                      die "nvm_detect_profile should have selected .zshrc"

rm .zshrc
# It should be empty if none is found
_PROFILE=$(nvm_detect_profile)
[ -z "$_PROFILE" ] || echo "_\$_PROFILE: _$_PROFILE\n" \
                      echo "_\$PROFILE: _$PROFILE\n" \
                      die "nvm_detect_profile should have echo'ed an empty value"


cleanup
