#!/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" &&
                                         echo "_\$_PROFILE: _$_PROFILE" &&
                                         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" &&
                                        echo "_\$_PROFILE: _$_PROFILE" &&
                                        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" &&
                                    echo "_\$PROFILE: _$PROFILE" &&
                                    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" &&
                                     echo "_\$PROFILE: _$PROFILE" &&
                                     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" &&
                                          echo "_\$PROFILE: _$PROFILE" &&
                                          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" &&
                                         echo "_\$PROFILE: _$PROFILE" &&
                                         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" &&
                                               echo "_\$PROFILE: _$PROFILE" &&
                                               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" &&
                                        echo "_\$PROFILE: _$PROFILE" &&
                                        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" &&
                        echo "_\$PROFILE: _$PROFILE" &&
                        die "nvm_detect_profile should have echo'ed an empty value" )


cleanup
