mirror of
https://github.com/silverstripe/silverstripe-docsviewer
synced 2024-10-22 11:05:56 +02:00
0b91b91e33
This continues on the migration to the Manifest. Instead of using calls to a `Service` now all file related lookups are done through the `DocumentationManifest`
249 lines
10 KiB
PHP
Executable File
249 lines
10 KiB
PHP
Executable File
<?php
|
|
|
|
/**
|
|
* Some of these tests are simply checking that pages load. They should not assume
|
|
* somethings working.
|
|
*
|
|
* @package docsviewer
|
|
* @subpackage tests
|
|
*/
|
|
|
|
class DocumentationViewerTest extends FunctionalTest {
|
|
|
|
protected $autoFollowRedirection = false;
|
|
|
|
public function setUpOnce() {
|
|
parent::setUpOnce();
|
|
|
|
$this->origEnabled = DocumentationService::automatic_registration_enabled();
|
|
DocumentationService::set_automatic_registration(false);
|
|
$this->origModules = DocumentationService::get_registered_entities();
|
|
|
|
$this->origLinkBase = Config::inst()->get('DocumentationViewer', 'link_base');
|
|
Config::inst()->update('DocumentationViewer', 'link_base', 'dev/docs/');
|
|
|
|
foreach($this->origModules as $module) {
|
|
DocumentationService::unregister($module->getFolder());
|
|
}
|
|
|
|
// We set 3.0 as current, and test most assertions against 2.4 - to avoid 'current' rewriting issues
|
|
DocumentationService::register("DocumentationViewerTests", DOCSVIEWER_PATH . "/tests/docs/", '2.3');
|
|
DocumentationService::register("DocumentationViewerTests", DOCSVIEWER_PATH . "/tests/docs-v2.4/", '2.4', 'Doc Test', true);
|
|
DocumentationService::register("DocumentationViewerTests", DOCSVIEWER_PATH . "/tests/docs-v3.0/", '3.0', 'Doc Test');
|
|
|
|
DocumentationService::register("DocumentationViewerAltModule1", DOCSVIEWER_PATH . "/tests/docs-parser/", '1.0');
|
|
DocumentationService::register("DocumentationViewerAltModule2", DOCSVIEWER_PATH . "/tests/docs-search/", '1.0');
|
|
}
|
|
|
|
public function tearDownOnce() {
|
|
parent::tearDownOnce();
|
|
|
|
DocumentationService::unregister("DocumentationViewerTests");
|
|
DocumentationService::set_automatic_registration($this->origEnabled);
|
|
|
|
Config::inst()->update('DocumentationViewer', 'link_base', $this->origLinkBase);
|
|
}
|
|
|
|
/**
|
|
* This tests that all the locations will exist if we access it via the urls.
|
|
*/
|
|
function testLocationsExists() {
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/2.3/subfolder');
|
|
$this->assertEquals($response->getStatusCode(), 200, 'Existing base folder');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/2.4');
|
|
$this->assertEquals($response->getStatusCode(), 200, 'Existing base folder');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/2.4/');
|
|
$this->assertEquals($response->getStatusCode(), 200, 'Existing base folder');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/2.3/nonexistant-subfolder');
|
|
$this->assertEquals($response->getStatusCode(), 404, 'Nonexistant subfolder');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/2.3/nonexistant-file.txt');
|
|
$this->assertEquals($response->getStatusCode(), 404, 'Nonexistant file');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/2.3/test');
|
|
$this->assertEquals($response->getStatusCode(), 200, 'Existing file');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/3.0/empty?foo');
|
|
$this->assertEquals($response->getStatusCode(), 200, 'Existing page');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/3.0/empty.md');
|
|
$this->assertEquals($response->getStatusCode(), 200, 'Existing page');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/3.0/empty/');
|
|
$this->assertEquals($response->getStatusCode(), 200, 'Existing page');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/3.0/test');
|
|
$this->assertEquals($response->getStatusCode(), 404, 'Missing page');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/3.0/test.md');
|
|
$this->assertEquals($response->getStatusCode(), 404, 'Missing page');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/3.0/test/');
|
|
$this->assertEquals($response->getStatusCode(), 404, 'Missing page');
|
|
|
|
$response = $this->get('dev/docs/en');
|
|
$this->assertEquals($response->getStatusCode(), 404, 'Must include a module');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/dk/');;
|
|
$this->assertEquals($response->getStatusCode(), 404, 'Access a language that doesn\'t exist');
|
|
}
|
|
|
|
function testRouting() {
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/2.4');
|
|
|
|
$this->assertEquals(200, $response->getStatusCode());
|
|
$this->assertContains('english test', $response->getBody(), 'Toplevel content page');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/2.4/');
|
|
$this->assertEquals(200, $response->getStatusCode());
|
|
$this->assertContains('english test', $response->getBody(), 'Toplevel content page');
|
|
|
|
$response = $this->get('dev/docs/DocumentationViewerTests/en/2.4/index.md');
|
|
$this->assertEquals(200, $response->getStatusCode());
|
|
$this->assertContains('english test', $response->getBody(), 'Toplevel content page');
|
|
}
|
|
|
|
function testGetModulePagesShort() {
|
|
$v = new DocumentationViewer();
|
|
$response = $v->handleRequest(new SS_HTTPRequest('GET', 'DocumentationViewerTests/en/2.3/subfolder/'), DataModel::inst());
|
|
$pages = $v->getEntityPages();
|
|
|
|
$this->assertEquals(
|
|
$pages->column('Title'),
|
|
array('Sort', 'Subfolder', 'Test')
|
|
);
|
|
}
|
|
|
|
function testGetEntityPages() {
|
|
$v = new DocumentationViewer();
|
|
$response = $v->handleRequest(new SS_HTTPRequest('GET', 'DocumentationViewerTests/en/2.3/subfolder/'), DataModel::inst());
|
|
$pages = $v->getEntityPages();
|
|
$this->assertEquals(
|
|
array('sort/', 'subfolder/', 'test.md'),
|
|
$pages->column('Filename')
|
|
);
|
|
$this->assertEquals(
|
|
array('link','current', 'link'),
|
|
$pages->column('LinkingMode')
|
|
);
|
|
|
|
foreach($pages as $page) {
|
|
$page->setVersion('2.3');
|
|
}
|
|
|
|
$links = $pages->column('Link');
|
|
$this->assertStringEndsWith('DocumentationViewerTests/en/2.3/sort/', $links[0]);
|
|
$this->assertStringEndsWith('DocumentationViewerTests/en/2.3/subfolder/', $links[1]);
|
|
$this->assertStringEndsWith('DocumentationViewerTests/en/2.3/test', $links[2]);
|
|
|
|
$pageSort = $pages->find('Title', 'Sort');
|
|
$this->assertFalse($pageSort->Children);
|
|
|
|
$pageSubfolder = $pages->find('Title', 'Subfolder');
|
|
$this->assertEquals(
|
|
array('subfolder/subpage.md', 'subfolder/subsubfolder/'),
|
|
$pageSubfolder->Children->column('Filename')
|
|
);
|
|
|
|
$children = $pageSubfolder->Children;
|
|
foreach($children as $child) {
|
|
$child->setVersion('2.3');
|
|
}
|
|
$child2Links = $children->column('Link');
|
|
$this->assertStringEndsWith('DocumentationViewerTests/en/2.3/subfolder/subpage', $child2Links[0]);
|
|
$this->assertStringEndsWith('DocumentationViewerTests/en/2.3/subfolder/subsubfolder/', $child2Links[1]);
|
|
}
|
|
|
|
function testUrlParsing() {
|
|
// Module index
|
|
$v = new DocumentationViewer();
|
|
$response = $v->handleRequest(new SS_HTTPRequest('GET', 'DocumentationViewerTests/en/2.3/test'), DataModel::inst());
|
|
$this->assertEquals('2.3', $v->getVersion());
|
|
$this->assertEquals('en', $v->getLang());
|
|
$this->assertEquals('DocumentationViewerTests', $v->getEntity()->getTitle());
|
|
$this->assertEquals(array('test'), $v->Remaining);
|
|
|
|
// Module index without version and language. Should pick up the defaults
|
|
$v2 = new DocumentationViewer();
|
|
$response = $v2->handleRequest(new SS_HTTPRequest('GET', 'DocumentationViewerTests/en/test'), DataModel::inst());
|
|
|
|
$this->assertEquals('2.4', $v2->getVersion());
|
|
$this->assertEquals('en', $v2->getLang());
|
|
$this->assertEquals('DocumentationViewerTests', $v2->getEntity()->getTitle());
|
|
$this->assertEquals(array('test'), $v2->Remaining);
|
|
|
|
// Overall index
|
|
$v = new DocumentationViewer();
|
|
$response = $v->handleRequest(new SS_HTTPRequest('GET', ''), DataModel::inst());
|
|
$this->assertEquals('', $v->getVersion());
|
|
$this->assertEquals('en', $v->getLang());
|
|
$this->assertEquals('', $v->module);
|
|
$this->assertEquals(array(), $v->Remaining);
|
|
}
|
|
|
|
function testBreadcrumbs() {
|
|
// Module index
|
|
$v = new DocumentationViewer();
|
|
$response = $v->handleRequest(new SS_HTTPRequest('GET', 'DocumentationViewerTests/en/2.4'), DataModel::inst());
|
|
$crumbs = $v->getBreadcrumbs();
|
|
$this->assertEquals(1, $crumbs->Count());
|
|
|
|
// Subfolder index
|
|
$v = new DocumentationViewer();
|
|
$response = $v->handleRequest(new SS_HTTPRequest('GET', 'DocumentationViewerTests/en/2.4/subfolder/'), DataModel::inst());
|
|
$crumbs = $v->getBreadcrumbs();
|
|
$this->assertEquals(2, $crumbs->Count());
|
|
|
|
// Subfolder page
|
|
$v = new DocumentationViewer();
|
|
$response = $v->handleRequest(new SS_HTTPRequest('GET', 'DocumentationViewerTests/en/2.4/subfolder/subpage'), DataModel::inst());
|
|
$crumbs = $v->getBreadcrumbs();
|
|
$this->assertEquals(3, $crumbs->Count());
|
|
}
|
|
|
|
function testGetVersion() {
|
|
$v = new DocumentationViewer();
|
|
$response = $v->handleRequest(new SS_HTTPRequest('GET', 'DocumentationViewerTests/en/2.4'), DataModel::inst());
|
|
$this->assertEquals('2.4', $v->getVersion());
|
|
|
|
$response = $v->handleRequest(new SS_HTTPRequest('GET', 'DocumentationViewerTests/en/1'), DataModel::inst());
|
|
$this->assertEquals('1', $v->getVersion());
|
|
|
|
$response = $v->handleRequest(new SS_HTTPRequest('GET', 'DocumentationViewerTests/en/3.0'), DataModel::inst());
|
|
$this->assertEquals('3.0', $v->getVersion());
|
|
}
|
|
|
|
function testGetEntities() {
|
|
$v = new DocumentationViewer();
|
|
$response = $v->handleRequest(new SS_HTTPRequest('GET', 'DocumentationViewerTests/en/2.4'), DataModel::inst());
|
|
|
|
$pages = $v->getEntities();
|
|
|
|
$this->assertEquals(3, $pages->Count(), 'Registered 3 entities');
|
|
|
|
// check to see the links don't have version or pages in them
|
|
foreach($pages as $page) {
|
|
$expected = Controller::join_links('docs', $page->Title, 'en');
|
|
|
|
$this->assertStringEndsWith($expected, $page->Link);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Test that the pages comes back sorted by filename
|
|
*/
|
|
function testGetEntityPagesSortedByFilename() {
|
|
$v = new DocumentationViewer();
|
|
$response = $v->handleRequest(new SS_HTTPRequest('GET', 'DocumentationViewerTests/en/3.0/'), DataModel::inst());
|
|
$pages = $v->getEntityPages();
|
|
$links = $pages->column('Link');
|
|
$this->assertStringEndsWith('DocumentationViewerTests/en/3.0/ChangeLog', $links[0]);
|
|
$this->assertStringEndsWith('DocumentationViewerTests/en/3.0/Tutorials', $links[1]);
|
|
$this->assertStringEndsWith('DocumentationViewerTests/en/3.0/empty', $links[2]);
|
|
}
|
|
} |