aboutsummaryrefslogtreecommitdiff
#!/bin/sh
set -u

. tests/lib.sh

TESTDIR="$(mkdtemp)"
cp -R . "$TESTDIR"
cd "$TESTDIR" || exit

TEST_PREFIX="$PWD/tests/prefix/$(uuid)"
make                       clean   >/dev/null
make PREFIX="$TEST_PREFIX" install >/dev/null
PATH="$PWD/tests:$TEST_PREFIX/bin:$PATH"

if ! git config --global user.email > /dev/null; then
	git config --global user.email email@example.com
fi
if ! git config --global user.name > /dev/null; then
	git config --global user.name Example
fi

new_repo() {
	REPO="$PWD/tests/remotes/$(uuid)"
	mkdir -p "$REPO"
	cd "$REPO" || exit 1
	git init 1>/dev/null 2>/dev/null || {
		git config --global init.defaultBranch

	}
	git remote add origin "$1"
	echo '' > f.txt
	git add f.txt
	git commit -qam f.txt
}

test_supported_remotes() {
	testing 'supported remotes'

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	new_repo git://euandreh.xyz/remembering
	LANG=POSIX git permalink README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 0
	assert_empty_stdout
	assert_fgrep_stderr 'Opening https://euandreh.xyz'
	assert_fgrep_stderr 'xdg-open: https://euandreh.xyz'
	cd - > /dev/null || exit 1

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	new_repo https://git.sr.ht/~sircmpwn/ctools
	git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 0
	assert_fgrep_stdout 'https://git.sr.ht'
	assert_empty_stderr
	cd - > /dev/null || exit 1

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	new_repo https://git.kernel.org/pub/scm/git/git.git
	LANG=POSIX git permalink README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 0
	assert_empty_stdout
	assert_fgrep_stderr 'Opening https://git.kernel.org'
	assert_fgrep_stderr 'xdg-open: https://git.kernel.org'
	cd - > /dev/null || exit 1

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	new_repo https://git.savannah.gnu.org/guix.git
	git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 0
	assert_fgrep_stdout 'https://git.savannah.gnu.org'
	assert_empty_stderr
	cd - > /dev/null || exit 1

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	new_repo https://notabug.org/cwebber/guile-gcrypt
	LANG=POSIX git permalink README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 0
	assert_empty_stdout
	assert_fgrep_stderr 'Opening https://notabug.org'
	assert_fgrep_stderr 'xdg-open: https://notabug.org'
	cd - > /dev/null || exit 1

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	new_repo https://codeberg.org/dnkl/yambar
	git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 0
	assert_fgrep_stdout 'https://codeberg.org'
	assert_empty_stderr
	cd - > /dev/null || exit 1

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	new_repo https://bitbucket.org/uprojects/jsmn
	LANG=POSIX git permalink README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 0
	assert_empty_stdout
	assert_fgrep_stderr 'Opening https://bitbucket.org'
	assert_fgrep_stderr 'xdg-open: https://bitbucket.org'
	cd - > /dev/null || exit 1

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	new_repo https://pagure.io/aquedoc
	git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 0
	assert_fgrep_stdout 'https://pagure.io'
	assert_empty_stderr
	cd - > /dev/null || exit 1

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	new_repo https://gitlab.com/nonguix/nonguix
	LANG=POSIX git permalink README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 0
	assert_empty_stdout
	assert_fgrep_stderr 'Opening https://gitlab.com/nonguix/nonguix'
	assert_fgrep_stderr 'xdg-open: https://gitlab.com/nonguix/nonguix'
	cd - > /dev/null || exit 1

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	new_repo https://github.com/skeeto/elfeed
	git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 0
	assert_fgrep_stdout 'https://github.com'
	assert_empty_stderr
	cd - > /dev/null || exit 1

	test_ok
}

test_unsupported_remote() {
	testing 'unsupported remotes'

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	new_repo https://example.com/a/b
	LANG=POSIX git permalink README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 1
	assert_empty_stdout
	assert_fgrep_stderr 'Unsupported origin: https://example.com'

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	git config git-permalink.template-commit-file \
		'before %s middle %s after'
	git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 0
	assert_grep_stdout 'before .+ middle README.md after'
	assert_empty_stderr

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	git config --unset git-permalink.template-commit-file
	git config         git-permalink.template-file-commit \
		'before %s middle %s after'
	git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 0
	assert_grep_stdout 'before README.md middle .+ after'
	assert_empty_stderr

	N="$LINENO"
	OUT="$(mkstemp)"
	ERR="$(mkstemp)"
	git config --unset git-permalink.template-file-commit
	LANG=POSIX git permalink -p README.md 123 1>"$OUT" 2>"$ERR"
	STATUS=$?
	assert_status 1
	assert_empty_stdout
	assert_fgrep_stderr 'Unsupported origin: https://example.com'

	test_ok
}

test_supported_remotes
test_unsupported_remote