UNPKG

@webpack-blocks/core

Version:

Functional approach to compose your webpack config.

104 lines (85 loc) 2.41 kB
import test from 'ava' import sinon from 'sinon' import group from '../group' test('group() merges the blocks', t => { const block1 = createTestBlock1() const block2 = createTestBlock2() const block3 = createTestBlock3() const grouped = group([block1, block2, block3]) t.is(typeof grouped, 'function') const resultingConfig = grouped({}, {})({}) t.deepEqual(resultingConfig, { distinct1: 'distinct1', distinct2: 'distinct2', distinct3: 'distinct3', shared: 'shared3' }) t.is(block1.callCount, 1) t.is(block2.callCount, 1) t.is(block3.callCount, 1) }) test('group() merges pre hooks', t => { const block1 = createTestBlock1() const block2 = createTestBlock2() const block3 = createTestBlock3() const grouped = group([block1, block2, block3]) // there are no hooks set on block2 and block3's hook is an array t.deepEqual(grouped.pre, [block1.pre, block3.pre[0]]) t.is(block1.pre.callCount, 0) t.is(block3.pre[0].callCount, 0) }) test('group() merges post hooks', t => { const block1 = createTestBlock1() const block2 = createTestBlock2() const block3 = createTestBlock3() const grouped = group([block1, block2, block3]) // there are no hooks set on block2 and block3's hook is an array t.deepEqual(grouped.post, [block1.post, block3.post[0]]) t.is(block1.post.callCount, 0) t.is(block3.post[0].callCount, 0) }) // Single-function pre & post hook function createTestBlock1() { const setter = () => prevConfig => ({ ...prevConfig, distinct1: 'distinct1', shared: 'shared1' }) const pre = () => {} const post = () => prevConfig => ({ ...prevConfig, post1: 'post1', postShared: 'shared1' }) return Object.assign(sinon.spy(setter), { pre: sinon.spy(pre), post: sinon.spy(post) }) } // No hooks function createTestBlock2() { const setter = () => prevConfig => ({ ...prevConfig, distinct2: 'distinct2', shared: 'shared2' }) return sinon.spy(setter) } // Array-of-functions pre & post hook function createTestBlock3() { const setter = () => prevConfig => ({ ...prevConfig, distinct3: 'distinct3', shared: 'shared3' }) const pre = () => {} const post = () => prevConfig => ({ ...prevConfig, post3: 'post3', postShared: 'shared3' }) return Object.assign(sinon.spy(setter), { pre: [sinon.spy(pre)], post: [sinon.spy(post)] }) }