1*082815dcSEvan Baconimport { ConfigPlugin } from '../../Plugin.types'; 2*082815dcSEvan Baconimport { withPlugins } from '../withPlugins'; 3*082815dcSEvan Baconimport { createRunOncePlugin, withRunOnce } from '../withRunOnce'; 4*082815dcSEvan Bacon 5*082815dcSEvan Bacondescribe(withRunOnce, () => { 6*082815dcSEvan Bacon it('runs plugins multiple times without withRunOnce', () => { 7*082815dcSEvan Bacon const pluginA: ConfigPlugin = jest.fn((config) => config); 8*082815dcSEvan Bacon 9*082815dcSEvan Bacon withPlugins({ extra: [], _internal: { projectRoot: '.' } } as any, [ 10*082815dcSEvan Bacon // Prove unsafe runs as many times as it was added 11*082815dcSEvan Bacon pluginA, 12*082815dcSEvan Bacon pluginA, 13*082815dcSEvan Bacon ]); 14*082815dcSEvan Bacon 15*082815dcSEvan Bacon // Unsafe runs multiple times 16*082815dcSEvan Bacon expect(pluginA).toBeCalledTimes(2); 17*082815dcSEvan Bacon }); 18*082815dcSEvan Bacon 19*082815dcSEvan Bacon it('prevents running different plugins with same id', () => { 20*082815dcSEvan Bacon const pluginA: ConfigPlugin = jest.fn((config) => config); 21*082815dcSEvan Bacon const pluginB: ConfigPlugin = jest.fn((config) => config); 22*082815dcSEvan Bacon 23*082815dcSEvan Bacon const pluginId = 'foo'; 24*082815dcSEvan Bacon 25*082815dcSEvan Bacon const safePluginA = createRunOncePlugin(pluginA, pluginId); 26*082815dcSEvan Bacon // A different plugin with the same ID as (A), this proves 27*082815dcSEvan Bacon // that different plugins can be prevented when using the same ID. 28*082815dcSEvan Bacon const safePluginB = createRunOncePlugin(pluginB, pluginId); 29*082815dcSEvan Bacon 30*082815dcSEvan Bacon withPlugins({ extra: [], _internal: { projectRoot: '.' } } as any, [ 31*082815dcSEvan Bacon // Run plugin twice 32*082815dcSEvan Bacon safePluginA, 33*082815dcSEvan Bacon safePluginB, 34*082815dcSEvan Bacon ]); 35*082815dcSEvan Bacon 36*082815dcSEvan Bacon // Prove that each plugin is only run once 37*082815dcSEvan Bacon expect(pluginA).toBeCalledTimes(1); 38*082815dcSEvan Bacon expect(pluginB).toBeCalledTimes(0); 39*082815dcSEvan Bacon }); 40*082815dcSEvan Bacon 41*082815dcSEvan Bacon it('prevents running the same plugin twice', () => { 42*082815dcSEvan Bacon const pluginA: ConfigPlugin = jest.fn((config) => config); 43*082815dcSEvan Bacon const pluginId = 'foo'; 44*082815dcSEvan Bacon 45*082815dcSEvan Bacon const safePluginA = createRunOncePlugin(pluginA, pluginId); 46*082815dcSEvan Bacon 47*082815dcSEvan Bacon withPlugins({ extra: [], _internal: { projectRoot: '.' } } as any, [ 48*082815dcSEvan Bacon // Run plugin twice 49*082815dcSEvan Bacon safePluginA, 50*082815dcSEvan Bacon safePluginA, 51*082815dcSEvan Bacon ]); 52*082815dcSEvan Bacon 53*082815dcSEvan Bacon // Prove that each plugin is only run once 54*082815dcSEvan Bacon expect(pluginA).toBeCalledTimes(1); 55*082815dcSEvan Bacon }); 56*082815dcSEvan Bacon}); 57