| | 1 | <?php |
| | 2 | |
| | 3 | /** |
| | 4 | * @group themes |
| | 5 | */ |
| | 6 | class Tests_WP_Theme_Get_Theme_Starter_Content extends WP_UnitTestCase { |
| | 7 | |
| | 8 | /** |
| | 9 | * @var array $core_content Content taken from wp-includes/theme.php. |
| | 10 | */ |
| | 11 | public $core_content; |
| | 12 | |
| | 13 | function setup_core_content() { |
| | 14 | $this->core_content = array( |
| | 15 | 'widgets' => array( |
| | 16 | 'text_business_info' => array( 'text', array( |
| | 17 | 'title' => _x( 'Find Us', 'Theme starter content' ), |
| | 18 | 'text' => join( '', array( |
| | 19 | '<p><strong>' . _x( 'Address', 'Theme starter content' ) . '</strong><br />', |
| | 20 | _x( '123 Main Street', 'Theme starter content' ) . '<br />' . _x( 'New York, NY 10001', 'Theme starter content' ) . '</p>', |
| | 21 | '<p><strong>' . _x( 'Hours', 'Theme starter content' ) . '</strong><br />', |
| | 22 | _x( 'Monday—Friday: 9:00AM–5:00PM', 'Theme starter content' ) . '<br />' . _x( 'Saturday & Sunday: 11:00AM–3:00PM', 'Theme starter content' ) . '</p>' |
| | 23 | ) ), |
| | 24 | ) ), |
| | 25 | 'search' => array( 'search', array( |
| | 26 | 'title' => _x( 'Site Search', 'Theme starter content' ), |
| | 27 | ) ), |
| | 28 | 'text_credits' => array( 'text', array( |
| | 29 | 'title' => _x( 'Site Credits', 'Theme starter content' ), |
| | 30 | 'text' => sprintf( _x( 'This site was created on %s', 'Theme starter content' ), get_date_from_gmt( current_time( 'mysql', 1 ), 'c' ) ), |
| | 31 | ) ), |
| | 32 | ), |
| | 33 | 'nav_menus' => array( |
| | 34 | 'page_home' => array( |
| | 35 | 'type' => 'post_type', |
| | 36 | 'object' => 'page', |
| | 37 | 'object_id' => '{{home}}', |
| | 38 | ), |
| | 39 | 'page_about' => array( |
| | 40 | 'type' => 'post_type', |
| | 41 | 'object' => 'page', |
| | 42 | 'object_id' => '{{about-us}}', |
| | 43 | ), |
| | 44 | 'page_blog' => array( |
| | 45 | 'type' => 'post_type', |
| | 46 | 'object' => 'page', |
| | 47 | 'object_id' => '{{blog}}', |
| | 48 | ), |
| | 49 | 'page_contact' => array( |
| | 50 | 'type' => 'post_type', |
| | 51 | 'object' => 'page', |
| | 52 | 'object_id' => '{{contact-us}}', |
| | 53 | ), |
| | 54 | |
| | 55 | 'link_yelp' => array( |
| | 56 | 'title' => _x( 'Yelp', 'Theme starter content' ), |
| | 57 | 'url' => 'https://www.yelp.com', |
| | 58 | ), |
| | 59 | 'link_facebook' => array( |
| | 60 | 'title' => _x( 'Facebook', 'Theme starter content' ), |
| | 61 | 'url' => 'https://www.facebook.com/wordpress', |
| | 62 | ), |
| | 63 | 'link_twitter' => array( |
| | 64 | 'title' => _x( 'Twitter', 'Theme starter content' ), |
| | 65 | 'url' => 'https://twitter.com/wordpress', |
| | 66 | ), |
| | 67 | 'link_instagram' => array( |
| | 68 | 'title' => _x( 'Instagram', 'Theme starter content' ), |
| | 69 | 'url' => 'https://www.instagram.com/explore/tags/wordcamp/', |
| | 70 | ), |
| | 71 | 'link_email' => array( |
| | 72 | 'title' => _x( 'Email', 'Theme starter content' ), |
| | 73 | 'url' => 'mailto:wordpress@example.com', |
| | 74 | ), |
| | 75 | ), |
| | 76 | 'posts' => array( |
| | 77 | 'home' => array( |
| | 78 | 'post_type' => 'page', |
| | 79 | 'post_title' => _x( 'Homepage', 'Theme starter content' ), |
| | 80 | 'post_content' => _x( 'Welcome home.', 'Theme starter content' ), |
| | 81 | ), |
| | 82 | 'about-us' => array( |
| | 83 | 'post_type' => 'page', |
| | 84 | 'post_title' => _x( 'About Us', 'Theme starter content' ), |
| | 85 | 'post_content' => _x( 'More than you ever wanted to know.', 'Theme starter content' ), |
| | 86 | ), |
| | 87 | 'contact-us' => array( |
| | 88 | 'post_type' => 'page', |
| | 89 | 'post_title' => _x( 'Contact Us', 'Theme starter content' ), |
| | 90 | 'post_content' => _x( 'Call us at 999-999-9999.', 'Theme starter content' ), |
| | 91 | ), |
| | 92 | 'blog' => array( |
| | 93 | 'post_type' => 'page', |
| | 94 | 'post_title' => _x( 'Blog', 'Theme starter content' ), |
| | 95 | ), |
| | 96 | |
| | 97 | 'homepage-section' => array( |
| | 98 | 'post_type' => 'page', |
| | 99 | 'post_title' => _x( 'A homepage section', 'Theme starter content' ), |
| | 100 | 'post_content' => _x( 'This is an example of a homepage section, which are managed in theme options.', 'Theme starter content' ), |
| | 101 | ), |
| | 102 | ), |
| | 103 | ); |
| | 104 | |
| | 105 | } |
| | 106 | |
| | 107 | |
| | 108 | /** |
| | 109 | * Testing passing an empty array |
| | 110 | */ |
| | 111 | function test_add_theme_support_empty() { |
| | 112 | add_theme_support( 'starter-content', array() ); |
| | 113 | $starter_content = get_theme_starter_content(); |
| | 114 | |
| | 115 | $this->assertEmpty( $starter_content ); |
| | 116 | } |
| | 117 | |
| | 118 | /** |
| | 119 | * Testing passing no parameter. |
| | 120 | */ |
| | 121 | function test_add_theme_support_single_param() { |
| | 122 | add_theme_support( 'starter-content' ); |
| | 123 | $starter_content = get_theme_starter_content(); |
| | 124 | |
| | 125 | $this->assertEmpty( $starter_content ); |
| | 126 | } |
| | 127 | |
| | 128 | |
| | 129 | /** |
| | 130 | * Testing the items that have cases. |
| | 131 | * |
| | 132 | * Testing the text_credits content is problematic as the the dates won't match |
| | 133 | * so it's not included here. |
| | 134 | * |
| | 135 | * @dataProvider data_default_content_sections |
| | 136 | * |
| | 137 | */ |
| | 138 | function test_default_content_sections( $content, $expected_content ) { |
| | 139 | |
| | 140 | add_theme_support( 'starter-content', $content ); |
| | 141 | |
| | 142 | $starter_content = get_theme_starter_content(); |
| | 143 | |
| | 144 | $this->assertSame( $expected_content, $starter_content ); |
| | 145 | } |
| | 146 | |
| | 147 | /** |
| | 148 | * Dataprovider for test_default_content_sections |
| | 149 | * |
| | 150 | * @return array { |
| | 151 | * array { |
| | 152 | * array The content to pass to add_theme_support. |
| | 153 | * array The expected output. |
| | 154 | * } |
| | 155 | * } |
| | 156 | */ |
| | 157 | function data_default_content_sections() { |
| | 158 | |
| | 159 | $this->setup_core_content(); |
| | 160 | |
| | 161 | return array( |
| | 162 | // Widgets |
| | 163 | array( |
| | 164 | array( |
| | 165 | 'widgets' => array( |
| | 166 | 'sidebar-1' => array( |
| | 167 | 'text_business_info', |
| | 168 | 'search', |
| | 169 | ), |
| | 170 | ), |
| | 171 | ), |
| | 172 | array( |
| | 173 | 'widgets' => array( |
| | 174 | 'sidebar-1' => array( |
| | 175 | $this->core_content['widgets']['text_business_info'], |
| | 176 | $this->core_content['widgets']['search'], |
| | 177 | ), |
| | 178 | ), |
| | 179 | ), |
| | 180 | ), |
| | 181 | |
| | 182 | // Nav Menus. |
| | 183 | array( |
| | 184 | array( |
| | 185 | 'nav_menus' => array( |
| | 186 | 'top' => array( |
| | 187 | 'name' => 'Menu Name', |
| | 188 | 'items' => array( |
| | 189 | 'page_home', |
| | 190 | 'page_about', |
| | 191 | 'page_blog', |
| | 192 | 'page_contact', |
| | 193 | 'link_yelp', |
| | 194 | 'link_facebook', |
| | 195 | 'link_twitter', |
| | 196 | 'link_instagram', |
| | 197 | 'link_email', |
| | 198 | ), |
| | 199 | ), |
| | 200 | ), |
| | 201 | ), |
| | 202 | array( |
| | 203 | 'nav_menus' => array( |
| | 204 | 'top' => array( |
| | 205 | 'name' => 'Menu Name', |
| | 206 | 'items' => array( |
| | 207 | $this->core_content['nav_menus']['page_home'], |
| | 208 | $this->core_content['nav_menus']['page_about'], |
| | 209 | $this->core_content['nav_menus']['page_blog'], |
| | 210 | $this->core_content['nav_menus']['page_contact'], |
| | 211 | $this->core_content['nav_menus']['link_yelp'], |
| | 212 | $this->core_content['nav_menus']['link_facebook'], |
| | 213 | $this->core_content['nav_menus']['link_twitter'], |
| | 214 | $this->core_content['nav_menus']['link_instagram'], |
| | 215 | $this->core_content['nav_menus']['link_email'], |
| | 216 | ), |
| | 217 | ), |
| | 218 | ), |
| | 219 | ), |
| | 220 | ), |
| | 221 | // Posts. |
| | 222 | array( |
| | 223 | array( |
| | 224 | 'posts' => array( |
| | 225 | 'home', |
| | 226 | 'about-us', |
| | 227 | 'contact-us', |
| | 228 | 'blog', |
| | 229 | 'homepage-section', |
| | 230 | ), |
| | 231 | ), |
| | 232 | array( |
| | 233 | 'posts' => $this->core_content['posts'], |
| | 234 | ), |
| | 235 | ), |
| | 236 | |
| | 237 | // Options |
| | 238 | array( |
| | 239 | array( |
| | 240 | 'options' => array( |
| | 241 | 'show_on_front' => 'page', |
| | 242 | 'page_on_front' => '{{home}}', |
| | 243 | 'page_for_posts' => '{{blog}}', |
| | 244 | ), |
| | 245 | ), |
| | 246 | array( |
| | 247 | 'options' => array( |
| | 248 | 'show_on_front' => 'page', |
| | 249 | 'page_on_front' => '{{home}}', |
| | 250 | 'page_for_posts' => '{{blog}}', |
| | 251 | ), |
| | 252 | ), |
| | 253 | ), |
| | 254 | |
| | 255 | //Theme mods. |
| | 256 | array( |
| | 257 | array( |
| | 258 | 'theme_mods' => array( |
| | 259 | 'panel_1' => '{{homepage-section}}', |
| | 260 | 'panel_2' => '{{about-us}}', |
| | 261 | 'panel_3' => '{{blog}}', |
| | 262 | 'panel_4' => '{{contact-us}}', |
| | 263 | ), |
| | 264 | ), |
| | 265 | array( |
| | 266 | 'theme_mods' => array( |
| | 267 | 'panel_1' => '{{homepage-section}}', |
| | 268 | 'panel_2' => '{{about-us}}', |
| | 269 | 'panel_3' => '{{blog}}', |
| | 270 | 'panel_4' => '{{contact-us}}', |
| | 271 | ), |
| | 272 | ), |
| | 273 | ), |
| | 274 | ); |
| | 275 | } |
| | 276 | |
| | 277 | /** |
| | 278 | * Testing the filter with the text_credits widget. |
| | 279 | */ |
| | 280 | function test_get_theme_starter_content_filter() { |
| | 281 | |
| | 282 | add_theme_support( 'starter-content', |
| | 283 | array( |
| | 284 | 'widgets' => array( |
| | 285 | 'sidebar-1' => array( |
| | 286 | 'text_credits', |
| | 287 | ), |
| | 288 | ), |
| | 289 | ) |
| | 290 | ); |
| | 291 | |
| | 292 | $expected = array( |
| | 293 | 'widgets' => array( |
| | 294 | 'sidebar-1' => array( |
| | 295 | array( |
| | 296 | 'text', |
| | 297 | array( |
| | 298 | 'title' => __( 'Site Credits' ), |
| | 299 | 'text' => 'Changed to a hardcoded string', |
| | 300 | ), |
| | 301 | ), |
| | 302 | ), |
| | 303 | ), |
| | 304 | ); |
| | 305 | |
| | 306 | add_filter( 'get_theme_starter_content', array( $this, 'filter_text_credits' ) ); |
| | 307 | $starter_content = get_theme_starter_content(); |
| | 308 | $this->assertSame( $expected , $starter_content ); |
| | 309 | } |
| | 310 | |
| | 311 | /** |
| | 312 | * Filter the text_widget to remove the dynamic time. |
| | 313 | * |
| | 314 | * @param $content |
| | 315 | * |
| | 316 | * @return mixed |
| | 317 | */ |
| | 318 | public function filter_text_credits( $content ) { |
| | 319 | $content['widgets']['sidebar-1'][0] = array( |
| | 320 | 'text', |
| | 321 | array( |
| | 322 | 'title' => __( 'Site Credits' ), |
| | 323 | 'text' => 'Changed to a hardcoded string', |
| | 324 | ), |
| | 325 | |
| | 326 | ); |
| | 327 | return $content; |
| | 328 | } |
| | 329 | |
| | 330 | } |
| | 331 | |