@@ -379,3 +379,53 @@ protected function build(): void
379379 expect ($ template ['blocks ' ]['grid ' ]['children ' ][0 ]['properties ' ]['featured ' ])->toBeTrue ();
380380 });
381381});
382+
383+ describe ('Template region API ' , function () {
384+ it ('supports region id and name ' , function () {
385+ $ template = Template::make ()
386+ ->id ('header ' )
387+ ->name ('Header ' )
388+ ->block ('logo ' , 'logo ' )
389+ ->block ('nav ' , 'navigation ' )
390+ ->toArray ();
391+
392+ expect ($ template ['blocks ' ])->toHaveCount (2 );
393+ expect ($ template ['regions ' ])->toHaveCount (1 );
394+ expect ($ template ['regions ' ][0 ]['id ' ])->toBe ('header ' );
395+ expect ($ template ['regions ' ][0 ]['name ' ])->toBe ('Header ' );
396+ expect ($ template ['regions ' ][0 ]['blocks ' ])->toBe (['logo ' , 'nav ' ]);
397+ });
398+
399+ it ('uses region id as name when name not provided ' , function () {
400+ $ template = Template::make ()
401+ ->id ('footer ' )
402+ ->block ('copyright ' , 'text ' )
403+ ->toArray ();
404+
405+ expect ($ template ['regions ' ][0 ]['id ' ])->toBe ('footer ' );
406+ expect ($ template ['regions ' ][0 ]['name ' ])->toBe ('footer ' );
407+ expect ($ template ['regions ' ][0 ]['blocks ' ])->toBe (['copyright ' ]);
408+ });
409+
410+ it ('respects block order in region ' , function () {
411+ $ template = Template::make ()
412+ ->id ('header ' )
413+ ->name ('Header ' )
414+ ->block ('logo ' , 'logo ' )
415+ ->block ('nav ' , 'navigation ' )
416+ ->block ('search ' , 'search ' )
417+ ->order (['nav ' , 'search ' , 'logo ' ])
418+ ->toArray ();
419+
420+ expect ($ template ['regions ' ][0 ]['blocks ' ])->toBe (['nav ' , 'search ' , 'logo ' ]);
421+ expect ($ template ['order ' ])->toBe (['nav ' , 'search ' , 'logo ' ]);
422+ });
423+
424+ it ('does not include regions when region id not set ' , function () {
425+ $ template = Template::make ()
426+ ->block ('hero ' , 'hero ' )
427+ ->toArray ();
428+
429+ expect ($ template )->not ()->toHaveKey ('regions ' );
430+ });
431+ });
0 commit comments