flecks/packages/core/test/expanding.js

68 lines
1.8 KiB
JavaScript
Raw Normal View History

2024-02-04 09:16:09 -06:00
import {expect} from 'chai';
import {Flecks} from '@flecks/core/build/flecks';
2024-02-04 13:56:15 -06:00
it('includes all by default', async () => {
const flecks = await Flecks.from({
config: {
one: {test: ['one', 'two']},
},
flecks: {
one: {hooks: {'one.test': () => {}}},
two: {hooks: {'one.test': () => {}}},
},
});
expect(flecks.expandedFlecks('one.test'))
.to.deep.equal(['one', 'two']);
});
it('respects elision', async () => {
const flecks = await Flecks.from({
config: {
one: {test: ['two', '...', 'three']},
},
flecks: {
one: {hooks: {'one.test': () => {}}},
two: {hooks: {'one.test': () => {}}},
three: {hooks: {'one.test': () => {}}},
four: {hooks: {'one.test': () => {}}},
},
});
const expanded = flecks.expandedFlecks('one.test');
expect(expanded.shift())
.to.equal('two');
expect(expanded.pop())
.to.equal('three');
});
it('detects yet allows suspicious hook ordering', async () => {
2024-02-04 09:16:09 -06:00
const flecks = await Flecks.from({
config: {
one: {test: ['one', 'two']},
},
flecks: {
one: {hooks: {'one.test': () => {}}},
two: {hooks: {'one.test': Flecks.priority(() => {}, {before: 'one'})}},
},
});
let suspected = false;
Flecks.debug = (message) => {
suspected = message.includes('Suspicious ordering specification');
};
2024-02-04 13:56:15 -06:00
expect(flecks.expandedFlecks('one.test'))
.to.deep.equal(['one', 'two']);
2024-02-04 09:16:09 -06:00
expect(suspected)
.to.be.true;
});
2024-02-04 13:56:15 -06:00
it('throws on cyclic dependency', async () => {
const flecks = await Flecks.from({
flecks: {
one: {hooks: {'one.test': Flecks.priority(() => {}, {before: 'two'})}},
two: {hooks: {'one.test': Flecks.priority(() => {}, {before: 'one'})}},
},
});
expect(() => flecks.expandedFlecks('one.test'))
.to.throw(/Illegal ordering specification/);
});