@wordpress/core-data
Version:
Access to and manipulation of core WordPress entities.
190 lines (174 loc) • 3.89 kB
JavaScript
/**
* WordPress dependencies
*/
import triggerFetch from '@wordpress/api-fetch';
import { createRegistry, RegistryProvider } from '@wordpress/data';
jest.mock( '@wordpress/api-fetch' );
/**
* External dependencies
*/
import { render, waitFor } from '@testing-library/react';
/**
* Internal dependencies
*/
import { store as coreDataStore } from '../../index';
import useResourcePermissions from '../use-resource-permissions';
describe( 'useResourcePermissions', () => {
let registry;
beforeEach( () => {
registry = createRegistry();
registry.register( coreDataStore );
triggerFetch.mockImplementation( () => ( {
headers: new Headers( {
allow: 'POST',
} ),
} ) );
} );
it( 'retrieves the relevant permissions for a key-less resource', async () => {
let data;
const TestComponent = () => {
data = useResourcePermissions( 'widgets' );
return <div />;
};
render(
<RegistryProvider value={ registry }>
<TestComponent />
</RegistryProvider>
);
expect( data ).toEqual( {
status: 'IDLE',
isResolving: false,
hasResolved: false,
canCreate: false,
canRead: false,
} );
await waitFor( () =>
expect( data ).toEqual( {
status: 'SUCCESS',
isResolving: false,
hasResolved: true,
canCreate: true,
canRead: false,
} )
);
} );
it( 'retrieves the relevant permissions for a resource with a key', async () => {
let data;
const TestComponent = () => {
data = useResourcePermissions( 'widgets', 1 );
return <div />;
};
render(
<RegistryProvider value={ registry }>
<TestComponent />
</RegistryProvider>
);
expect( data ).toEqual( {
status: 'IDLE',
isResolving: false,
hasResolved: false,
canCreate: false,
canRead: false,
canUpdate: false,
canDelete: false,
} );
await waitFor( () =>
expect( data ).toEqual( {
status: 'SUCCESS',
isResolving: false,
hasResolved: true,
canCreate: true,
canRead: false,
canUpdate: false,
canDelete: false,
} )
);
} );
it( 'retrieves the relevant permissions for a id-less entity', async () => {
let data;
const TestComponent = () => {
data = useResourcePermissions( {
kind: 'root',
name: 'user',
} );
return <div />;
};
render(
<RegistryProvider value={ registry }>
<TestComponent />
</RegistryProvider>
);
expect( data ).toEqual( {
status: 'IDLE',
isResolving: false,
hasResolved: false,
canCreate: false,
canRead: false,
} );
await waitFor( () =>
expect( data ).toEqual( {
status: 'SUCCESS',
isResolving: false,
hasResolved: true,
canCreate: true,
canRead: false,
} )
);
} );
it( 'retrieves the relevant permissions for an entity', async () => {
let data;
const TestComponent = () => {
data = useResourcePermissions( {
kind: 'root',
name: 'user',
id: 1,
} );
return <div />;
};
render(
<RegistryProvider value={ registry }>
<TestComponent />
</RegistryProvider>
);
expect( data ).toEqual( {
status: 'IDLE',
isResolving: false,
hasResolved: false,
canCreate: false,
canRead: false,
canUpdate: false,
canDelete: false,
} );
await waitFor( () =>
expect( data ).toEqual( {
status: 'SUCCESS',
isResolving: false,
hasResolved: true,
canCreate: true,
canRead: false,
canUpdate: false,
canDelete: false,
} )
);
} );
it( 'should warn when called with incorrect arguments signature', () => {
const TestComponent = () => {
useResourcePermissions(
{
kind: 'root',
name: 'user',
},
1
);
return null;
};
render(
<RegistryProvider value={ registry }>
<TestComponent />
</RegistryProvider>
);
expect( console ).toHaveWarnedWith(
`When 'resource' is an entity object, passing 'id' as a separate argument isn't supported.`
);
} );
} );