1
0
Fork 0
dokuwiki-plugins-extra/plugins/55/indexmenu/_test/AjaxRequestsTest.php
Daniel Baumann f339727d60
Adding indexmenu version 2024-01-05 (ed06f21).
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-03-24 19:33:15 +01:00

345 lines
11 KiB
PHP

<?php
/**
* Test sorting
*
* Principle copied from _test/tests/lib/exe/ajax_requests.test.php
*
* @group ajax
* @group plugin_indexmenu
* @group plugins
*/
class AjaxRequestsTest extends DokuWikiTest
{
public function setUp(): void
{
$this->pluginsEnabled[] = 'indexmenu';
parent::setUp(); // this enables the indexmenu plugin
//needed for 'tsort' to use First headings, sets title during search, otherwise as fallback page name used.
global $conf;
$conf['useheading'] = 'navigation';
// for testing sorting pages
saveWikiText('ns2:cpage', "======Bb======\nText", 'Sort different page/title/creation date');
sleep(1); // ensure different timestamps for 'dsort'
saveWikiText('ns2:bpage', "======Aa======\nText", 'Sort different page/title/creation date');
sleep(1);
saveWikiText('ns2:apage', "======Cc======\nText", 'Sort different page/title/creation date');
//ensures title is added to metadata of page
idx_addPage('ns2:cpage');
idx_addPage('ns2:bpage');
idx_addPage('ns2:apage');
// pages on different levels
saveWikiText('ns1:ns2:apage', "======Bb======\nPage on level 2", 'Created page on level 2');
saveWikiText('ns1:ns1:apage', "======Ee======\nPage on level 2", 'Created page on level 2');
saveWikiText('ns1:ns1:lvl3:lvl4:apage', "======Cc======\nPage on levl 4", 'Page on level 4');
saveWikiText('ns1:ns1:start', "======Aa======\nPage on level 2", 'Startpage on level 2');
saveWikiText('ns1:ns0:bpage', "======Aa2======\nPage on level 2", 'Created page on level 2');
saveWikiText('ns1:apage', "======Dd======\nPage on level 1", 'Created page on level 1');
//ensures title is added to metadata
idx_addPage('ns1:ns1:apage');
idx_addPage('ns1:ns1:lvl3:lvl4:apage');
idx_addPage('ns1:ns1:start');
idx_addPage('ns1:ns2:apage');
idx_addPage('ns1:ns0:bpage');
idx_addPage('ns1:apage');
}
/**
* DataProvider for the builtin Ajax calls
*
* @return array
*/
public static function indexmenuCalls()
{
return [
// Call, POST parameters, result function
[
'indexmenu',
AjaxRequestsTest::prepareParams(['level' => 1]),
'expectedResultWiki'
],
[
'indexmenu',
AjaxRequestsTest::prepareParams(['ns' => 'ns2', 'level' => 1]),
'expectedResultNs2PageSort'
],
[
'indexmenu',
AjaxRequestsTest::prepareParams(['ns' => 'ns2', 'level' => 1, 'sort' => 't']),
'expectedResultNs2TitleSort'
],
[
'indexmenu',
AjaxRequestsTest::prepareParams(['ns' => 'ns2', 'level' => 1, 'sort' => 'd']),
'expectedResultNs2CreationDateSort'
],
[
'indexmenu',
AjaxRequestsTest::prepareParams(['ns' => 'ns1', 'level' => 1, 'sort' => 't']),
'expectedResultNs1TitleSort'
],
[
'indexmenu',
AjaxRequestsTest::prepareParams(['ns' => 'ns1', 'level' => 1, 'sort' => 't', 'nsort' => 1]),
'expectedResultNs1TitleSortNamespaceSort'
]
];
}
/**
* @dataProvider indexmenuCalls
*
* @param string $call
* @param array $post
* @param $expectedResult
*/
public function testBasicSorting($call, $post, $expectedResult)
{
$request = new TestRequest();
$response = $request->post(['call' => $call] + $post, '/lib/exe/ajax.php');
// $this->assertNotEquals("AJAX call '$call' unknown!\n", $response->getContent());
//var_export(json_decode($response->getContent()), true); // print as PHP array
$actualArray = json_decode($response->getContent(), true);
unset($actualArray['debug']);
unset($actualArray['sort']);
unset($actualArray['opts']);
$this->assertEquals($this->$expectedResult(), $actualArray);
// $regexp: null, or regexp pattern to match
// example: '/^<div class="odd type_d/'
// if (!empty($regexp)) {
// $this->assertRegExp($regexp, $response->getContent());
// }
}
public function test_params()
{
// print_r(AjaxRequestsTest::prepareParams(['level' => 2]));
$this->assertTrue(true);
}
public static function prepareParams($params = [])
{
$defaults = [
'ns' => 'wiki',
'req' => 'fancytree',
'level' => 1,
'nons' => 0,
'nopg' => 0,
'max' => 0,
'skipns' => ['/^board:(first|second|third|fourth|fifth)$/'],
'skipfile' => ['/(:start$)/'],
'sort' => 0,
'msort' => 0,
'rsort' => 0,
'nsort' => 0,
'hsort' => 0,
'init' => 1
];
$return = [];
foreach ($defaults as $key => $default) {
$return[$key] = $params[$key] ?? $default;
}
return $return;
}
public function expectedResultWiki()
{
return [
'children' => [
0 => [
'title' => 'dokuwiki',
'key' => 'wiki:dokuwiki',
'hns' => false,
'url' => '/./doku.php?id=wiki:dokuwiki'
],
1 => [
'title' => 'syntax',
'key' => 'wiki:syntax',
'hns' => false,
'url' => '/./doku.php?id=wiki:syntax'
]
]];
}
public function expectedResultNs1()
{
return [
'children' => [
0 => [
'title' => 'dokuwiki',
'key' => 'wiki:dokuwiki',
'hns' => false,
'url' => '/./doku.php?id=wiki:dokuwiki'
],
1 => [
'title' => 'syntax',
'key' => 'wiki:syntax',
'hns' => false,
'url' => '/./doku.php?id=wiki:syntax'
]
]];
}
public function expectedResultNs2PageSort()
{
return [
'children' => [
0 => [
'title' => 'Cc',
'key' => 'ns2:apage',
'hns' => false,
'url' => '/./doku.php?id=ns2:apage'
],
1 => [
'title' => 'Aa',
'key' => 'ns2:bpage',
'hns' => false,
'url' => '/./doku.php?id=ns2:bpage'
],
2 => [
'title' => 'Bb',
'key' => 'ns2:cpage',
'hns' => false,
'url' => '/./doku.php?id=ns2:cpage'
]
]];
}
public function expectedResultNs2TitleSort()
{
return [
'children' => [
0 => [
'title' => 'Aa',
'key' => 'ns2:bpage',
'hns' => false,
'url' => '/./doku.php?id=ns2:bpage'
],
1 => [
'title' => 'Bb',
'key' => 'ns2:cpage',
'hns' => false,
'url' => '/./doku.php?id=ns2:cpage'
],
2 => [
'title' => 'Cc',
'key' => 'ns2:apage',
'hns' => false,
'url' => '/./doku.php?id=ns2:apage'
]
]];
}
public function expectedResultNs2CreationDateSort()
{
return [
'children' => [
0 => [
'title' => 'Bb',
'key' => 'ns2:cpage',
'hns' => false,
'url' => '/./doku.php?id=ns2:cpage'
],
1 => [
'title' => 'Aa',
'key' => 'ns2:bpage',
'hns' => false,
'url' => '/./doku.php?id=ns2:bpage'
],
2 => [
'title' => 'Cc',
'key' => 'ns2:apage',
'hns' => false,
'url' => '/./doku.php?id=ns2:apage'
]
]];
}
public function expectedResultNs1TitleSort()
{
return [
'children' => [
0 => [
'title' => 'ns0',
'key' => 'ns1:ns0:',
'hns' => false,
'folder' => true,
'lazy' => true,
'url' => false
],
1 => [
'title' => 'Aa',
'key' => 'ns1:ns1:',
'hns' => 'ns1:ns1:start',
'folder' => true,
'lazy' => true,
'url' => '/./doku.php?id=ns1:ns1:start'
],
2 => [
'title' => 'ns2',
'key' => 'ns1:ns2:',
'hns' => false,
'folder' => true,
'lazy' => true,
'url' => false
],
3 => [
'title' => 'Dd',
'key' => 'ns1:apage',
'hns' => false,
'url' => '/./doku.php?id=ns1:apage'
]
]];
}
public function expectedResultNs1TitleSortNamespaceSort()
{
// 'nsort' let the sort explicitly use the namespace name as sort key.
// 'nsort' + 'tsort' works only for nsort if head pages are used.
return [
'children' => [
0 => [
'title' => 'Aa',
'key' => 'ns1:ns1:',
'hns' => 'ns1:ns1:start',
'folder' => true,
'lazy' => true,
'url' => '/./doku.php?id=ns1:ns1:start'
],
1 => [
'title' => 'Dd',
'key' => 'ns1:apage',
'hns' => false,
'url' => '/./doku.php?id=ns1:apage'
],
2 => [
'title' => 'ns0',
'key' => 'ns1:ns0:',
'hns' => false,
'folder' => true,
'lazy' => true,
'url' => false
],
3 => [
'title' => 'ns2',
'key' => 'ns1:ns2:',
'hns' => false,
'folder' => true,
'lazy' => true,
'url' => false
]
]];
}
}