chore: tests

This commit is contained in:
cha0s 2022-02-26 10:24:16 -06:00
parent 958f97ed21
commit f3bd6e73cf
16 changed files with 108 additions and 67 deletions

View File

@ -0,0 +1,2 @@
# This isn't a "real" `flecks.yml`. It only exists for testing purposes.
'@flecks/core:./src': {}

View File

@ -1,3 +1,4 @@
'@flecks/core:../src': {}
'@flecks/core/one:./fleck-one': {}
'@flecks/core/two:./fleck-two': {}
'@flecks/core/one:./one': {}
'@flecks/core/one/server:./one/server': {}
'@flecks/core/two:./two': {}

View File

@ -1,23 +0,0 @@
import Flecks, {Hooks} from '../../src/flecks';
export default {
[Hooks]: {
'@flecks/core/config': () => ({
foo: 'bar',
'test-gather.decorate': ['...'],
}),
'./fleck-one/test-gather': (
Flecks.provide(require.context('./things', false, /\.js$/))
),
'./fleck-one/test-gather.decorate': (
Flecks.decorate(require.context('./things/decorators', false, /\.js$/))
),
'flecks-test-invoke': () => 69,
'flecks-test-invoke-parallel': (O) => {
// eslint-disable-next-line no-param-reassign
O.foo *= 2;
},
'flecks-test-invoke-reduce': () => ({foo: 69}),
'flecks-test-invoke-reduce-async': () => new Promise((resolve) => resolve({foo: 69})),
},
};

View File

@ -1,19 +0,0 @@
import Flecks, {Hooks} from '../../src/flecks';
export default {
[Hooks]: {
'./fleck-one/test-gather': (
Flecks.provide(require.context('./things', false, /\.js$/))
),
'flecks-test-invoke': () => 420,
'flecks-test-invoke-parallel': (O) => new Promise((resolve) => {
setTimeout(() => {
// eslint-disable-next-line no-param-reassign
O.foo += 2;
resolve();
}, 0);
}),
'flecks-test-invoke-reduce': () => ({bar: 420}),
'flecks-test-invoke-reduce-async': () => new Promise((resolve) => resolve({bar: 420})),
},
};

View File

