From b657209d29297b6cb37ebb6746c5c62363fdb2cc Mon Sep 17 00:00:00 2001 From: John Bintz Date: Tue, 20 Oct 2009 20:40:16 -0400 Subject: [PATCH] in the middle of getting navigation cleaned up --- addons/Core/Core.inc | 2 +- classes/ComicPress.inc | 248 ----------------------- classes/ComicPressNavigation.inc | 23 ++- classes/ComicPressStoryline.inc | 19 +- functions.php | 24 ++- index.php | 7 +- test/ComicPressNavigationTest.php | 23 ++- test/ComicPressStorylineTest.php | 87 +++++---- test/ComicPressTest.php | 314 ------------------------------ 9 files changed, 110 insertions(+), 637 deletions(-) diff --git a/addons/Core/Core.inc b/addons/Core/Core.inc index db94056..9ea6e85 100644 --- a/addons/Core/Core.inc +++ b/addons/Core/Core.inc @@ -207,7 +207,7 @@ class ComicPressAddonCore extends ComicPressAddon { */ function show_media($override_post, $method, $format) { global $post; - $post_to_use = (is_null($override_post)) ? $this->comicpress->get_last_comic() : $post; + $post_to_use = $post; switch ($this->comicpress->comicpress_options['comic_space']) { case "comic_only": diff --git a/classes/ComicPress.inc b/classes/ComicPress.inc index bb409c8..7123f97 100644 --- a/classes/ComicPress.inc +++ b/classes/ComicPress.inc @@ -53,10 +53,6 @@ class ComicPress { */ function init() { $this->load(); - $this->get_all_category_objects_by_id(); - $this->flatten_categories(); - $this->separate_categories(); - $this->sort_comic_categories(); add_action('wp_head', array(&$this, 'wp_head')); add_filter('comicpress_nav', array(&$this, 'comicpress_nav'), 10, 2); @@ -164,250 +160,6 @@ class ComicPress { return '
' . str_replace(get_template_directory() . DIRECTORY_SEPARATOR, '', $target) . '
' . $content; } - /** - * Flatten all WP categories into nodes like 0/3/5. - * @tested - */ - function flatten_categories() { - $this->category_tree = array(); - - foreach (array_keys($this->categories_by_id) as $category_id) { - $this->category_tree[] = $this->categories_by_id[$category_id]->parent . '/' . $category_id; - } - - do { - $all_ok = true; - for ($i = 0; $i < count($this->category_tree); ++$i) { - $current_parts = explode("/", $this->category_tree[$i]); - if (reset($current_parts) != 0) { - - $all_ok = false; - for ($j = 0; $j < count($this->category_tree); ++$j) { - $j_parts = explode("/", $this->category_tree[$j]); - - if (end($j_parts) == reset($current_parts)) { - $this->category_tree[$i] = implode("/", array_merge($j_parts, array_slice($current_parts, 1))); - break; - } - } - } - } - } while (!$all_ok); - - return $this->category_tree; - } - - /** - * Separate categories into comics and non-comics categories. - * @tested - */ - function separate_categories() { - $comic_categories = array(); - $non_comic_categories = array(); - - foreach ($this->category_tree as $node) { - $parts = split("/", $node); - if ($parts[1] == $this->comicpress_options['comic_category_id']) { - $comic_categories[] = $node; - } else { - $non_comic_categories[] = $node; - } - } - - $this->category_tree = $comic_categories; - $this->non_comic_categories = $non_comic_categories; - } - - /** - * Sort the category tree, adding in new categories in the order as necessary. - * @tested - */ - function sort_comic_categories() { - if (is_array($this->comicpress_options['category_order'])) { - $new_order = array(); - foreach ($this->comicpress_options['category_order'] as $node) { - if (in_array($node, $this->category_tree)) { - $new_order[] = $node; - } - } - - foreach ($this->category_tree as $node) { - if (!in_array($node, $this->comicpress_options['category_order'])) { - $new_order[] = $node; - } - } - - $this->category_tree = $new_order;; - } - return $this->category_tree; - } - - /** - * Turn the list of categories into a hash table of category objects. - */ - function get_all_category_objects_by_id() { - if (empty($this->categories_by_id)) { - $this->categories_by_id = array(); - foreach (get_categories("hide_empty=0") as $category_object) { - $this->categories_by_id[$category_object->term_id] = $category_object; - } - } - return $this->categories_by_id; - } - - /** - * Turn the tree of comics categories into a string to be fed into wp_query functions. - * @tested - */ - function get_all_comic_categories_as_cat_string() { - if (empty($this->all_comic_categories_as_string)) { - $categories = array(); - foreach ($this->category_tree as $node) { - $categories[] = end(explode("/", $node)); - } - $this->all_comic_categories_as_string = implode(",", $categories); - } - return $this->all_comic_categories_as_string; - } - - /** - * Return true if the current post is in the comics category or a child category. - * @tested - */ - function in_comic_category($post_id = null) { - global $post; - - $post_id_to_use = !is_null($post_id) ? $post_id : $post->ID; - - $categories = wp_get_post_categories($post_id_to_use); - if (is_array($categories)) { - foreach ($this->category_tree as $node) { - if (in_array(end(explode("/", $node)), $categories)) { - return true; - } - } - } - return false; - } - - /** - * Get the comics necessary to build the navigation. - * @tested - */ - function get_nav_comics($override_category_id = null) { - global $post; - - $category = is_numeric($override_category_id) ? $override_category_id : $this->comicpress_options['comic_category_id']; - - $comic_posts = array(); - foreach (array('first', 'last', 'previous', 'next') as $which) { - $comic_posts[$which] = $this->{"get_${which}_comic"}($category); - } - - $comic_posts['show_first'] = (trim($post->ID) != trim($comic_posts['first']->ID)); - $comic_posts['show_previous'] = (!empty($comic_posts['previous']) && (trim($comic_posts['first']->ID) != trim($comic_posts['previous']->ID))); - $comic_posts['show_next'] = (!empty($comic_posts['next']) && (trim($comic_posts['last']->ID) != trim($comic_posts['next']->ID))); - $comic_posts['show_last'] = (trim($post->ID) != trim($comic_posts['last']->ID)); - - if ($this->needs_storyline_nav()) { - $comic_posts = array_merge($comic_posts, $this->get_storyline_nav_comics()); - } - - return $comic_posts; - } - - function get_storyline_nav_comics() { - $comic_posts = array('prior' => false, 'upcoming' => false); - foreach ($this->get_sorted_post_categories() as $category_id) { - $prev_next_categories = $this->get_previous_next_categories($category_id); - - foreach ($prev_next_categories as $master_id => $cat_list) { - foreach ($cat_list as $which => $id) { - switch ($which) { - case "previous": - $terminal_post = $this->get_last_comic($id); - $which_field = "prior"; - break; - case "next": - $terminal_post = $this->get_first_comic($id); - $which_field = "upcoming"; - break; - } - - if (is_object($terminal_post)) { - $comic_posts[$which_field] = $terminal_post; - $comic_posts["show_${which_field}"] =true; - } - - if (count($terminal_post) == 2) { break; } - } - } - } - return $comic_posts; - } - - /** - * Get the comic post adjacent to the current comic. - */ - function get_adjacent_comic($category, $next = false, $override_post = null) { - global $wp_query, $post; - $temp = $wp_query->is_single; - $wp_query->is_single = true; - - if (!is_null($override_post)) { - $temp_post = $post; - $post = $override_post; - } - - $categories_to_exclude = $this->get_leaves_of_tree($this->non_comic_categories); - if (!is_null($category)) { - $categories_to_exclude = $this->exclude_all_but_provided_categories($category); - } - - $result = get_adjacent_post(false, implode(" and ", $categories_to_exclude), !$next); - - $wp_query->is_single = $temp; - - if (!is_null($override_post)) { - $post = $temp_post; - } - - return empty($result) ? false : $result; - } - - /** - * Given a category ID or an array of category IDs, create an exclusion string that will - * filter out every category but the provided ones. - */ - function get_string_to_exclude_all_but_provided_categories($category) { - return implode(",", $this->exclude_all_but_provided_categories($category)); - } - - /** - * Exclude every category but the given one. - */ - function exclude_all_but_provided_categories($category) { - $category_ids = array_keys($this->get_all_category_objects_by_id()); - if (!is_array($category)) { $category = array($category); } - return array_diff($category_ids, $category); - } - - /** - * Gets the leaves of a ComicPress node tree (branches look like "0/4/5"). - */ - function get_leaves_of_tree($tree) { - $leaves = array(); - foreach ($tree as $branch) { $leaves[] = end(explode("/", $branch)); } - return $leaves; - } - - /** - * Get a new WP_Query object. - */ - function _new_wp_query() { - return new WP_Query(); - } - /** * Get the path to a partial. * @param array $partials The partials to search for in each path. diff --git a/classes/ComicPressNavigation.inc b/classes/ComicPressNavigation.inc index 600a343..fa37995 100644 --- a/classes/ComicPressNavigation.inc +++ b/classes/ComicPressNavigation.inc @@ -12,10 +12,31 @@ class ComicPressNavigation { function get_post_nav($post) { $nav = array(); - // post + // global previous/next foreach (array('previous', 'next') as $field) { $nav[$field] = $this->_dbi->{"get_${field}_comic"}(null, $post); } + + // global first/last + if ($root_category = $this->_storyline->root_category) { + foreach (array('first', 'last') as $field) { + $nav[$field] = $this->_dbi->{"get_${field}_comic"}($root_category); + } + } + + if ($category = $this->_storyline->get_valid_post_category($post->ID)) { + // storyline previous/next + foreach (array('previous', 'next') as $field) { + $nav["storyline-${field}"] = $this->_dbi->{"get_${field}_comic"}($category, $post); + } + + // adjacent storyline nodes + if (is_array($valid = $this->_storyline->valid($category))) { + foreach ($valid as $field) { + $nav["storyline-chapter-${field}"] = $this->_dbi->get_first_comic($this->_storyline->{$field}($category)); + } + } + } } } diff --git a/classes/ComicPressStoryline.inc b/classes/ComicPressStoryline.inc index f6e1c83..4acc4db 100644 --- a/classes/ComicPressStoryline.inc +++ b/classes/ComicPressStoryline.inc @@ -3,7 +3,7 @@ require_once('ComicPressDBInterface.inc'); class ComicPressStoryline { - var $_structure; + var $_structure, $root_category; /** * Create a searchable structure from a node list. @@ -14,6 +14,7 @@ class ComicPressStoryline { $new_structure = array(); $parent = null; $all_leaves = array(); + $this->root_category = false; $adjacents_by_parent = array(); @@ -42,6 +43,8 @@ class ComicPressStoryline { $adjacents_by_parent[$parent][] = $leaf; $data['parent'] = $parent; + } else { + $this->root_category = $leaf; } $new_structure[$leaf] = $data; @@ -51,18 +54,8 @@ class ComicPressStoryline { } } if ($is_valid) { - foreach ($adjacents_by_parent as $parent => $adjacents) { - for ($i = 0; $i < count($adjacents); ++$i) { - foreach (array('previous' => -1, 'next' => 1) as $type => $dir) { - if (isset($adjacents[$i + $dir])) { - $new_structure[$adjacents[$i]][$type] = $adjacents[$i + $dir]; - } - } - } - } - for ($i = 0; $i < count($all_leaves); ++$i) { - foreach (array('prior' => -1, 'upcoming' => 1) as $type => $dir) { + foreach (array('previous' => -1, 'next' => 1) as $type => $dir) { if (isset($all_leaves[$i + $dir])) { $new_structure[$all_leaves[$i]][$type] = $all_leaves[$i + $dir]; } @@ -89,8 +82,6 @@ class ComicPressStoryline { function parent($id) { return $this->_get_field('parent', $id); } function previous($id) { return $this->_get_field('previous', $id); } function next($id) { return $this->_get_field('next', $id); } - function upcoming($id) { return $this->_get_field('upcoming', $id); } - function prior($id) { return $this->_get_field('prior', $id); } function valid($id) { if (isset($this->_structure[$id])) { return array_keys($this->_structure[$id]); diff --git a/functions.php b/functions.php index 1dfc6eb..049375d 100644 --- a/functions.php +++ b/functions.php @@ -16,7 +16,7 @@ function __comicpress_init() { $comicpress = new ComicPress(); $comicpress->init(); - $addons = array(); + $addons = array(); if (is_dir($addons_dir = (dirname(__FILE__) . '/addons'))) { $entries = glob($addons_dir . '/*'); @@ -29,11 +29,11 @@ function __comicpress_init() { $classname = "ComicPressAddon${classname}"; if (class_exists($classname)) { $addon =& new $classname(); - - if ( - $comicpress->comicpress_options['addons'][$addon->name] || - $addon->is_addon_manager - ) { + + if ( + $comicpress->comicpress_options['addons'][$addon->name] || + $addon->is_addon_manager + ) { $addon->init(&$comicpress); if (current_user_can('edit_posts')) { if (is_array($_REQUEST['cp'])) { @@ -51,7 +51,7 @@ function __comicpress_init() { } else { add_action('wp_head', array(&$addon, 'display_messages')); } - } + } } $addons[] = $addon; } @@ -59,10 +59,10 @@ function __comicpress_init() { } } } - } - - foreach ($addons as $addon) { - if ($addon->is_addon_manager) { $addon->all_addons =& $addons; break; } + } + + foreach ($addons as $addon) { + if ($addon->is_addon_manager) { $addon->all_addons =& $addons; break; } } $layouts = $comicpress->get_layout_choices(); @@ -119,8 +119,6 @@ function include_partial($partials = '') { function in_comic_category() { global $post, $comicpress; - - return $comicpress->in_comic_category($post->ID); } /** diff --git a/index.php b/index.php index b9584f9..708c416 100644 --- a/index.php +++ b/index.php @@ -1,9 +1,14 @@ get_terminal_post_in_category(3, true)); + var_dump($dbi->get_terminal_post_in_category(3, false)); + exit(0); + comicpress_init(); - $nav_comics = $comicpress->get_nav_comics(); + $nav_comics = array(); $t = $post; $post = $nav_comics['last']; setup_postdata($post); diff --git a/test/ComicPressNavigationTest.php b/test/ComicPressNavigationTest.php index 4b217ca..93c740e 100644 --- a/test/ComicPressNavigationTest.php +++ b/test/ComicPressNavigationTest.php @@ -14,17 +14,32 @@ class ComicPressNavigationTest extends PHPUnit_Framework_TestCase { } function testGetPostNav() { - $dbi = $this->getMock('ComicPressDBInterface', array('get_previous_comic', 'get_next_comic')); + $dbi = $this->getMock('ComicPressDBInterface', array('get_previous_comic', 'get_next_comic', 'get_first_comic', 'get_last_comic')); + $storyline = new ComicPressStoryline(); + + $storyline->root_category = 1; + $storyline->_structure = array( + '1' => array('next' => 2), + '2' => array('previous' => 1, 'next' => 3), + '3' => array('previous' => 2) + ); wp_insert_post(array('ID' => 1)); $post = get_post(1); - wp_set_post_categories(1, array(1)); + wp_set_post_categories(1, array(2)); - $dbi->expects($this->once())->method('get_previous_comic')->with(null, $post); - $dbi->expects($this->once())->method('get_next_comic')->with(null, $post); + $dbi->expects($this->at(0))->method('get_previous_comic')->with(null, $post); + $dbi->expects($this->at(1))->method('get_next_comic')->with(null, $post); + $dbi->expects($this->at(2))->method('get_first_comic')->with(1); + $dbi->expects($this->at(3))->method('get_last_comic')->with(1); + $dbi->expects($this->at(4))->method('get_previous_comic')->with(2, $post); + $dbi->expects($this->at(5))->method('get_next_comic')->with(2, $post); + $dbi->expects($this->at(6))->method('get_first_comic')->with(1); + $dbi->expects($this->at(7))->method('get_first_comic')->with(3); $this->nav->_dbi = $dbi; + $this->nav->_storyline = $storyline; $this->nav->get_post_nav($post); } diff --git a/test/ComicPressStorylineTest.php b/test/ComicPressStorylineTest.php index 52d2d38..f28a464 100644 --- a/test/ComicPressStorylineTest.php +++ b/test/ComicPressStorylineTest.php @@ -14,60 +14,69 @@ class ComicPressStorylineTest extends PHPUnit_Framework_TestCase { function providerTestCreateStorylineStructure() { return array( array( + false, false, false ), array( array('0'), + false, false ), array( array('1'), + false, false ), array( array(array(0,1)), + false, false ), array( array('0/1'), - array('1' => array()) + array('1' => array()), + 1 ), array( array('0/1', '0/1/2'), - array('1' => array('upcoming' => 2), '2' => array('parent' => 1, 'prior' => 1)) + array('1' => array('next' => 2), '2' => array('parent' => 1, 'previous' => 1)), + 1 ), array( array('0/1', '0/1/2', '0/1/3'), array( - '1' => array('upcoming' => 2), - '2' => array('parent' => 1, 'next' => 3, 'prior' => 1, 'upcoming' => 3), - '3' => array('parent' => 1, 'previous' => 2, 'prior' => 2), - ) + '1' => array('next' => 2), + '2' => array('parent' => 1, 'previous' => 1, 'next' => 3), + '3' => array('parent' => 1, 'previous' => 2), + ), + 1 ), array( array('0/1', '0/1/2', '0/1/2/3', '0/1/2/4', '0/1/5'), array( - '1' => array('upcoming' => 2), - '2' => array('parent' => 1, 'next' => 5, 'upcoming' => 3, 'prior' => 1), - '3' => array('parent' => 2, 'next' => 4, 'upcoming' => 4, 'prior' => 2), - '4' => array('parent' => 2, 'previous' => 3, 'upcoming' => 5, 'prior' => 3), - '5' => array('parent' => 1, 'previous' => 2, 'prior' => 4), - ) + '1' => array('next' => 2), + '2' => array('parent' => 1, 'next' => 3, 'previous' => 1), + '3' => array('parent' => 2, 'next' => 4, 'previous' => 2), + '4' => array('parent' => 2, 'next' => 5, 'previous' => 3), + '5' => array('parent' => 1, 'previous' => 4), + ), + 1 ), array( array('0/1', '0/1/2', '0/1/2/3', '0/1/2/4', '0/1/5', '0/1/5/6', '0/1/5/7', '0/1/5/8', '0/1/9'), array( - '1' => array('upcoming' => 2), - '2' => array('parent' => 1, 'next' => 5, 'upcoming' => 3, 'prior' => 1), - '3' => array('parent' => 2, 'next' => 4, 'upcoming' => 4, 'prior' => 2), - '4' => array('parent' => 2, 'previous' => 3, 'upcoming' => 5, 'prior' => 3), - '5' => array('parent' => 1, 'previous' => 2, 'next' => 9, 'upcoming' => 6, 'prior' => 4), - '6' => array('parent' => 5, 'next' => 7, 'upcoming' => 7, 'prior' => 5), - '7' => array('parent' => 5, 'previous' => 6, 'next' => 8, 'upcoming' => 8, 'prior' => 6), - '8' => array('parent' => 5, 'previous' => 7, 'upcoming' => 9, 'prior' => 7), - '9' => array('parent' => 1, 'previous' => 5, 'prior' => 8), - ) + '1' => array('next' => 2), + '2' => array('parent' => 1, 'next' => 3, 'previous' => 1), + '3' => array('parent' => 2, 'next' => 4, 'previous' => 2), + '4' => array('parent' => 2, 'next' => 5, 'previous' => 3), + '5' => array('parent' => 1, 'next' => 6, 'previous' => 4), + '6' => array('parent' => 5, 'next' => 7, 'previous' => 5), + '7' => array('parent' => 5, 'next' => 8, 'previous' => 6), + '8' => array('parent' => 5, 'next' => 9, 'previous' => 7), + '9' => array('parent' => 1, 'previous' => 8), + ), + 1 ), ); } @@ -75,23 +84,19 @@ class ComicPressStorylineTest extends PHPUnit_Framework_TestCase { /** * @dataProvider providerTestCreateStorylineStructure */ - function testCreateStorylineStructure($input, $expected_structure) { + function testCreateStorylineStructure($input, $expected_structure, $expected_root_category) { $this->assertEquals(is_array($expected_structure), $this->css->create_structure($input)); $this->assertEquals($expected_structure, $this->css->_structure); + $this->assertEquals($expected_root_category, $this->css->root_category); } function providerTestGetFields() { return array( array('parent', 1, false), array('parent', 2, 1), + array('next', 2, 3), array('next', 3, 4), - array('next', 4, false), - array('previous', 4, 3), - array('previous', 3, false), - array('previous', 2, false), - array('upcoming', 2, 3), - array('upcoming', 3, 4), - array('valid', 1, array('upcoming')), + array('valid', 1, array('next')), array('valid', 6, false), ); } @@ -101,10 +106,10 @@ class ComicPressStorylineTest extends PHPUnit_Framework_TestCase { */ function testGetFields($field, $category, $expected_value) { $this->css->_structure = array( - '1' => array('upcoming' => 2), - '2' => array('parent' => 1, 'prior' => 1, 'upcoming' => 3), - '3' => array('parent' => 2, 'next' => 4, 'upcoming' => 4, 'prior' => 2), - '4' => array('parent' => 2, 'previous' => 3, 'prior' => 3) + '1' => array('next' => 2), + '2' => array('parent' => 1, 'previous' => 1, 'next' => 3), + '3' => array('parent' => 2, 'next' => 4, 'previous' => 2), + '4' => array('parent' => 2, 'previous' => 3) ); $this->assertEquals($expected_value, $this->css->{$field}($category)); @@ -112,11 +117,11 @@ class ComicPressStorylineTest extends PHPUnit_Framework_TestCase { function providerTestGetValidNav() { return array( - array(array(1), array('upcoming')), + array(array(1), array('next')), array(array(1,2), false), - array(array(1,4), array('upcoming')), - array(array(2), array('prior', 'upcoming', 'next')), - array(array(3), array('prior', 'previous')), + array(array(1,4), array('next')), + array(array(2), array('previous', 'next')), + array(array(3), array('previous')), ); } @@ -127,9 +132,9 @@ class ComicPressStorylineTest extends PHPUnit_Framework_TestCase { wp_set_post_categories(1, $post_categories); $this->css->_structure = array( - '1' => array('upcoming' => 2), - '2' => array('prior' => 1, 'upcoming' => 3, 'next' => 3), - '3' => array('prior' => 2, 'previous' => 2) + '1' => array('next' => 2), + '2' => array('previous' => 1, 'next' => 3), + '3' => array('previous' => 2) ); $this->assertEquals($expected_navigation, $this->css->get_valid_nav(1)); diff --git a/test/ComicPressTest.php b/test/ComicPressTest.php index 6deae7c..e0de19e 100644 --- a/test/ComicPressTest.php +++ b/test/ComicPressTest.php @@ -13,320 +13,6 @@ class ComicPressTest extends PHPUnit_Framework_TestCase { $this->cp = new ComicPress(); } - function testFlattenCategories() { - $cp = $this->getMock('ComicPress', array('get_all_category_objects_by_id')); - - $cp->categories_by_id = array( - '1' => (object)array( - 'term_id' => 1, - 'parent' => 0 - ), - '2' => (object)array( - 'term_id' => 2, - 'parent' => 1 - ), - '3' => (object)array( - 'term_id' => 3, - 'parent' => 0 - ) - ); - - $this->assertEquals(array('0/1', '0/1/2', '0/3'), $cp->flatten_categories()); - } - - function testSeparateCategories() { - $cp = $this->getMock('ComicPress', array('flatten_categories')); - - $cp->category_tree = array('0/1', '0/1/2', '0/3'); - - $cp->comicpress_options['comic_category_id'] = 1; - - $cp->separate_categories(); - - $this->assertEquals(array('0/1', '0/1/2'), $cp->category_tree); - $this->assertEquals(array('0/3'), $cp->non_comic_categories); - } - - function providerSortComicCategories() { - return array( - array(false, array('0/1', '0/2'), array('0/1', '0/2')), - array(array('0/2', '0/1'), array('0/1', '0/2', '0/3'), array('0/2', '0/1', '0/3')) - ); - } - - /** - * @dataProvider providerSortComicCategories - */ - function testSortComicCategories($category_order, $category_tree, $expected_tree) { - $this->cp->comicpress_options['category_order'] = $category_order; - $this->cp->category_tree = $category_tree; - - $this->assertEquals($expected_tree, $this->cp->sort_comic_categories()); - } - - function testGetAllComicCategoriesAsCatString() { - $this->cp->category_tree = array("0/1", "0/2", "0/3"); - $this->assertEquals("1,2,3", $this->cp->get_all_comic_categories_as_cat_string()); - } - - function providerTestInComicCategory() { - return array( - array(array(1), false), - array(array(2), true) - ); - } - - /** - * @dataProvider providerTestInComicCategory - */ - function testInComicCategory($post_categories, $is_in_category) { - $this->cp->category_tree = array('0/2'); - wp_set_post_categories(1, $post_categories); - - $this->assertEquals($is_in_category, $this->cp->in_comic_category(1)); - } - - function providerTestGetNavComics() { - return array( - array( - array( - 'first' => 1, - 'previous' => 2, - 'next' => 4, - 'last' => 5 - ), - 3, - array( - 'first' => true, - 'previous' => true, - 'next' => true, - 'last' => true - ) - ), - array( - array( - 'first' => 1, - 'previous' => false, - 'next' => false, - 'last' => 1 - ), - 1, - array( - 'first' => false, - 'previous' => false, - 'next' => false, - 'last' => false - ) - ), - array( - array( - 'first' => 1, - 'previous' => false, - 'next' => 3, - 'last' => 3 - ), - 1, - array( - 'first' => false, - 'previous' => false, - 'next' => false, - 'last' => true - ) - ), - array( - array( - 'first' => 1, - 'previous' => 1, - 'next' => false, - 'last' => 3 - ), - 3, - array( - 'first' => true, - 'previous' => false, - 'next' => false, - 'last' => false - ) - ) - ); - } - - /** - * @dataProvider providerTestGetNavComics - */ - function testGetNavComics($nav_comics, $given_post, $expected_shows) { - global $post; - - $cp = $this->getMock('ComicPress', array('get_first_comic', 'get_last_comic', 'get_previous_comic', 'get_next_comic')); - foreach ($nav_comics as $key => $result) { - $return = (is_numeric($result)) ? (object)array('ID' => $result) : false; - $cp->expects($this->once())->method("get_${key}_comic")->will($this->returnValue($return)); - } - - $post = (is_numeric($given_post)) ? (object)array('ID' => $given_post) : false; - - $comic_posts = $cp->get_nav_comics(); - - foreach ($expected_shows as $show => $expected) { - $this->assertEquals($expected, $comic_posts["show_${show}"], $show); - } - } - - function providerTestGetNavStorylineEnabled() { - return array( - array( - array('10'), - array( - '10' => array( - '10' => array('previous' => '9', 'next' => '11') - ) - ), - array( - '9' => true, - '11' => true - ), - array( - 'prior' => true, - 'upcoming' => true - ) - ), - array( - array('10', '20'), - array( - '10' => array( - '10' => array('previous' => '7', 'next' => '3') - ), - '20' => array( - '20' => array('previous' => '9', 'next' => '11') - ), - ), - array( - '9' => true, - '11' => true - ), - array( - 'prior' => true, - 'upcoming' => true - ) - ), - array( - array('10'), - array( - '10' => array( - '10' => array('previous' => '7', 'next' => '3') - ), - ), - array( - '15' => true, - '20' => true - ), - array( - 'prior' => false, - 'upcoming' => false - ) - ), - array( - array('10'), - array( - '10' => array( - '7' => array('previous' => '15', 'next' => '20') - ), - ), - array( - '15' => true, - '20' => true - ), - array( - 'prior' => true, - 'upcoming' => true - ) - ), - ); - } - - /** - * @dataProvider providerTestGetNavStorylineEnabled - */ - function testGetNavComicsStorylineEnabled($post_categories, $previous_next_categories, $terminal_comics, $expected_results) { - $cp = $this->getMock('ComicPress', array('get_sorted_post_categories', 'get_previous_next_categories', 'get_last_comic', 'get_first_comic')); - - $cp->expects($this->once())->method('get_sorted_post_categories')->will($this->returnValue($post_categories)); - $cp->expects($this->any())->method('get_previous_next_categories')->will($this->returnCallback(array(&$this, 'callbackGetPreviousNextCategories'))); - $cp->expects($this->any())->method('get_first_comic')->will($this->returnCallback(array(&$this, 'callbackGetTerminalComic'))); - $cp->expects($this->any())->method('get_last_comic')->will($this->returnCallback(array(&$this, 'callbackGetTerminalComic'))); - - $this->_previous_next_categories = $previous_next_categories; - $this->_terminal_comics = $terminal_comics; - - $result = $cp->get_storyline_nav_comics(); - foreach ($expected_results as $field => $value) { - $this->assertEquals($value, $result["show_${field}"]); - } - } - - function callbackGetPreviousNextCategories($id) { - return $this->_previous_next_categories[$id]; - } - - function callbackGetTerminalComic($id) { - return isset($this->_terminal_comics[$id]) ? (object)array() : false; - } - - function providerTestGetPreviousNextCategories() { - return array( - array( - array( - '0/1' - ), - 1, - array() - ), - array( - array( - '0/1', - '0/1/2' - ), - 2, - array() - ), - array( - array( - '0/1', - '0/1/2', - '0/1/3', - ), - 2, - array( - '1' => array('next' => 3) - ) - ), - array( - array( - '0/1', - '0/1/6', - '0/1/2', - '0/1/2/4', - '0/1/2/5', - '0/1/3', - ), - 5, - array( - '2' => array('previous' => 4), - '1' => array('previous' => 6, 'next' => 3), - ) - ), - ); - } - - /** - * @dataProvider providerTestGetPreviousNextCategories - */ - function testGetPreviousNextCategories($category_tree, $current_category, $expected_prev_nexts) { - $this->cp->category_tree = $category_tree; - - $this->assertEquals($expected_prev_nexts, $this->cp->get_previous_next_categories($current_category)); - } - function providerTestGetLayoutChoices() { return array( array(