#!/bin/sh
# The summary page for a single repository. The shared setup caps its log at
# five entries, so the checks against the fifty commit repository prove the
# cut lands where it should, and the clone url template has the repository
# name substituted in.
test_description='Check content on summary page'
. ./setup.sh
test_expect_success 'generate foo summary' 'cgit_url "foo" >tmp'
test_expect_success 'find commit 1' 'grep "commit 1" tmp'
test_expect_success 'find commit 5' 'grep "commit 5" tmp'
test_expect_success 'find branch master' 'grep "master" tmp'
test_expect_success 'no tags' '! grep "Tag" tmp'
test_expect_success 'clone-url expanded correctly' '
grep "git://example.org/foo.git" tmp
'
test_expect_success 'generate bar summary' 'cgit_url "bar" >tmp'
test_expect_success 'repo description reaches the meta tag' '
grep "" tmp
'
test_expect_success 'no commit 45' '! grep "commit 45" tmp'
test_expect_success 'find commit 46' 'grep "commit 46" tmp'
test_expect_success 'find commit 50' 'grep "commit 50" tmp'
test_expect_success 'find branch master' 'grep "master" tmp'
test_expect_success 'no tags' '! grep "Tag" tmp'
test_expect_success 'clone-url expanded correctly' '
grep "git://example.org/bar.git" tmp
'
# A clone url is shown as written, but a browser cannot follow the ssh, scp
# or git forms, so those rows link to the first http url in the list, or to
# the repository's own page when the list has none.
test_expect_success 'a git clone url row falls back to the page url' '
grep "clone-url.>git://example.org/bar.git" tmp
'
test_expect_success 'an scp clone url row links to the http url' '
{
echo "virtual-root=/" &&
echo "cache-size=0" &&
echo "repo.url=foo" &&
echo "repo.path=$PWD/repos/foo/.git" &&
echo "repo.clone-url=git@example.org:foo https://example.org/foo"
} >clonerc &&
CGIT_CONFIG="$PWD/clonerc" QUERY_STRING="url=foo" cgit >tmp &&
grep "title=.foo Git repository. href=.https://example.org/foo.>git@example.org:foo" tmp &&
grep "vcs-git. href=.https://example.org/foo." tmp &&
! grep "vcs-git. href=.git@" tmp
'
# Prints how many columns each row of the page's list table spans, one row to
# a line, counting a cell without a colspan as one.
row_widths() {
sed -n "/
]/ {
width = 0
row = $0
while (match(row, /]/)) {
row = substr(row, RSTART + 3)
cell = substr(row, 1, index(row, ">"))
if (match(cell, /colspan=.[0-9]+/))
width += substr(cell, RSTART + 9, RLENGTH - 9)
else
width++
}
print width
}
'
}
# Fails unless every row of the list table at the url is as many columns wide
# as the second argument says. A third names a config other than colsrc.
test_widths() {
CGIT_CONFIG="$PWD/${3:-colsrc}" QUERY_STRING="url=$1" cgit >tmp &&
row_widths tmp | sort -u >actual &&
echo "$2" >expect &&
test_cmp expect actual
}
# The summary's sections share one table, so every row has to fill it, or the
# stripe of a shorter row stops short of the table's edge. The table is as
# wide as the log when both counts are on and as wide as a ref row otherwise.
# Each repo below shows the same history with different counts, and every
# section is cut short so that its [...] row is drawn too.
test_expect_success 'set up a repo cut short in every section' '
mkrepo repos/cols 3 >/dev/null &&
git -C repos/cols branch other HEAD~1 &&
git -C repos/cols tag one HEAD~1 &&
git -C repos/cols tag -a -m two two &&
{
echo "virtual-root=/" &&
echo "cache-size=0" &&
echo "summary-branches=1" &&
echo "summary-tags=1" &&
echo "summary-log=2" &&
echo "max-ref-count=1" &&
echo "clone-url=https://example.org/\$CGIT_REPO_URL" &&
echo "repo.url=none" &&
echo "repo.path=$PWD/repos/cols/.git" &&
echo "repo.url=lines" &&
echo "repo.path=$PWD/repos/cols/.git" &&
echo "repo.enable-log-linecount=1" &&
echo "repo.url=both" &&
echo "repo.path=$PWD/repos/cols/.git" &&
echo "repo.enable-log-filecount=1" &&
echo "repo.enable-log-linecount=1"
} >colsrc &&
CGIT_CONFIG="$PWD/colsrc" QUERY_STRING="url=none" cgit >tmp &&
grep "" tmp &&
grep "" tmp &&
test $(grep -c ">\[...\]" tmp) = 3
'
test_expect_success 'a summary without counts fills four columns' 'test_widths none 4'
test_expect_success 'a summary with one count fills four columns' 'test_widths lines 4'
test_expect_success 'a summary with both counts fills five columns' 'test_widths both 5'
test_expect_success 'a summary without a log fills four columns' '
sed "s/^summary-log=2$/summary-log=0/" colsrc >nologrc &&
test_widths both 4 nologrc
'
# The refs page draws the same rows with nothing wider beside them.
test_expect_success 'the refs page fills four columns' 'test_widths both/refs/ 4'
test_expect_success 'a page of branches fills four columns' 'test_widths both/refs/heads 4'
test_expect_success 'a page of tags fills four columns' 'test_widths both/refs/tags 4'
test_done