new ReleaseStatus(ReleaseState::Untested, '5.3.0')); // Nothing may be written: every write function WordPress offers fails the test. foreach (['wp_update_post', 'wp_insert_post', 'update_post_meta', 'add_post_meta', 'delete_post_meta', 'update_option', 'delete_option', 'wp_set_object_terms'] as $write) { Functions\when($write)->alias(static function () use ($write): never { self::fail($write . ' ran although Divi is locked'); }); } Functions\when('current_user_can')->justReturn(true); } /** @return iterable */ public static function writes(): iterable { $post = new WP_Post(['ID' => 7, 'post_content' => '', 'post_type' => 'page']); $spec = new LibraryItemSpec('Hero', 'section', false, 'regular', null, 'page'); yield 'save' => [static fn () => (new DiviSaver())->save($post, '')]; yield 'saveNew' => [static fn () => (new DiviSaver())->saveNew(7, '')]; yield 'library create' => [static fn () => (new DiviLibraryStore())->create( $spec, new NewDraft(null, FakeChangeLog::forbidden(), 'lit/library-save', 'et_pb_layout', 'Bibliothekseintrag') )]; yield 'tb insertLayout' => [static fn () => (new DiviThemeBuilder())->insertLayout('header', 'Kopf')]; yield 'tb storeTemplate' => [static fn () => (new DiviThemeBuilder())->storeTemplate(3, [ 'title' => 'V', 'layouts' => [], 'use_on' => [], 'exclude_from' => [], ])]; yield 'tb attach' => [static fn () => (new DiviThemeBuilder())->attach(3, 9)]; yield 'tb detach' => [static fn () => (new DiviThemeBuilder())->detach(3, 9)]; yield 'tb setConditions' => [static fn () => (new DiviThemeBuilder())->setConditions(9, ['singular'], [])]; yield 'tb setEnabled' => [static fn () => (new DiviThemeBuilder())->setEnabled(9, true)]; yield 'tb unmarkUnused' => [static fn () => (new DiviThemeBuilder())->unmarkUnused(9)]; yield 'pages setFlags' => [static fn () => DiviPages::setFlags(7)]; yield 'tb liveId create' => [static fn () => (new DiviThemeBuilder())->liveId(true)]; } /** @dataProvider writes */ public function testRefusesBeforeTheFirstWrite(callable $write): void { $this->expectException(DiviLocked::class); $write(); } public function testTheCheckPageMayBeWrittenWhileProbing(): void { Functions\when('wp_update_post')->justReturn(41); Functions\when('update_post_meta')->justReturn(true); Functions\when('get_post_meta')->alias( static fn (int $id, string $key): string => $key === '_et_pb_show_page_creation' ? 'off' : 'on' ); Functions\when('get_post')->justReturn(new WP_Post(['ID' => 41, 'post_content' => 'x'])); Functions\when('has_filter')->justReturn(false); $warnings = ReleaseGate::whileProbing(41, static fn () => (new DiviSaver())->saveNew(41, 'x')); self::assertSame([], $warnings); } }