blob: d2a678bcfe9a9f0734060244923c2adee92f6751 (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
#!/bin/sh

# The atom page serves a repository's recent history as a feed, XML rather
# than a page, so a reader can follow the project without polling the
# browsable log. These checks read the content type, count the entries
# against the max-atom-items cap, which defaults to ten, and hand the feed to
# xmllint where one is installed, since a reader is far stricter about
# well-formedness than any of the greps here.

test_description='Check the atom feed'
. ./setup.sh

test_expect_success 'generate foo/atom' '
	cgit_url "foo/atom" >tmp
'

test_expect_success 'the response is an atom feed' '
	head -n 1 tmp | grep "Status: 200 OK" &&
	sed "/^$/q" tmp | grep "Content-Type: application/atom+xml" &&
	strip_headers <tmp >feed &&
	grep "<feed xmlns=.http://www.w3.org/2005/Atom.>" feed &&
	grep "<title>foo, branch master</title>" feed
'

test_expect_success 'every commit of a small repository is an entry' '
	test $(grep -c "<entry>" feed) -eq 5 &&
	grep "<title>commit 1</title>" feed &&
	grep "<title>commit 5</title>" feed
'

test_expect_success 'ten entries is the default ceiling' '
	cgit_url "bar/atom" >tmp &&
	strip_headers <tmp >feed &&
	test $(grep -c "<entry>" feed) -eq 10 &&
	grep "<title>commit 50</title>" feed &&
	! grep "<title>commit 40</title>" feed
'

test_expect_success 'max-atom-items overrides the ceiling' '
	{
		echo "virtual-root=/" &&
		echo "cache-size=0" &&
		echo "max-atom-items=3" &&
		echo "repo.url=bar" &&
		echo "repo.path=$PWD/repos/bar/.git"
	} >atomrc &&
	CGIT_CONFIG="$PWD/atomrc" QUERY_STRING="url=bar/atom" cgit >tmp &&
	strip_headers <tmp >feed &&
	test $(grep -c "<entry>" feed) -eq 3
'

if command -v xmllint >/dev/null 2>&1
then
	test_set_prereq XMLLINT
else
	say 'Skipping well-formedness check: xmllint not found'
fi

test_expect_success XMLLINT 'the feed is well-formed xml' '
	cgit_url "foo/atom" >tmp &&
	strip_headers <tmp >feed &&
	xmllint --noout feed
'

test_done