Add PHP unit tests and page tests.
Run "composer install", then "composer test".
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
namespace Xxx\Tests\Unit;
|
||||
|
||||
use Xxx\Tests\Support\SiteData;
|
||||
use Xxx\Tests\Support\TestCase;
|
||||
|
||||
// sort_options() and get_pager() in navigation.lib.php
|
||||
class NavigationTest extends TestCase {
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
$rows = array();
|
||||
for ($i = 1; $i <= 12; $i++)
|
||||
$rows[] = array('id' => $i, 'title' => "Story $i", 'date' => sprintf('2020-01-%02d 10:00:00', $i));
|
||||
SiteData::install(array('xxx' => $rows));
|
||||
$GLOBALS['num_stories'] = 5;
|
||||
open_db('open');
|
||||
}
|
||||
|
||||
public function testSortOptionsLinkEveryOtherSort(): void {
|
||||
$html = sort_options('/article');
|
||||
$this->assertStringStartsWith('<div class="options">Sort by: ', $html);
|
||||
// Newest first is the current sort, so it is not a link
|
||||
$this->assertStringContainsString('<span>date descending</span> <span class="bar">|</span>', $html);
|
||||
$this->assertStringNotContainsString('order=desc">' . '<span>date descending', $html);
|
||||
$this->assertStringContainsString('<a href="/article?sort=date&order=asc"><span>date</span></a>', $html);
|
||||
$this->assertStringContainsString('<a href="/article?sort=author&order=desc"><span>author z-a</span></a>', $html);
|
||||
$this->assertStringContainsString('<a href="/article?sort=title&order=asc"><span>title</span></a>', $html);
|
||||
$this->assertSame(5, substr_count($html, '<a href='));
|
||||
}
|
||||
|
||||
public function testSortOptionsKeepTheOtherArgumentsSafely(): void {
|
||||
$this->request(array('queue' => '"><script>', 'search' => 'a b&c"<', 'start' => '5x', 'show' => '10', 'sort' => 'title'));
|
||||
$html = sort_options('/article');
|
||||
$this->assertStringContainsString('&queue=0&search=a+b%26c%22%3C&start=0&show=10"', $html);
|
||||
$this->assertStringNotContainsString('<script>', $html);
|
||||
}
|
||||
|
||||
public function testFirstPageHasOnlyAPreviousLink(): void {
|
||||
$html = get_pager();
|
||||
$this->assertStringContainsString('<span class="next"></span>', $html);
|
||||
$this->assertStringContainsString('<a href="/article?start=5">Previous five articles »</a>', $html);
|
||||
}
|
||||
|
||||
public function testMiddlePageHasBothLinks(): void {
|
||||
$this->request(array('start' => '5'));
|
||||
$html = get_pager();
|
||||
$this->assertStringContainsString('<a href="/article?start=0">« Next five articles</a>', $html);
|
||||
$this->assertStringContainsString('<a href="/article?start=10">Previous five articles »</a>', $html);
|
||||
}
|
||||
|
||||
public function testLastPageHasOnlyANextLink(): void {
|
||||
$this->request(array('start' => '10'));
|
||||
$html = get_pager();
|
||||
$this->assertStringContainsString('« Next five articles', $html);
|
||||
$this->assertStringContainsString("<span class=\"prev\"></span>", $html);
|
||||
}
|
||||
|
||||
public function testNextNeverGoesBelowZero(): void {
|
||||
$this->request(array('start' => '2'));
|
||||
$this->assertStringContainsString('<a href="/article?start=0">', get_pager());
|
||||
}
|
||||
|
||||
public function testOneArticleIsSingular(): void {
|
||||
$this->request(array('show' => '1'));
|
||||
$this->assertStringContainsString('Previous article »', get_pager());
|
||||
}
|
||||
|
||||
public function testPageSizeInWords(): void {
|
||||
$this->request(array('show' => '3', 'start' => '3'));
|
||||
$html = get_pager();
|
||||
$this->assertStringContainsString('« Next three articles', $html);
|
||||
$this->assertStringContainsString('Previous three articles »', $html);
|
||||
}
|
||||
|
||||
public function testPagerKeepsTheOtherArgumentsSafely(): void {
|
||||
$this->request(array('start' => '5', 'show' => '5', 'search' => 'Story "1', 'queue' => 'x', 'sort' => 'bad', 'order' => 'bad'));
|
||||
$html = get_pager();
|
||||
$this->assertStringContainsString('href="/article?start=0&queue=0&search=Story+%221&show=5&sort=date&order=desc"', $html);
|
||||
}
|
||||
|
||||
public function testEditablePagerStaysOnThePage(): void {
|
||||
$GLOBALS['editable'] = TRUE;
|
||||
$this->assertStringContainsString('<a href="?start=5">', get_pager());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user