prefix = '_arlima_wp_test_'; $wpdb->suppress_errors = false; self::$factory = new Arlima_ListFactory(clone $wpdb); self::$factory->install(); } /** * Remove database tables */ public static function tearDownAfterClass() { self::$factory->uninstall(); } /** */ function cleanTables() { global $wpdb; $wpdb->prefix = '_arlima_wp_test_'; $tables = array('arlima_articlelist', 'arlima_articlelist_version', 'arlima_articlelist_article'); foreach($tables as $table) { $wpdb->query('TRUNCATE TABLE '.$wpdb->prefix.$table); } } private function createList($name='Test list', $slug='test', $opts=array('before_title'=>'
', 'after_title'=>'
'), $limit=25) { return self::$factory->createList($name, $slug, $opts, $limit); } function testCreateAndLoadAndUpdate() { /** * @param PHPUnit_Framework_TestCase $test * @param Arlima_List $list */ $test_list_content = function($test, $list) { $test->assertEquals(1, $list->id()); $test->assertEquals(true, $list->exists()); $test->assertEquals('test', $list->getSlug()); $test->assertEquals('Test list', $list->getTitle()); $test->assertEquals('h5', $list->getTitleElement()); $test->assertEquals(25, $list->getMaxlength()); $test->assertEquals(Arlima_List::STATUS_EMPTY, $list->getStatus()); $test->assertEquals(array(), $list->getVersions()); $test->assertFalse($list->isPreview()); $test->assertFalse($list->isImported()); $test->assertTrue($list->isLatestPublishedVersion()); $test->assertEquals('', $list->getOption('after_title')); $test->assertEquals('', $list->getOption('whateva')); }; $this->cleanTables(); $test_list_content($this, $this->createList()); $test_list_content($this, self::$factory->loadList(1)); $test_list_content($this, self::$factory->loadList('test')); } function testUpdateListProps() { $list = $this->createList(); $list->setMaxlength(1); $list->setOption('google', 'test1'); $list->setOption('pages_to_purge', 'test2'); $list->setSlug('hejpa'); $list->setTitle('Jodå'); self::$factory->updateListProperties($list); $reloaded_list = self::$factory->loadList($list->id()); $this->assertEquals(1, $reloaded_list->getMaxlength()); $this->assertEquals('Jodå', $reloaded_list->getTitle()); $this->assertEquals('hejpa', $reloaded_list->getSlug()); $this->assertEquals('test2', $reloaded_list->getOption('pages_to_purge')); $this->assertEquals(null, $reloaded_list->getOption('google')); // Is not an option defined in Arlima_List::getDefaultOptions() and is therefor removed $this->assertEquals(Arlima_List::STATUS_EMPTY, $reloaded_list->getStatus()); $this->assertEquals(array(), $reloaded_list->getVersions()); $this->assertFalse($reloaded_list->isPreview()); $this->assertFalse($reloaded_list->isImported()); $this->assertTrue($reloaded_list->isLatestPublishedVersion()); $this->assertEquals('', $reloaded_list->getOption('after_title')); $this->assertEquals('', $reloaded_list->getOption('whateva')); } function testLoadMissingList() { $this->assertFalse( self::$factory->loadList(12)->exists() ); $this->assertFalse( self::$factory->loadList('yoyo')->exists() ); $this->assertFalse( self::$factory->loadList(12, 193)->exists() ); } function testVersionManagement() { $list = $this->createList('Test', 'testing', array(), 2); $article = Arlima_ListFactory::createArticleDataArray(); self::$factory->saveNewListVersion($list, array( $article ), 99); $reloaded_list = self::$factory->loadList($list->id()); $ver_id = $reloaded_list->getVersionAttribute('id'); $this->assertEquals(Arlima_List::STATUS_PUBLISHED, $reloaded_list->getStatus()); $this->assertEquals(99, $reloaded_list->getVersionAttribute('user_id')); $this->assertTrue( is_numeric($ver_id) ); self::$factory->saveNewListVersion($list, array( $article, $article, $article ), 98); $reloaded_list = self::$factory->loadList($list->id()); $this->assertEquals(2, count( $reloaded_list->getVersions() )); $this->assertFalse( $reloaded_list->isPreview() ); $this->assertTrue( $reloaded_list->isLatestPublishedVersion() ); $this->assertEquals(98, (int)$reloaded_list->getVersionAttribute('user_id')); $this->assertEquals(2, count($reloaded_list->getArticles())); // Limit was set to two self::$factory->saveNewListVersion($list, array( $article, $article ), 97); $old_version = self::$factory->loadList($list->id(), $ver_id); $this->assertFalse( $old_version->isLatestPublishedVersion() ); $this->assertEquals($ver_id, $old_version->getVersionAttribute('id')); $this->assertEquals(3, count($old_version->getVersions())); $this->assertEquals(1, count($old_version->getArticles())); self::$factory->removeOldVersions($old_version, 1); $latest_version = self::$factory->loadList($list->id()); $this->assertTrue( $latest_version->getVersionAttribute('id') > $ver_id ); $this->assertEquals(1, count($latest_version->getVersions())); } function testVersionCleanUp() { $list = $this->createList(); for($i=1; $i < 15; $i++) { self::$factory->saveNewListVersion($list, array(), $i); } $latest_ver = self::$factory->loadList($list->id()); $this->assertEquals(14, $latest_ver->getVersionAttribute('user_id')); $this->assertEquals(10, count($latest_ver->getVersions())); $oldest_ver = self::$factory->loadList($list->getSlug(), array_slice($latest_ver->getVersions(), -1)); $this->assertEquals(5, $oldest_ver->getVersionAttribute('user_id')); } function testPreviewVersions() { $list = $this->createList(); self::$factory->saveNewListVersion($list, array(), 5); self::$factory->saveNewListVersion($list, array( Arlima_ListFactory::createArticleDataArray() ), 9, true); $latest_version = self::$factory->loadList($list->id()); $this->assertEquals(5, $latest_version->getVersionAttribute('user_id')); $preview = self::$factory->loadLatestPreview($list->id()); $this->assertEquals(1, count($preview->getVersions())); $this->assertTrue( $preview->isPreview() ); $this->assertEquals(1, count($preview->getArticles())); $this->assertEquals(9, $preview->getVersionAttribute('user_id')); self::$factory->saveNewListVersion($list, array(), 5); $newest = self::$factory->loadList($list->id()); $this->assertEquals(2, count($newest->getVersions())); $this->assertEquals(0, count(self::$factory->loadLatestPreview($list->id())->getArticles()) ); } function testDeleteLists() { $list = $this->createList(); $id = $list->id(); self::$factory->deleteList($list); $this->assertFalse( self::$factory->loadList($id)->exists() ); } function testDeprecatedFunctions() { $list = $this->createList(); $this->assertEquals($list->id(), $list->id); $this->assertEquals(true, $list->exists); $this->assertEquals('test', $list->slug); $this->assertEquals('Test list', $list->title); } function testUpdateArticle() { $list = $this->createList(); self::$factory->saveNewListVersion($list, array(Arlima_ListFactory::createArticleDataArray()), 1); $latest_version = self::$factory->loadList($list->id()); $article = current($latest_version->getArticles()); self::$factory->updateArticle($article['id'], array('text'=>'Some text', 'title'=>'A title', 'title_fontsize'=>33)); $reloaded_version = self::$factory->loadList($list->id()); $article = current($reloaded_version->getArticles()); $this->assertEquals($article['text'], 'Some text'); $this->assertEquals($article['title'], 'A title'); $this->assertEquals($article['title_fontsize'], 33); } function testCache() { $file_cache = new Private_ArlimaFileCache(sys_get_temp_dir()); self::$factory->setCacheManager( $file_cache ); $list_id = $this->createList('Cached list', 'cached')->id(); $list = self::$factory->loadList($list_id); $this->assertEquals(array('arlima_list_props_'.$list_id, 'arlima_list_articles_data_'.$list_id), $file_cache->log['get']); $file_cache->resetLog(); self::$factory->saveNewListVersion($list, array( Arlima_ListFactory::createArticleDataArray() ), 1); $list = self::$factory->loadList($list_id); $this->assertEquals(array('arlima_list_articles_data_'.$list_id), $file_cache->log['set']); $this->assertEquals(array('arlima_list_articles_data_'.$list_id), $file_cache->log['delete']); $file_cache->resetLog(); $this->assertEquals(1, count( $list->getArticles() )); self::$factory->saveNewListVersion($list, array( Arlima_ListFactory::createArticleDataArray(),Arlima_ListFactory::createArticleDataArray() ), 1); $list = self::$factory->loadList($list_id); $file_cache->resetLog(); $list = self::$factory->loadList($list_id); $this->assertEquals(array('arlima_list_props_'.$list_id, 'arlima_list_articles_data_'.$list_id), $file_cache->log['get']); $this->assertEquals(2, count( $list->getArticles() )); } } class Private_ArlimaFileCache { private $path; public $log; function __construct($p) { $this->path = $p; $this->resetLog(); } function resetLog() { $this->log = array( 'get' => array(), 'set' => array(), 'delete' => array() ); } function get($id) { $this->log['get'][] = $id; $file = $this->generateFileName($id); if( stream_resolve_include_path($file) !== false) { return unserialize(file_get_contents($file)); } return false; } function set($id, $content) { $this->log['set'][] = $id; file_put_contents($this->generateFileName($id), serialize($content)); } function delete($id) { $this->log['delete'][] = $id; $file = $this->generateFileName($id); if( stream_resolve_include_path($file) !== false) @unlink($file); } private function generateFileName($id) { return $this->path .'/'. $id .'.cache'; } }