blob: f9612e640c1cdd1c66348fb82115171f891c09b4 (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/bin/sh

# The log page and its search. The searching checks use the repository whose
# name contains a space and a term containing a space, so every link cgit
# writes back has to escape the path and the query, which escape differently.

test_description='Check content on log page'
. ./setup.sh

test_expect_success 'generate foo/log' 'cgit_url "foo/log" >tmp'
test_expect_success 'find commit 1' 'grep "commit 1" tmp'
test_expect_success 'find commit 5' 'grep "commit 5" tmp'

test_expect_success 'generate bar/log' 'cgit_url "bar/log" >tmp'
test_expect_success 'find commit 1' 'grep "commit 1" tmp'
test_expect_success 'find commit 50' 'grep "commit 50" tmp'

# The switch button submits the select as h, so whatever head the request
# follows has to sit in the list selected, or submitting would quietly move
# the visitor to the first branch.
test_expect_success 'a detached head stays selected in the switcher' '
	sha=$(git -C repos/foo rev-parse master~1) &&
	cgit_url "foo/log&h=$sha" >tmp &&
	grep "option value=.$sha. selected" tmp
'
test_expect_success 'a tag head stays selected in the switcher' '
	git -C repos/foo tag t-switch master~1 &&
	cgit_url "foo/log&h=t-switch" >tmp &&
	grep "option value=.t-switch. selected>t-switch (detached)" tmp &&
	git -C repos/foo tag -d t-switch
'
test_expect_success 'a branch head keeps its plain option' '
	cgit_url "foo/log&h=master" >tmp &&
	grep "option value=.master. selected>master<" tmp &&
	! grep "detached" tmp
'

test_expect_success 'generate "with%20space/log?qt=grep&q=commit+1"' '
	cgit_url "with+space/log&qt=grep&q=commit+1" >tmp
'
test_expect_success 'find commit 1' 'grep "commit 1" tmp'
test_expect_success 'find link with %20 in path' 'grep "/with%20space/log/?qt=grep" tmp'
test_expect_success 'find link with + in arg' 'grep "/log/?qt=grep&amp;q=commit+1" tmp'
test_expect_success 'no links with space in path' '! grep "href=./with space/" tmp'
test_expect_success 'no links with space in arg' '! grep "q=commit 1" tmp'
test_expect_success 'commit 2 is not visible' '! grep "commit 2" tmp'

# Following a file diffs each commit for the name the file had there, so the
# root commit that created it has to be diffed too, and paging has to go on
# asking about the name the visitor followed rather than the older one.
test_expect_success 'set up a renamed file to follow' '
	test_create_repo repos/fol &&
	(
		cd repos/fol &&
		echo 1 >a.txt &&
		git add a.txt &&
		git commit -m "create a" &&
		for i in 2 3 4
		do
			echo $i >>a.txt &&
			git commit -am "edit a $i" || return 1
		done &&
		git mv a.txt b.txt &&
		git commit -m "rename to b" &&
		for i in 6 7 8
		do
			echo $i >>b.txt &&
			git commit -am "edit b $i" || return 1
		done
	) &&
	{
		echo "virtual-root=/" &&
		echo "cache-size=0" &&
		echo "enable-follow-links=1" &&
		echo "max-commit-count=3" &&
		echo "repo.url=fol" &&
		echo "repo.path=$PWD/repos/fol/.git"
	} >folrc
'

test_expect_success 'a followed log reaches the root commit' '
	CGIT_CONFIG="$PWD/folrc" QUERY_STRING="url=fol/log/b.txt&follow=1&ofs=6" cgit >tmp &&
	grep ">edit a 2<" tmp &&
	grep ">create a<" tmp
'

test_expect_success 'the pager of a followed log keeps the name followed' '
	CGIT_CONFIG="$PWD/folrc" QUERY_STRING="url=fol/log/b.txt&follow=1&ofs=3" cgit >tmp &&
	grep ">edit a 3<" tmp &&
	grep "href=./fol/log/b.txt?follow=1.>\[prev\]" tmp &&
	grep "href=./fol/log/b.txt?ofs=6&amp;follow=1.>\[next\]" tmp
'

test_expect_success 'a cut subject keeps whole characters' '
	git -C repos/foo commit --allow-empty -m "日本語の説明文です日本語の説明文です" &&
	{
		echo "max-message-length=20" &&
		sed "s/^cache-size=.*/cache-size=0/" cgitrc
	} >subjectrc &&
	CGIT_CONFIG="$PWD/subjectrc" QUERY_STRING="url=foo/log/" cgit >tmp &&
	grep ">日本語の説\.\.\.</a>" tmp
'

test_done