diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/t0112-ci.sh | 44 | ||||
| -rw-r--r-- | tests/t0113-ci-lua.sh | 78 |
2 files changed, 122 insertions, 0 deletions
diff --git a/tests/t0112-ci.sh b/tests/t0112-ci.sh index d8673e4..33609d6 100644 --- a/tests/t0112-ci.sh +++ b/tests/t0112-ci.sh @@ -10,6 +10,7 @@ cat >cgitrc.ci <<EOF virtual-root=/ cache-root=$PWD/cache cache-size=0 +enable-filter-overrides=1 repo.url=tagonly repo.path=$PWD/repos/foo/.git @@ -27,8 +28,20 @@ repo.path=$PWD/repos/foo/.git repo.url=override repo.path=$PWD/repos/foo/.git repo.ci-url=https://ci.example.org/override/\$repo/\$\$/\$ref + +repo.url=filtered +repo.path=$PWD/repos/foo/.git +repo.ci-filter=exec:$PWD/ci-filter.sh EOF +# Records its arguments and only accepts tags. +cat >ci-filter.sh <<EOF +#!/bin/sh +printf '%s|%s|%s\n' "\$1" "\$2" "\$3" >>"$PWD/ci-filter.log" +test "\$2" = tag +EOF +chmod +x ci-filter.sh + git --git-dir="$PWD/repos/foo/.git" tag v0.17.3.2 master cgit_ci() @@ -80,4 +93,35 @@ test_expect_success 'no ci tab without a ci url' ' ! grep ">ci</a>" tmp ' +test_expect_success 'ci filter accepts a tag' ' + rm -f ci-filter.log && + cgit_ci "filtered/ci&h=v0.17.3.2" >tmp && + grep "^Location: https://ci.example.org/job/filtered/view/tags/job/v0.17.3.2$" tmp && + echo "v0.17.3.2|tag|https://ci.example.org/job/filtered/view/tags/job/v0.17.3.2" >expected && + test_cmp expected ci-filter.log +' + +test_expect_success 'ci filter rejects a branch' ' + rm -f ci-filter.log && + cgit_ci "filtered/ci&h=master" >tmp && + grep "^Status: 404 Not found$" tmp && + echo "master|branch|https://ci.example.org/job/filtered/job/master" >expected && + test_cmp expected ci-filter.log +' + +test_expect_success "ci filter hides the tab and is consulted once" ' + rm -f ci-filter.log && + cgit_ci "filtered/refs&h=master" >tmp && + ! grep ">ci</a>" tmp && + test_line_count = 1 ci-filter.log && + cgit_ci "filtered/refs&h=v0.17.3.2" >tmp && + grep "href=./filtered/ci/?h=v0.17.3.2.>ci</a>" tmp +' + +test_expect_success 'ci filter is not consulted without a ci url' ' + rm -f ci-filter.log && + cgit_url "foo/refs" >tmp && + test_path_is_missing ci-filter.log +' + test_done diff --git a/tests/t0113-ci-lua.sh b/tests/t0113-ci-lua.sh new file mode 100644 index 0000000..1e095b1 --- /dev/null +++ b/tests/t0113-ci-lua.sh @@ -0,0 +1,78 @@ +#!/bin/sh + +test_description='Check ci filter written in Lua' +. ./setup.sh + +if test $CGIT_HAS_LUA -ne 1 +then + skip_all='Skipping Lua ci filter tests: Lua support not compiled in' + test_done + exit +fi + +cat >cgitrc.cilua <<EOF +virtual-root=/ +cache-root=$PWD/cache +cache-size=0 + +ci-url=https://ci.example.org/job/\$slug/job/\$ref +ci-filter=lua:$PWD/ci-filter.lua + +repo.url=foo +repo.path=$PWD/repos/foo/.git +EOF + +# Accepts tags only, and records its arguments. +cat >ci-filter.lua <<EOF +function filter_open(ref, refkind, url) + local log = io.open("$PWD/ci-filter.log", "a") + log:write(ref .. "|" .. refkind .. "|" .. url .. "\n") + log:close() + accepted = (refkind == "tag") +end + +function filter_write(buffer) +end + +function filter_close() + if accepted then + return 0 + end + return 1 +end +EOF + +git --git-dir="$PWD/repos/foo/.git" tag v1.0 master + +cgit_ci() +{ + CGIT_CONFIG="$PWD/cgitrc.cilua" QUERY_STRING="url=$1" cgit +} + +test_expect_success 'Lua ci filter accepts a tag' ' + rm -f ci-filter.log && + cgit_ci "foo/ci&h=v1.0" >tmp && + grep "^Location: https://ci.example.org/job/foo/job/v1.0$" tmp && + echo "v1.0|tag|https://ci.example.org/job/foo/job/v1.0" >expected && + test_cmp expected ci-filter.log +' + +test_expect_success 'Lua ci filter rejects a branch' ' + cgit_ci "foo/ci&h=master" >tmp && + grep "^Status: 404 Not found$" tmp +' + +test_expect_success 'Lua ci filter controls the tab' ' + cgit_ci "foo/refs&h=v1.0" >tmp && + grep "href=./foo/ci/?h=v1.0.>ci</a>" tmp && + cgit_ci "foo/refs&h=master" >tmp && + ! grep ">ci</a>" tmp +' + +test_expect_success 'page is still rendered correctly around the filter' ' + cgit_ci "foo/refs&h=v1.0" >tmp && + grep "</html>" tmp && + ! grep "|tag|" tmp +' + +test_done |