Have menus in database!
A not so long test
The last code I had written while trying to walk through the new possibilities of the WPDb
module (part of wp-browser, a Codeception add-on), was not “long” but could be made better.
$I = new AcceptanceTester( $scenario );
$I->wantTo( 'see the main-header id on the main site header on a multi site' );
// setup multisite installation
$I->haveMultisiteInDatabase( true, true );
$I->useMainBlog();
// set the theme to `_blogs`
$I->haveOptionInDatabase( 'template', 'Twentysixteen' );
$I->haveOptionInDatabase( 'stylesheet', '_blogs' );
$I->haveOptionInDatabase( 'current_theme', '_Blogs' );
// add a nav menu
$menu_id = $I->haveTermInDatabase( 'Menu 1', 'nav_menu', [ 'slug' => 'menu1' ] );
// set theme options to use the `primary` location
$I->haveOptionInDatabase( 'theme_mods__blogs', [ 'nav_menu_locations' => [ 'primary' => $menu_id ] ] );
// add one element to the menu
$menu_item_id = $I->havePostInDatabase( [
'post_title' => 'theAverageDev',
'menu_order' => 1,
'post_type' => 'nav_menu_item'
] );
$meta = [
'_menu_item_type' => 'custom',
'_menu_item_object_id' => $menu_item_id,
'_menu_item_object' => 'custom',
'_menu_item_url' => 'http://theaveragedev.local'
];
foreach ( $meta as $key => $value ) {
$I->havePostmetaInDatabase( $menu_item_id, $key, $value );
}
$I->amOnPage('/');
$I->seeElement('div#site-header-menu > nav.main-navigation');
$I->seeElement('div#site-header-menu > nav.main-header');
In a coding effort I’ve pushed version 1.9.2 of WPBrowser to GitHub and that allows rewriting the code above to this
$I = new AcceptanceTester( $scenario );
$I->wantTo( 'see the main-header id on the main site header on a multi site' );
// setup multisite installation
$I->haveMultisiteInDatabase( true, true );
$I->useMainBlog();
// set the theme to `_blogs`
$I->useTheme('_blogs', 'twentysixteen');
// add a nav menu
$I->haveMenuInDatabase('menu1', 'primary');
// add one element to the menu
$I->haveMenuItemInDatabase('menu1', 'Link 1');
$I->amOnPage('/');
$I->seeElement('div#site-header-menu > nav.main-navigation');
$I->seeElement('div#site-header-menu > nav.main-header');
Menus have always been a pain to set up in fixtures due to their terms and posts based structure but this first implementation eases the burden a little.