aboutsummaryrefslogtreecommitdiff
path: root/tests
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rwxr-xr-xtests/t0106-diff.sh82
-rw-r--r--tests/t0114-broken-repo.sh71
2 files changed, 153 insertions, 0 deletions
diff --git a/tests/t0106-diff.sh b/tests/t0106-diff.sh
index 82b645e..1100596 100755
--- a/tests/t0106-diff.sh
+++ b/tests/t0106-diff.sh
@@ -16,4 +16,86 @@ test_expect_success 'find added line' '
grep "<div class=.add.>+5</div>" tmp
'
+test_expect_success 'ref picker: from: select present' '
+ grep "<select name=.id2." tmp
+'
+
+test_expect_success 'ref picker: to: select present' '
+ grep "<select name=.id." tmp
+'
+
+test_expect_success 'ref picker: from: label present' '
+ grep "from:" tmp
+'
+
+test_expect_success 'ref picker: to: label present' '
+ grep "to:" tmp
+'
+
+test_expect_success 'ref pickers live in a separate refs panel' '
+ grep "<b>diff refs</b>" tmp &&
+ grep "<b>diff options</b>" tmp
+'
+
+test_expect_success 'ref picker: master branch listed' '
+ grep "master" tmp
+'
+
+test_expect_success 'ref picker: auto-submit on change' '
+ grep "onchange=.this.form.submit()." tmp
+'
+
+test_expect_success 'flip link present' '
+ grep "<a title=.swap from and to. class=.button. href=./foo/diff/?" tmp
+'
+
+test_expect_success 'flip link swaps the default refs' '
+ old=$(git --git-dir="$PWD/repos/foo/.git" rev-parse master~1) &&
+ grep "/foo/diff/?id=$old&amp;id2=master" tmp
+'
+
+test_expect_success 'compare two refs: foo/diff?id=master&id2=HEAD' '
+ cgit_query "url=foo/diff&id=master&id2=HEAD" >tmp
+'
+
+test_expect_success 'diff with explicit refs shows diffstat' '
+ grep "diffstat" tmp
+'
+
+test_expect_success 'diff with oid2 parameter uses it for old ref' '
+ cgit_query "url=foo/diff&id=master&id2=HEAD" >tmp &&
+ grep "from:" tmp
+'
+
+test_expect_success 'ref picker: to: shows master when id=master' '
+ cgit_query "url=foo/diff&id=master" >tmp &&
+ grep "master" tmp
+'
+
+test_expect_success 'ref picker: from: empty when no id2' '
+ cgit_query "url=foo/diff" >tmp &&
+ grep "<select name=.id2." tmp
+'
+
+test_expect_success 'compare initial commit with HEAD' '
+ root=$(git --git-dir="$PWD/repos/foo/.git" rev-list --max-parents=0 HEAD) &&
+ cgit_query "url=foo/diff&id=HEAD&id2=$root" >tmp
+'
+
+test_expect_success 'diff with HEAD and root shows content' '
+ grep "diffstat" tmp
+'
+
+test_expect_success 'flip link swaps explicit refs' '
+ cgit_query "url=foo/diff&id=master&id2=HEAD" >tmp &&
+ new=$(git --git-dir="$PWD/repos/foo/.git" rev-parse HEAD) &&
+ grep "/foo/diff/?id=$new&amp;id2=master" tmp
+'
+
+test_expect_success 'flip link omits id for a diff against a root commit' '
+ root=$(git --git-dir="$PWD/repos/foo/.git" rev-list --max-parents=0 HEAD) &&
+ cgit_query "url=foo/diff&id=$root" >tmp &&
+ grep "href=./foo/diff/?id2=$root." tmp
+'
+
test_done
diff --git a/tests/t0114-broken-repo.sh b/tests/t0114-broken-repo.sh
new file mode 100644
index 0000000..61367e6
--- /dev/null
+++ b/tests/t0114-broken-repo.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+test_description='Check that a misconfigured repo.path is reported'
+. ./setup.sh
+
+mkdir -p plaindir
+
+cat >cgitrc.broken <<EOF
+virtual-root=/
+cache-root=$PWD/cache
+cache-size=0
+
+ci-branch-url=https://ci.example.org/job/\$slug/job/\$ref
+
+repo.url=missing
+repo.path=$PWD/no/such/repo.git
+
+repo.url=notarepo
+repo.path=$PWD/plaindir
+EOF
+
+# cgit used to spin forever on these requests, so give it a deadline and
+# report a failure rather than hanging the test suite.
+cgit_broken()
+{
+ CGIT_CONFIG="$PWD/cgitrc.broken" QUERY_STRING="url=$1" perl -e '
+ my $pid = fork();
+ if ($pid == 0) {
+ exec("cgit") or die "exec: $!";
+ }
+ eval {
+ local $SIG{ALRM} = sub { die "timeout\n" };
+ alarm(20);
+ waitpid($pid, 0);
+ alarm(0);
+ };
+ if ($@) {
+ kill "KILL", $pid;
+ print STDERR "cgit did not terminate\n";
+ exit 1;
+ }
+ ' </dev/null
+}
+
+test_expect_success 'report a repo.path that does not exist' '
+ cgit_broken "missing/&h=master" >tmp &&
+ grep "Failed to open missing" tmp
+'
+
+test_expect_success 'report a repo.path that is not a repository' '
+ cgit_broken "notarepo/&h=master" >tmp &&
+ grep "Failed to open notarepo" tmp
+'
+
+test_expect_success 'report an unknown page for a broken repo' '
+ cgit_broken "missing/nosuchpage/&h=master" >tmp &&
+ grep "^Status: 404 Not found$" tmp &&
+ grep "Invalid request" tmp
+'
+
+test_expect_success 'no ci tab for a broken repo' '
+ cgit_broken "missing/nosuchpage/&h=master" >tmp &&
+ ! grep ">ci</a>" tmp
+'
+
+test_expect_success 'report a broken repo on the ci page' '
+ cgit_broken "missing/ci/&h=master" >tmp &&
+ grep "Failed to open missing" tmp
+'
+
+test_done