Diffstat (limited to 'tests')
| -rwxr-xr-x | tests/t0106-diff.sh | 129 | ||||
| -rw-r--r-- | tests/t0114-broken-repo.sh | 71 |
2 files changed, 200 insertions, 0 deletions
diff --git a/tests/t0106-diff.sh b/tests/t0106-diff.sh index 82b645e..0e45087 100755 --- a/tests/t0106-diff.sh +++ b/tests/t0106-diff.sh @@ -16,4 +16,133 @@ 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' ' + grep "/foo/diff/?id2=master&idoff=1" 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 && + grep "/foo/diff/?id=HEAD&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_expect_success 'offset input: to: present' ' + grep "name=.idoff." tmp +' + +test_expect_success 'offset input: from: present' ' + grep "name=.id2off." tmp +' + +test_expect_success 'apply button present' ' + grep "value=.apply." tmp +' + +test_expect_success 'offset: idoff steps back the to ref' ' + cgit_query "url=foo/diff&id=master&idoff=1" >tmp && + grep "a/file-4 b/file-4" tmp +' + +test_expect_success 'offset: id2off steps back the from ref' ' + cgit_query "url=foo/diff&id=master&id2=master&id2off=2" >tmp && + grep "a/file-5 b/file-5" tmp +' + +test_expect_success 'offset: filled input and hidden field' ' + cgit_query "url=foo/diff&id=master&idoff=1" >tmp && + grep "title=.N commits back from the selected ref. value=.1.>" tmp && + grep "type=.hidden. name=.idoff. value=.1./>" tmp +' + +test_expect_success 'offset: too large 404s with the stepped rev' ' + cgit_query "url=foo/diff&id=master&id2=master&id2off=9" >tmp && + grep "Bad object name: master~9" tmp +' + +test_expect_success 'empty id2 does not 404' ' + cgit_query "url=foo/diff&id=master&id2=" >tmp && + grep "diffstat" tmp && + ! grep "Bad object name" tmp +' + +test_expect_success 'file link carries the offsets' ' + cgit_query "url=foo/diff&id=master&id2=master&id2off=2" >tmp && + grep "/foo/diff/file-5?id2=master&id2off=2" tmp +' + +test_expect_success 'flip link carries the offsets' ' + cgit_query "url=foo/diff&id=master&id2=master&idoff=1&id2off=2" >tmp && + grep "/foo/diff/?id2=master&idoff=2&id2off=1" 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 |