@@ -358,4 +358,134 @@ public function test_get_user_data_from_wp_global_styles_does_not_use_uncached_q
358
358
$ user_cpt = WP_Theme_JSON_Resolver_Gutenberg::get_user_data_from_wp_global_styles ( $ theme );
359
359
$ this ->assertEmpty ( $ user_cpt , 'User CPT is expected to be empty. ' );
360
360
}
361
+
362
+ /**
363
+ * Test that get_merged_data returns the data merged up to the proper origin.
364
+ *
365
+ * @covers WP_Theme_JSON_Resolver::get_merged_data
366
+ *
367
+ * @dataProvider data_get_merged_data_returns_origin
368
+ *
369
+ * @param string $origin What origin to get data from.
370
+ * @param bool $core_palette Whether the core palette is present.
371
+ * @param string $core_palette_text Message.
372
+ * @param string $block_styles Whether the block styles are present.
373
+ * @param string $block_styles_text Message.
374
+ * @param bool $theme_palette Whether the theme palette is present.
375
+ * @param string $theme_palette_text Message.
376
+ * @param bool $user_palette Whether the user palette is present.
377
+ * @param string $user_palette_text Message.
378
+ */
379
+ public function test_get_merged_data_returns_origin ( $ origin , $ core_palette , $ core_palette_text , $ block_styles , $ block_styles_text , $ theme_palette , $ theme_palette_text , $ user_palette , $ user_palette_text ) {
380
+ // Make sure there is data from the blocks origin.
381
+ register_block_type (
382
+ 'my/block-with-styles ' ,
383
+ array (
384
+ 'api_version ' => 2 ,
385
+ 'attributes ' => array (
386
+ 'borderColor ' => array (
387
+ 'type ' => 'string ' ,
388
+ ),
389
+ 'style ' => array (
390
+ 'type ' => 'object ' ,
391
+ ),
392
+ ),
393
+ 'supports ' => array (
394
+ '__experimentalStyle ' => array (
395
+ 'typography ' => array (
396
+ 'fontSize ' => '42rem ' ,
397
+ ),
398
+ ),
399
+ ),
400
+ )
401
+ );
402
+
403
+ // Make sure there is data from the theme origin.
404
+ switch_theme ( 'block-theme ' );
405
+
406
+ // Make sure there is data from the user origin.
407
+ wp_set_current_user ( self ::$ administrator_id );
408
+ $ user_cpt = WP_Theme_JSON_Resolver_Gutenberg::get_user_data_from_wp_global_styles ( wp_get_theme (), true );
409
+ $ config = json_decode ( $ user_cpt ['post_content ' ], true );
410
+ $ config ['settings ' ]['color ' ]['palette ' ]['custom ' ] = array (
411
+ array (
412
+ 'color ' => 'hotpink ' ,
413
+ 'name ' => 'My color ' ,
414
+ 'slug ' => 'my-color ' ,
415
+ ),
416
+ );
417
+ $ user_cpt ['post_content ' ] = wp_json_encode ( $ config );
418
+ wp_update_post ( $ user_cpt , true , false );
419
+
420
+ $ theme_json = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data ( $ origin );
421
+ $ settings = $ theme_json ->get_settings ();
422
+ $ styles = $ theme_json ->get_styles_block_nodes ();
423
+ $ this ->assertSame ( $ core_palette , isset ( $ settings ['color ' ]['palette ' ]['default ' ] ), $ core_palette_text );
424
+ $ styles = array_filter (
425
+ $ styles ,
426
+ static function ( $ element ) {
427
+ return isset ( $ element ['name ' ] ) && 'my/block-with-styles ' === $ element ['name ' ];
428
+ }
429
+ );
430
+ $ this ->assertSame ( $ block_styles , count ( $ styles ) === 1 , $ block_styles_text );
431
+ $ this ->assertSame ( $ theme_palette , isset ( $ settings ['color ' ]['palette ' ]['theme ' ] ), $ theme_palette_text );
432
+ $ this ->assertSame ( $ user_palette , isset ( $ settings ['color ' ]['palette ' ]['custom ' ] ), $ user_palette_text );
433
+
434
+ unregister_block_type ( 'my/block-with-styles ' );
435
+ }
436
+
437
+ /**
438
+ * Data provider for test_get_merged_data_returns_origin
439
+ *
440
+ * @return array
441
+ */
442
+ public function data_get_merged_data_returns_origin () {
443
+ return array (
444
+ 'origin_default ' => array (
445
+ 'origin ' => 'default ' ,
446
+ 'core_palette ' => true ,
447
+ 'core_palette_text ' => 'Core palette must be present ' ,
448
+ 'block_styles ' => false ,
449
+ 'block_styles_text ' => 'Block styles should not be present ' ,
450
+ 'theme_palette ' => false ,
451
+ 'theme_palette_text ' => 'Theme palette should not be present ' ,
452
+ 'user_palette ' => false ,
453
+ 'user_palette_text ' => 'User palette should not be present ' ,
454
+ ),
455
+ 'origin_blocks ' => array (
456
+ 'origin ' => 'blocks ' ,
457
+ 'core_palette ' => true ,
458
+ 'core_palette_text ' => 'Core palette must be present ' ,
459
+ 'block_styles ' => true ,
460
+ 'block_styles_text ' => 'Block styles must be present ' ,
461
+ 'theme_palette ' => false ,
462
+ 'theme_palette_text ' => 'Theme palette should not be present ' ,
463
+ 'user_palette ' => false ,
464
+ 'user_palette_text ' => 'User palette should not be present ' ,
465
+ ),
466
+ 'origin_theme ' => array (
467
+ 'origin ' => 'theme ' ,
468
+ 'core_palette ' => true ,
469
+ 'core_palette_text ' => 'Core palette must be present ' ,
470
+ 'block_styles ' => true ,
471
+ 'block_styles_text ' => 'Block styles must be present ' ,
472
+ 'theme_palette ' => true ,
473
+ 'theme_palette_text ' => 'Theme palette must be present ' ,
474
+ 'user_palette ' => false ,
475
+ 'user_palette_text ' => 'User palette should not be present ' ,
476
+ ),
477
+ 'origin_custom ' => array (
478
+ 'origin ' => 'custom ' ,
479
+ 'core_palette ' => true ,
480
+ 'core_palette_text ' => 'Core palette must be present ' ,
481
+ 'block_styles ' => true ,
482
+ 'block_styles_text ' => 'Block styles must be present ' ,
483
+ 'theme_palette ' => true ,
484
+ 'theme_palette_text ' => 'Theme palette must be present ' ,
485
+ 'user_palette ' => true ,
486
+ 'user_palette_text ' => 'User palette must be present ' ,
487
+ ),
488
+ );
489
+ }
490
+
361
491
}
0 commit comments