11import { describe , expect , it } from 'vitest' ;
22import { fireEvent , render , screen , waitFor } from '@testing-library/react' ;
3- import { useState } from '@wordpress/element' ;
3+ import { useEffect , useState } from '@wordpress/element' ;
44import MediaEditorImageControls from '..' ;
55import type { MediaEditorImageControlsProps } from '..' ;
66import { MediaEditorStateProvider , useMediaEditor } from '../../../state' ;
7- import type { CropperState } from '../../../image-editor' ;
87import { MAX_ZOOM } from '../../../image-editor/core/constants' ;
98
10- function setup (
11- props : MediaEditorImageControlsProps = { } ,
12- initialCropperState ?: Partial < CropperState >
13- ) {
9+ function setup ( props : MediaEditorImageControlsProps = { } , zoom ?: number ) {
1410 render (
15- < MediaEditorStateProvider initialCropperState = { initialCropperState } >
11+ < MediaEditorStateProvider >
1612 < MediaEditorImageControls { ...props } />
17- < CurrentState />
13+ < CurrentState zoom = { zoom } />
1814 </ MediaEditorStateProvider >
1915 ) ;
2016}
2117
22- function CurrentState ( ) {
18+ function CurrentState ( { zoom } : { zoom ?: number } ) {
2319 const {
24- cropper : { state } ,
20+ cropper : { state, setZoom } ,
2521 cropOptions,
2622 } = useMediaEditor ( ) ;
23+ // Start the cases that need it zoomed in. `setZoom` is a session edit,
24+ // so these cases begin with one undo entry; none of them checks history.
25+ useEffect ( ( ) => {
26+ if ( zoom !== undefined ) {
27+ setZoom ( zoom ) ;
28+ }
29+ } , [ setZoom , zoom ] ) ;
2730
2831 return (
2932 < >
@@ -75,7 +78,7 @@ describe( 'MediaEditorImageControls', () => {
7578 } ) ;
7679
7780 it ( 'zoom in multiplies the zoom and zoom out divides it' , ( ) => {
78- setup ( { } , { zoom : 2 } ) ;
81+ setup ( { } , 2 ) ;
7982
8083 fireEvent . click ( screen . getByRole ( 'button' , { name : 'Zoom in' } ) ) ;
8184 const zoomedIn = Number (
@@ -90,7 +93,7 @@ describe( 'MediaEditorImageControls', () => {
9093 } ) ;
9194
9295 it ( 'honors a custom zoomFactor' , ( ) => {
93- setup ( { zoomFactor : 2 } , { zoom : 2 } ) ;
96+ setup ( { zoomFactor : 2 } , 2 ) ;
9497
9598 fireEvent . click ( screen . getByRole ( 'button' , { name : 'Zoom in' } ) ) ;
9699
@@ -101,7 +104,7 @@ describe( 'MediaEditorImageControls', () => {
101104 } ) ;
102105
103106 it ( 'disables Zoom in at the maximum zoom' , ( ) => {
104- setup ( { } , { zoom : MAX_ZOOM } ) ;
107+ setup ( { } , MAX_ZOOM ) ;
105108 // Buttons use `accessibleWhenDisabled`, so the disabled state is
106109 // expressed via aria-disabled, not the `disabled` attribute.
107110 expect (
0 commit comments