*/ require_once (dirname(__FILE__) . "/config_test.php"); require_once (dirname(__FILE__) . "/../book.php"); require_once (dirname(__FILE__) . "/../OPDS_renderer.php"); define ("OPDS_RELAX_NG", dirname(__FILE__) . "/opds-relax-ng/opds_catalog_1_1.rng"); define ("OPENSEARCHDESCRIPTION_RELAX_NG", dirname(__FILE__) . "/opds-relax-ng/opensearchdescription.rng"); define ("JING_JAR", dirname(__FILE__) . "/jing.jar"); define ("OPDSVALIDATOR_JAR", dirname(__FILE__) . "/OPDSValidator.jar"); define ("TEST_FEED", dirname(__FILE__) . "/text.atom"); class OpdsTest extends PHPUnit_Framework_TestCase { public static function tearDownAfterClass() { if (!file_exists (TEST_FEED)) { return; } unlink (TEST_FEED); } function jingValidateSchema($feed, $relax = OPDS_RELAX_NG) { $path = ""; $res = system($path . 'java -jar ' . JING_JAR . ' ' . $relax . ' ' . $feed); if ($res != '') { echo 'RelaxNG validation error: '.$res; return false; } else return true; } function opdsValidator($feed) { $oldcwd = getcwd(); // Save the old working directory chdir("test"); $path = ""; $res = system($path . 'java -jar ' . OPDSVALIDATOR_JAR . ' ' . $feed); chdir($oldcwd); if ($res != '') { echo 'OPDS validation error: '.$res; return false; } else return true; } function opdsCompleteValidation ($feed) { return $this->jingValidateSchema($feed) && $this->opdsValidator($feed); } public function testPageIndex () { global $config; $page = Base::PAGE_INDEX; $query = NULL; $qid = NULL; $n = "1"; $_SERVER['QUERY_STRING'] = ""; $config['cops_subtitle_default'] = "My subtitle"; $currentPage = Page::getPage ($page, $qid, $query, $n); $currentPage->InitializeContent (); $OPDSRender = new OPDSRenderer (); file_put_contents (TEST_FEED, $OPDSRender->render ($currentPage)); $this->AssertTrue ($this->opdsCompleteValidation (TEST_FEED)); $_SERVER ["HTTP_USER_AGENT"] = "XXX"; $config['cops_generate_invalid_opds_stream'] = "1"; file_put_contents (TEST_FEED, $OPDSRender->render ($currentPage)); $this->AssertFalse ($this->jingValidateSchema (TEST_FEED)); $this->AssertFalse ($this->opdsValidator (TEST_FEED)); $_SERVER['QUERY_STRING'] = NULL; } /** * @dataProvider providerPage */ public function testMostPages ($page, $query) { $qid = NULL; $n = "1"; $_SERVER['QUERY_STRING'] = "?page={$page}"; if (!empty ($query)) { $_SERVER['QUERY_STRING'] .= "&query={$query}"; } $_SERVER['REQUEST_URI'] = "feed.php" . $_SERVER['QUERY_STRING']; $currentPage = Page::getPage ($page, $qid, $query, $n); $currentPage->InitializeContent (); $OPDSRender = new OPDSRenderer (); file_put_contents (TEST_FEED, $OPDSRender->render ($currentPage)); $this->AssertTrue ($this->opdsCompleteValidation (TEST_FEED)); } public function providerPage () { return array ( array (Base::PAGE_OPENSEARCH, "car"), array (Base::PAGE_ALL_AUTHORS, NULL), array (Base::PAGE_ALL_SERIES, NULL), array (Base::PAGE_ALL_TAGS, NULL), array (Base::PAGE_ALL_PUBLISHERS, NULL), array (Base::PAGE_ALL_LANGUAGES, NULL), array (Base::PAGE_ALL_RECENT_BOOKS, NULL), array (Base::PAGE_ALL_BOOKS, NULL) ); } public function testPageIndexMultipleDatabase () { global $config; $config['calibre_directory'] = array ("Some books" => dirname(__FILE__) . "/BaseWithSomeBooks/", "One book" => dirname(__FILE__) . "/BaseWithOneBook/"); $page = Base::PAGE_INDEX; $query = NULL; $qid = "1"; $n = "1"; $_SERVER['QUERY_STRING'] = ""; $currentPage = Page::getPage ($page, $qid, $query, $n); $currentPage->InitializeContent (); $OPDSRender = new OPDSRenderer (); file_put_contents (TEST_FEED, $OPDSRender->render ($currentPage)); $this->AssertTrue ($this->opdsCompleteValidation (TEST_FEED)); } public function testOpenSearchDescription () { $_SERVER['QUERY_STRING'] = ""; $OPDSRender = new OPDSRenderer (); file_put_contents (TEST_FEED, $OPDSRender->getOpenSearch ()); $this->AssertTrue ($this->jingValidateSchema (TEST_FEED, OPENSEARCHDESCRIPTION_RELAX_NG)); $_SERVER['QUERY_STRING'] = NULL; } public function testPageAuthorMultipleDatabase () { global $config; $config['calibre_directory'] = array ("Some books" => dirname(__FILE__) . "/BaseWithSomeBooks/", "One book" => dirname(__FILE__) . "/BaseWithOneBook/"); $page = Base::PAGE_AUTHOR_DETAIL; $query = NULL; $qid = "1"; $n = "1"; $_SERVER['QUERY_STRING'] = "page=" . Base::PAGE_AUTHOR_DETAIL . "&id=1"; $_GET ["db"] = "0"; $currentPage = Page::getPage ($page, $qid, $query, $n); $currentPage->InitializeContent (); $OPDSRender = new OPDSRenderer (); file_put_contents (TEST_FEED, $OPDSRender->render ($currentPage)); $this->AssertTrue ($this->opdsCompleteValidation (TEST_FEED)); } public function testPageAuthorsDetail () { global $config; $page = Base::PAGE_AUTHOR_DETAIL; $query = NULL; $qid = "1"; $n = "1"; $_SERVER['QUERY_STRING'] = "page=" . Base::PAGE_AUTHOR_DETAIL . "&id=1&n=1"; $config['cops_max_item_per_page'] = 2; // First page $currentPage = Page::getPage ($page, $qid, $query, $n); $currentPage->InitializeContent (); $OPDSRender = new OPDSRenderer (); file_put_contents (TEST_FEED, $OPDSRender->render ($currentPage)); $this->AssertTrue ($this->opdsCompleteValidation (TEST_FEED)); // Second page $n = 2; $currentPage = Page::getPage ($page, $qid, $query, $n); $currentPage->InitializeContent (); $OPDSRender = new OPDSRenderer (); file_put_contents (TEST_FEED, $OPDSRender->render ($currentPage)); $this->AssertTrue ($this->opdsCompleteValidation (TEST_FEED)); // No pagination $config['cops_max_item_per_page'] = -1; } public function testPageAuthorsDetail_WithFacets () { global $config; $page = Base::PAGE_AUTHOR_DETAIL; $query = NULL; $qid = "1"; $n = "1"; $_SERVER['QUERY_STRING'] = "page=" . Base::PAGE_AUTHOR_DETAIL . "&id=1&n=1"; $_GET["tag"] = "Short Stories"; $config['cops_books_filter'] = array ("Only Short Stories" => "Short Stories", "No Short Stories" => "!Short Stories"); $currentPage = Page::getPage ($page, $qid, $query, $n); $currentPage->InitializeContent (); $OPDSRender = new OPDSRenderer (); file_put_contents (TEST_FEED, $OPDSRender->render ($currentPage)); $this->AssertTrue ($this->opdsCompleteValidation (TEST_FEED)); $config['cops_books_filter'] = array (); } public function testPageAuthorsDetail_WithoutAnyId () { global $config; $page = Base::PAGE_AUTHOR_DETAIL; $query = NULL; $qid = "1"; $n = "1"; $_SERVER['QUERY_STRING'] = "page=" . Base::PAGE_AUTHOR_DETAIL . "&id=1&n=1"; $_SERVER['REQUEST_URI'] = "index.php?XXXX"; $currentPage = Page::getPage ($page, $qid, $query, $n); $currentPage->InitializeContent (); $currentPage->idPage = NULL; $OPDSRender = new OPDSRenderer (); file_put_contents (TEST_FEED, $OPDSRender->render ($currentPage)); $this->AssertTrue ($this->opdsCompleteValidation (TEST_FEED)); } }