WordPress.org

Make WordPress Core


Ignore:
Timestamp:
03/12/2021 01:33:21 PM (9 months ago)
Author:
gziolo
Message:

Editor: Make block type aware of variations

Currently block variations are only defined on the client. In some cases, creating block variations on the server can be very useful, especially when needed data is not exposed in the REST APIs.

Related to https://github.com/WordPress/gutenberg/pull/29095.

Props: gwwar, timothyblynjacobs.
Fixes: #52688.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/rest-api/rest-block-type-controller.php

    r49603 r50527  
    225225            'render_callback'  => 'invalid_callback',
    226226            'textdomain'       => true,
     227            'variations'       => 'invalid_variations',
    227228        );
    228229        register_block_type( $block_type, $settings );
     
    250251        $this->assertNull( $data['textdomain'] );
    251252        $this->assertFalse( $data['is_dynamic'] );
     253        $this->assertSameSets( array( array() ), $data['variations'] );
    252254    }
    253255
     
    276278            'textdomain'       => false,
    277279            'example'          => false,
     280            'variations'       => false,
    278281        );
    279282        register_block_type( $block_type, $settings );
     
    302305        $this->assertNull( $data['textdomain'] );
    303306        $this->assertFalse( $data['is_dynamic'] );
     307        $this->assertSameSets( array(), $data['variations'] );
     308    }
     309
     310    public function test_get_variation() {
     311        $block_type = 'fake/variations';
     312        $settings   = array(
     313            'title'       => 'variations block test',
     314            'description' => 'a variations block test',
     315            'attributes'  => array( 'kind' => array( 'type' => 'string' ) ),
     316            'variations'  => array(
     317                array(
     318                    'name'        => 'variation',
     319                    'title'       => 'variation title',
     320                    'description' => 'variation description',
     321                    'category'    => 'media',
     322                    'icon'        => 'checkmark',
     323                    'attributes'  => array( 'kind' => 'foo' ),
     324                    'isDefault'   => true,
     325                    'example'     => array( 'attributes' => array( 'kind' => 'example' ) ),
     326                    'scope'       => array( 'inserter', 'block' ),
     327                    'keywords'    => array( 'dogs', 'cats', 'mice' ),
     328                    'innerBlocks' => array(
     329                        array(
     330                            'name'       => 'fake/bar',
     331                            'attributes' => array( 'label' => 'hi' ),
     332                        ),
     333                    ),
     334                ),
     335            ),
     336        );
     337        register_block_type( $block_type, $settings );
     338        wp_set_current_user( self::$admin_id );
     339        $request  = new WP_REST_Request( 'GET', '/wp/v2/block-types/' . $block_type );
     340        $response = rest_get_server()->dispatch( $request );
     341        $data     = $response->get_data();
     342        $this->assertSame( $block_type, $data['name'] );
     343        $this->assertArrayHasKey( 'variations', $data );
     344        $this->assertSame( 1, count( $data['variations'] ) );
     345        $variation = $data['variations'][0];
     346        $this->assertSame( 'variation title', $variation['title'] );
     347        $this->assertSame( 'variation description', $variation['description'] );
     348        $this->assertSame( 'media', $variation['category'] );
     349        $this->assertSame( 'checkmark', $variation['icon'] );
     350        $this->assertSameSets( array( 'inserter', 'block' ), $variation['scope'] );
     351        $this->assertSameSets( array( 'dogs', 'cats', 'mice' ), $variation['keywords'] );
     352        $this->assertSameSets( array( 'attributes' => array( 'kind' => 'example' ) ), $variation['example'] );
     353        $this->assertSameSets(
     354            array(
     355                array(
     356                    'name'       => 'fake/bar',
     357                    'attributes' => array( 'label' => 'hi' ),
     358                ),
     359            ),
     360            $variation['innerBlocks']
     361        );
     362        $this->assertSameSets(
     363            array( 'kind' => 'foo' ),
     364            $variation['attributes']
     365        );
    304366    }
    305367
     
    313375        $data       = $response->get_data();
    314376        $properties = $data['schema']['properties'];
    315         $this->assertCount( 20, $properties );
     377        $this->assertCount( 21, $properties );
    316378        $this->assertArrayHasKey( 'api_version', $properties );
    317379        $this->assertArrayHasKey( 'title', $properties );
     
    334396        $this->assertArrayHasKey( 'uses_context', $properties );
    335397        $this->assertArrayHasKey( 'provides_context', $properties );
     398        $this->assertArrayHasKey( 'variations', $properties );
    336399    }
    337400
Note: See TracChangeset for help on using the changeset viewer.