@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
148 lines (132 loc) • 4.25 kB
JavaScript
/**
* External dependencies
*/
import { shallow } from 'enzyme';
/**
* Internal dependencies
*/
import { AutosaveMonitor } from '../';
describe( 'AutosaveMonitor', () => {
let wrapper;
let setAutosaveTimerSpy;
beforeEach( () => {
jest.useFakeTimers();
setAutosaveTimerSpy = jest.spyOn(
AutosaveMonitor.prototype,
'setAutosaveTimer'
);
wrapper = shallow( <AutosaveMonitor isDirty />, {
lifecycleExperimental: true,
} );
} );
afterEach( () => {
setAutosaveTimerSpy.mockClear();
} );
it( 'should start autosave timer after being mounted', () => {
expect( setAutosaveTimerSpy ).toHaveBeenCalled();
} );
it( 'should clear the autosave timer after being unmounted', () => {
wrapper.unmount();
expect( clearTimeout ).toHaveBeenCalled();
} );
describe( '#componentDidUpdate()', () => {
it( 'should set needsAutosave=true when editReference changes', () => {
expect( wrapper.instance().needsAutosave ).toBe( false );
wrapper.setProps( {
editsReference: [],
} );
expect( wrapper.instance().needsAutosave ).toBe( true );
} );
it( 'should set needsAutosave=true when editReference changes and the post becomes dirty', () => {
expect( wrapper.instance().needsAutosave ).toBe( false );
wrapper.setProps( {
isDirty: true,
editsReference: [],
} );
expect( wrapper.instance().needsAutosave ).toBe( true );
} );
it( 'should not set needsAutosave=true when editReference changes and the post is not dirty anymore', () => {
expect( wrapper.instance().needsAutosave ).toBe( false );
wrapper.setProps( {
isDirty: true,
editsReference: [],
} );
wrapper.setProps( {
isDirty: false,
editsReference: [],
} );
expect( wrapper.instance().needsAutosave ).toBe( false );
} );
it( 'should set needsAutosave=true when editReference changes and the post is not autosaving', () => {
expect( wrapper.instance().needsAutosave ).toBe( false );
wrapper.setProps( {
isAutosaving: false,
editsReference: [],
} );
expect( wrapper.instance().needsAutosave ).toBe( true );
} );
it( 'should not set needsAutosave=true when editReference changes and the post started autosaving', () => {
expect( wrapper.instance().needsAutosave ).toBe( false );
wrapper.setProps( {
isAutosaving: false,
editsReference: [],
} );
wrapper.setProps( {
isAutosaving: true,
editsReference: [],
} );
expect( wrapper.instance().needsAutosave ).toBe( false );
} );
} );
describe( '#autosaveTimerHandler()', () => {
it( 'should schedule itself in another {interval} ms', () => {
wrapper.setProps( {
isAutosaveable: true,
interval: 5,
} );
expect( setAutosaveTimerSpy ).toHaveBeenCalledTimes( 1 );
wrapper.instance().autosaveTimerHandler();
expect( setAutosaveTimerSpy ).toHaveBeenCalledTimes( 2 );
expect( setTimeout ).lastCalledWith( expect.any( Function ), 5000 );
} );
it( 'should schedule itself in 1000 ms if the post is not autosaveable at a time', () => {
wrapper.setProps( {
isAutosaveable: false,
interval: 5,
} );
expect( setAutosaveTimerSpy ).toHaveBeenCalledTimes( 1 );
wrapper.instance().autosaveTimerHandler();
expect( setAutosaveTimerSpy ).toHaveBeenCalledTimes( 2 );
expect( setTimeout ).lastCalledWith( expect.any( Function ), 1000 );
} );
it( 'should call autosave if needsAutosave=true', () => {
const autosave = jest.fn();
wrapper.setProps( {
isAutosaveable: true,
interval: 5,
autosave,
} );
wrapper.instance().needsAutosave = true;
expect( autosave ).toHaveBeenCalledTimes( 0 );
wrapper.instance().autosaveTimerHandler();
expect( autosave ).toHaveBeenCalledTimes( 1 );
} );
it( 'should not call autosave if needsAutosave is not true', () => {
const autosave = jest.fn();
wrapper.setProps( {
isAutosaveable: true,
interval: 5,
autosave,
} );
wrapper.instance().needsAutosave = false;
expect( autosave ).toHaveBeenCalledTimes( 0 );
wrapper.instance().autosaveTimerHandler();
expect( autosave ).toHaveBeenCalledTimes( 0 );
} );
} );
describe( '#render()', () => {
it( 'should render nothing', () => {
expect( wrapper.type() ).toBe( null );
} );
} );
} );