aboutsummaryrefslogtreecommitdiff
path: root/tests/t0113-ci-lua.sh
blob: 1e095b108982a15e75339b6b9cd3777458b72384 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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