@ -3,17 +3,17 @@ import {expect} from 'chai';
// eslint-disable-next-line import/no-unresolved
import {Flecks, ById, ByType} from '@flecks/core';
const testFleckOne = require('./fleck-one');
const testFleckTwo = require('./fleck-two');
const testOne = require('./one');
const testTwo = require('./two');
it('can gather', () => {
const flecks = new Flecks({
flecks: {
'./fleck-one': testFleckOne,
'./fleck-two': testFleckTwo,
'@flecks/core/one': testOne,
'@flecks/core/two': testTwo,
},
});
const Gathered = flecks.gather('./fleck-one/test-gather');
const Gathered = flecks.gather('@flecks/core/one/test-gather');
expect(Object.keys(Gathered[ByType]).length)
.to.equal(Object.keys(Gathered[ById]).length);
const typeKeys = Object.keys(Gathered[ByType]);

View File

@ -3,7 +3,7 @@ import {expect} from 'chai';
// eslint-disable-next-line import/no-unresolved
import {Flecks} from '@flecks/core';
const testFleckOne = require('./fleck-one');
const testOne = require('./one');
it('can create an empty instance', () => {
const flecks = new Flecks();
@ -20,14 +20,14 @@ it('can create an empty instance', () => {
it('can gather config', () => {
let flecks;
flecks = new Flecks({
flecks: {'./fleck-one': testFleckOne},
flecks: {'@flecks/core/one': testOne},
});
expect(flecks.get(['./fleck-one']))
expect(flecks.get(['@flecks/core/one']))
.to.contain({foo: 'bar'});
flecks = new Flecks({
config: {'./fleck-one': {foo: 'baz'}},
flecks: {'./fleck-one': testFleckOne},
config: {'@flecks/core/one': {foo: 'baz'}},
flecks: {'@flecks/core/one': testOne},
});
expect(flecks.get(['./fleck-one']))
expect(flecks.get(['@flecks/core/one']))
.to.contain({foo: 'baz'});
});

View File

@ -3,41 +3,41 @@ import {expect} from 'chai';
// eslint-disable-next-line import/no-unresolved
import {Flecks} from '@flecks/core';
const testFleckOne = require('./fleck-one');
const testFleckTwo = require('./fleck-two');
const testOne = require('./one');
const testTwo = require('./two');
let flecks;
beforeEach(() => {
flecks = new Flecks({
flecks: {
'./fleck-one': testFleckOne,
'./fleck-two': testFleckTwo,
'@flecks/core/one': testOne,
'@flecks/core/two': testTwo,
},
});
});
it('can invoke', () => {
expect(flecks.invoke('flecks-test-invoke'))
expect(flecks.invoke('@flecks/core/test/invoke'))
.to.deep.equal({
'./fleck-one': 69,
'./fleck-two': 420,
'@flecks/core/one': 69,
'@flecks/core/two': 420,
});
});
it('can invoke parallel', async () => {
const O = {foo: 3};
await Promise.all(flecks.invokeParallel('flecks-test-invoke-parallel', O));
await Promise.all(flecks.invokeParallel('@flecks/core/test/invoke-parallel', O));
expect(O.foo)
.to.equal(8);
});
it('can invoke reduced', () => {
expect(flecks.invokeReduce('flecks-test-invoke-reduce'))
expect(flecks.invokeReduce('@flecks/core/test/invoke-reduce'))
.to.deep.equal({foo: 69, bar: 420});
});
it('can invoke reduced async', async () => {
expect(await flecks.invokeReduce('flecks-test-invoke-reduce'))
expect(await flecks.invokeReduce('@flecks/core/test/invoke-reduce'))
.to.deep.equal({foo: 69, bar: 420});
});

View File

View File

@ -0,0 +1,31 @@
// eslint-disable-next-line import/no-unresolved
import {Flecks, Hooks} from '@flecks/core';
export const testNodespace = () => [
/* eslint-disable no-eval */
eval('typeof require.context'),
eval('typeof __non_webpack_require__'),
/* eslint-enable no-eval */
];
export default {
[Hooks]: {
'@flecks/core/config': () => ({
foo: 'bar',
'test-gather.decorate': ['...'],
}),
'@flecks/core/one/test-gather': (
Flecks.provide(require.context('./things', false, /\.js$/))
),
'@flecks/core/one/test-gather.decorate': (
Flecks.decorate(require.context('./things/decorators', false, /\.js$/))
),
'@flecks/core/test/invoke': () => 69,
'@flecks/core/test/invoke-parallel': (O) => {
// eslint-disable-next-line no-param-reassign
O.foo *= 2;
},
'@flecks/core/test/invoke-reduce': () => ({foo: 69}),
'@flecks/core/test/invoke-reduce-async': () => new Promise((resolve) => resolve({foo: 69})),
},
};

View File

View File

@ -3,10 +3,39 @@ import {expect} from 'chai';
// eslint-disable-next-line import/no-unresolved
import {Flecks} from '@flecks/core/server';
it('can bootstrap', () => {
const flecks = Flecks.bootstrap({root: './test'});
it('bootstraps FLECKS_ROOT by default', () => {
const flecks = Flecks.bootstrap();
expect(flecks.fleck('@flecks/core')).to.not.equal(undefined);
});
it('bootstraps server platform by default', () => {
const flecks = Flecks.bootstrap();
expect(flecks.fleck('@flecks/core/server')).to.not.equal(undefined);
});
it('can bootstrap from a foreign root', () => {
const flecks = Flecks.bootstrap({root: './test'});
expect(flecks.fleck('@flecks/core/one')).to.not.equal(undefined);
expect(flecks.fleck('@flecks/core/two')).to.not.equal(undefined);
});
it('can bootstrap other platforms', () => {
const flecks = Flecks.bootstrap({platforms: ['client'], root: './test'});
expect(flecks.fleck('@flecks/core/one')).to.not.equal(undefined);
expect(flecks.fleck('@flecks/core/one/client')).to.not.equal(undefined);
expect(flecks.fleck('@flecks/core/one/server')).to.not.equal(undefined);
});
it('can exclude platforms', () => {
const flecks = Flecks.bootstrap({platforms: ['client'], root: './test', without: ['server']});
expect(flecks.fleck('@flecks/core/one')).to.not.equal(undefined);
expect(flecks.fleck('@flecks/core/one/client')).to.not.equal(undefined);
expect(flecks.fleck('@flecks/core/one/server')).to.equal(undefined);
});
it('provides webpack goodies in nodespace', () => {
const flecks = Flecks.bootstrap({root: './test'});
flecks.fleck('@flecks/core/one').testNodespace().forEach((result) => {
expect(result).to.not.equal('undefined');
});
});

View File

@ -0,0 +1,20 @@
// eslint-disable-next-line import/no-unresolved
import {Flecks, Hooks} from '@flecks/core';
export default {
[Hooks]: {
'@flecks/core/one/test-gather': (
Flecks.provide(require.context('./things', false, /\.js$/))
),
'@flecks/core/test/invoke': () => 420,
'@flecks/core/test/invoke-parallel': (O) => new Promise((resolve) => {
setTimeout(() => {
// eslint-disable-next-line no-param-reassign
O.foo += 2;
resolve();
}, 0);
}),
'@flecks/core/test/invoke-reduce': () => ({bar: 420}),
'@flecks/core/test/invoke-reduce-async': () => new Promise((resolve) => resolve({bar: 420})),
},
};