import {
render,
screen,
waitForElementToBeRemoved,
} from '@testing-library/react';
import { afterEach, describe, expect, it } from 'vitest';
import {
createReduxStore,
createRegistry,
RegistryProvider,
} from '@wordpress/data';
import { addFilter, removeFilter } from '@wordpress/hooks';
import { store as noticesStore } from '@wordpress/notices';
import MediaEdit, { MediaEditControl } from '../index';
globalThis.wpVitest.mockMatchMedia();
globalThis.wpVitest.mockResizeObserver();
const field = {
id: 'featured_media',
type: 'media',
label: 'Featured Image',
placeholder: 'Set featured image',
getValue: ( { item }: { item: { featured_media?: number } } ) =>
item.featured_media,
setValue: ( { value }: { value?: number } ) => ( {
featured_media: value ?? 0,
} ),
} as any;
// The component reads the upload permission and the attachments from the
// `core` store; a stand-in avoids the resolvers' requests.
function createTestRegistry( { canUpload = true } = {} ) {
const registry = createRegistry();
registry.register(
createReduxStore( 'core', {
reducer: ( state = {} ) => state,
selectors: {
canUser: () => canUpload,
getEntityRecords: () => null,
},
actions: {
receiveEntityRecords: () => ( {
type: 'RECEIVE_ENTITY_RECORDS',
} ),
},
} )
);
registry.register( noticesStore );
return registry;
}
describe( 'MediaEdit', () => {
afterEach( () => {
removeFilter( 'editor.MediaUpload', 'test/media-upload-marker' );
} );
it( 'resolves the media picker through the editor.MediaUpload filter only in the filtered variant', async () => {
const received: Record< string, unknown >[] = [];
addFilter(
'editor.MediaUpload',
'test/media-upload-marker',
( MediaUpload: React.ComponentType< any > ) =>
( props: Record< string, unknown > ) => {
received.push( props );
return (
<>