justReturn(['primary-menu' => 'Hauptmenü']); Functions\expect('wp_create_nav_menu')->never(); $ability = new MenuCreateAbility(Mockery::mock(ChangeLog::class)); $result = $ability->execute(['name' => 'Neu', 'location' => 'nope']); self::assertSame('lit_validation_failed', $result->get_error_code()); self::assertStringContainsString('primary-menu', $result->get_error_message()); } public function testExistingNameIsAValidationError(): void { Functions\when('wp_create_nav_menu')->justReturn( new WP_Error('menu_exists', 'Der Menüname existiert bereits.') ); $result = (new MenuCreateAbility(Mockery::mock(ChangeLog::class)))->execute(['name' => 'Hauptmenü']); self::assertSame('lit_validation_failed', $result->get_error_code()); } public function testCreatesAndAssignsTheLocation(): void { Functions\when('get_registered_nav_menus')->justReturn(['primary-menu' => 'Hauptmenü']); Functions\expect('wp_create_nav_menu')->once()->with('Neu')->andReturn(8); Functions\when('get_nav_menu_locations')->justReturn(['footer-menu' => 2]); Functions\expect('set_theme_mod')->once()->with( 'nav_menu_locations', ['footer-menu' => 2, 'primary-menu' => 8] ); $log = Mockery::mock(ChangeLog::class); $log->expects('record') ->with('lit/menu-create', 'nav_menu', '8', 'Menü "Neu" angelegt (Position primary-menu)') ->andReturn(5); $result = (new MenuCreateAbility($log))->execute(['name' => 'Neu', 'location' => 'primary-menu']); self::assertSame(8, $result['menu_id']); self::assertSame('created', $result['changed'][0]['action']); } }