'mock-widget', 'elType' => 'widget', 'isInner' => false, 'settings' => [ 'text' => 'I\'m just a mock', ], 'elements' => [], 'widgetType' => 'button', ]; const DEFAULT_DYNAMIC_WIDGET_DATA_MOCK = [ 'id' => 'mock-widget-dynamic', 'elType' => 'widget', 'settings' => [ 'title' => 'Add Your Heading Text Here', 'link' => [ 'custom_attributes' => '', 'is_external' => '', 'nofollow' => '', 'url' => 'http://just-a-mock.com', ], '__dynamic__' => [ 'title' => '[elementor-tag id="2e7ade9" name="post-title" settings="%7B%7D"]', 'link' => '[elementor-tag id="68a0003" name="post-url" settings="%7B%7D"]', ], ], 'elements' => [], 'widgetType' => 'heading', ]; const DEFAULT_DOCUMENT_DATA_MOCK = [ [ 'id' => 'mock-section', 'elType' => 'section', 'isInner' => false, 'settings' => [ 'post_status' => 'new', ], 'elements' => [ [ 'id' => 'mock-column', 'elType' => 'column', 'isInner' => false, 'settings' => [ '_column_size' => 100, ], 'elements' => [ self::DEFAULT_WIDGET_DATA_MOCK ], ], ], ], ]; const DOCUMENT_DATA_MOCK_WITHOUT_ELEMENTS = [ 'settings' => [ 'post_status' => 'publish', ], 'elements' => [], ]; const DOCUMENT_DATA_MOCK_WITH_DYNAMIC_WIDGET = [ [ 'id' => 'mock-section', 'elType' => 'section', 'isInner' => false, 'settings' => [ 'post_status' => 'new', ], 'elements' => [ [ 'id' => 'mock-column', 'elType' => 'column', 'isInner' => false, 'settings' => [ '_column_size' => 100, ], 'elements' => [ self::DEFAULT_DYNAMIC_WIDGET_DATA_MOCK ], ], ], ], ]; public function __construct( $factory = null ) { parent::__construct( $factory ); $this->default_generation_definitions = [ 'post_title' => new \WP_UnitTest_Generator_Sequence( 'Elementor post title %s' ), 'post_content' => new \WP_UnitTest_Generator_Sequence( 'Elementor post content %s' ), 'post_excerpt' => new \WP_UnitTest_Generator_Sequence( 'Elementor post excerpt %s' ), 'post_type' => 'post', ]; } public function create_object( $args ) { $type = 'page'; $meta = []; if ( isset( $args['post_type'] ) ) { $type = $args['post_type']; unset( $args['post_type'] ); } if ( isset( $args['meta_input'] ) ) { $meta = $args['meta_input']; unset( $args['meta_input'] ); } if ( empty( $meta['_elementor_data'] ) ) { $meta['_elementor_data'] = wp_json_encode( self::DEFAULT_DOCUMENT_DATA_MOCK ); } return Plugin::$instance->documents->create( $type, $args, $meta )->get_id(); } public function update_object( $document_id, $fields ) { $fields['ID'] = $document_id; wp_update_post( $fields ); return Plugin::$instance->documents->get( $document_id, false ); } public function get_object_by_id( $document_id ) { return Plugin::$instance->documents->get( $document_id, false ); } /** * publish_and_get. * * Why this method exists and called the way it do? * * Naming: called the way it do to follow PHPUnit convection. * Why publish after create? It have to behave in the same way it do in real-world. * elementor never create a document that already published ( Other system depends on this behavior). * * @param array $args * * @return \Elementor\Core\Base\Document|false */ public function publish_and_get( $args = [] ) { $document = $this->create_and_get( $args ); return $this->update_object( $document->get_id(), [ 'post_status' => 'publish' ] ); } }