mirror of
https://github.com/qlik-oss/nebula.js.git
synced 2025-12-25 01:04:14 -05:00
test: remove multiple mock (#212)
This commit is contained in:
@@ -1,25 +1,28 @@
|
||||
const doMock = theme => aw.mock([['**/apis/theme/**/theme.js', () => theme]], ['../app-theme']);
|
||||
|
||||
describe('app-theme', () => {
|
||||
let appThemeFn;
|
||||
let internalAPI;
|
||||
let logger;
|
||||
let t;
|
||||
beforeEach(() => {
|
||||
const sandbox = sinon.createSandbox();
|
||||
before(() => {
|
||||
internalAPI = {
|
||||
setTheme: sinon.spy(),
|
||||
setTheme: sandbox.spy(),
|
||||
};
|
||||
t = () => ({
|
||||
externalAPI: 'external',
|
||||
internalAPI,
|
||||
});
|
||||
logger = {
|
||||
error: sinon.spy(),
|
||||
warn: sinon.spy(),
|
||||
error: sandbox.spy(),
|
||||
warn: sandbox.spy(),
|
||||
};
|
||||
const [{ default: create }] = doMock(t);
|
||||
appThemeFn = create;
|
||||
[{ default: appThemeFn }] = aw.mock([['**/apis/theme/**/theme.js', () => t]], ['../app-theme']);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sandbox.reset();
|
||||
});
|
||||
|
||||
it('should return external API', () => {
|
||||
const at = appThemeFn({});
|
||||
expect(at.externalAPI).to.equal('external');
|
||||
@@ -27,7 +30,7 @@ describe('app-theme', () => {
|
||||
|
||||
describe('custom', () => {
|
||||
it('should load and apply custom theme', async () => {
|
||||
const root = { theme: sinon.spy() };
|
||||
const root = { theme: sandbox.spy() };
|
||||
const at = appThemeFn({
|
||||
root,
|
||||
logger,
|
||||
@@ -62,11 +65,11 @@ describe('app-theme', () => {
|
||||
},
|
||||
],
|
||||
});
|
||||
const sandbox = sinon.createSandbox({ useFakeTimers: true });
|
||||
const sb = sinon.createSandbox({ useFakeTimers: true });
|
||||
const prom = at.setTheme('darkish');
|
||||
sandbox.clock.tick(5500);
|
||||
sb.clock.tick(5500);
|
||||
await prom;
|
||||
sandbox.restore();
|
||||
sb.restore();
|
||||
expect(logger.warn).to.have.been.calledWithExactly("Timeout when loading theme 'darkish'");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,24 +1,43 @@
|
||||
const doMock = ({ appThemeFn, getObject, createObject }) =>
|
||||
aw.mock(
|
||||
[
|
||||
['**/locale/app-locale.js', () => () => ({ translator: () => ({ add: () => {} }) })],
|
||||
['**/selections/index.js', () => ({ createAppSelectionAPI: () => ({}) })],
|
||||
['**/components/NebulaApp.jsx', () => () => ({})],
|
||||
['**/components/selections/AppSelections.jsx', () => () => ({})],
|
||||
['**/object/create-object.js', () => createObject],
|
||||
['**/object/get-object.js', () => getObject],
|
||||
['**/sn/types.js', () => ({ create: () => ({}) })],
|
||||
['**/utils/logger.js', () => () => ({})],
|
||||
['**/app-theme.js', () => appThemeFn],
|
||||
],
|
||||
['../index.js']
|
||||
);
|
||||
|
||||
describe('nucleus', () => {
|
||||
let appThemeFn;
|
||||
let create;
|
||||
let createObject;
|
||||
let getObject;
|
||||
let sandbox;
|
||||
before(() => {
|
||||
sandbox = sinon.createSandbox({ useFakeTimers: true });
|
||||
createObject = sandbox.stub();
|
||||
getObject = sandbox.stub();
|
||||
appThemeFn = sandbox.stub();
|
||||
[{ default: create }] = aw.mock(
|
||||
[
|
||||
['**/locale/app-locale.js', () => () => ({ translator: () => ({ add: () => {} }) })],
|
||||
['**/selections/index.js', () => ({ createAppSelectionAPI: () => ({}) })],
|
||||
['**/components/NebulaApp.jsx', () => () => ({})],
|
||||
['**/components/selections/AppSelections.jsx', () => () => ({})],
|
||||
['**/object/create-object.js', () => createObject],
|
||||
['**/object/get-object.js', () => getObject],
|
||||
['**/sn/types.js', () => ({ create: () => ({}) })],
|
||||
['**/utils/logger.js', () => () => ({})],
|
||||
['**/app-theme.js', () => appThemeFn],
|
||||
],
|
||||
['../index.js']
|
||||
);
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
createObject.returns('created object');
|
||||
getObject.returns('got object');
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sandbox.reset();
|
||||
});
|
||||
|
||||
it('should wait for theme before creating object', async () => {
|
||||
let waited = false;
|
||||
const delay = 1000;
|
||||
const appThemeFn = () => ({
|
||||
appThemeFn.returns({
|
||||
setTheme: () =>
|
||||
new Promise(resolve => {
|
||||
setTimeout(() => {
|
||||
@@ -27,25 +46,19 @@ describe('nucleus', () => {
|
||||
}, delay);
|
||||
}),
|
||||
});
|
||||
const createObject = () => 'created object';
|
||||
|
||||
const [{ default: create }] = doMock({ appThemeFn, createObject });
|
||||
|
||||
const sandbox = sinon.createSandbox({ useFakeTimers: true });
|
||||
|
||||
const nuked = create();
|
||||
const prom = nuked.create();
|
||||
sandbox.clock.tick(delay + 100);
|
||||
const c = await prom;
|
||||
sandbox.clock.restore();
|
||||
expect(waited).to.equal(true);
|
||||
expect(c).to.equal('created object');
|
||||
});
|
||||
|
||||
it('should wait for theme before getting object', async () => {
|
||||
let waited = false;
|
||||
const delay = 1000;
|
||||
const appThemeFn = () => ({
|
||||
const delay = 2000;
|
||||
appThemeFn.returns({
|
||||
setTheme: () =>
|
||||
new Promise(resolve => {
|
||||
setTimeout(() => {
|
||||
@@ -54,11 +67,6 @@ describe('nucleus', () => {
|
||||
}, delay);
|
||||
}),
|
||||
});
|
||||
const getObject = () => 'got object';
|
||||
|
||||
const [{ default: create }] = doMock({ appThemeFn, getObject });
|
||||
|
||||
const sandbox = sinon.createSandbox({ useFakeTimers: true });
|
||||
|
||||
const nuked = create();
|
||||
const prom = nuked.get();
|
||||
|
||||
@@ -1,43 +1,50 @@
|
||||
describe('create-object', () => {
|
||||
const doMock = ({ populator = () => {} } = {}) =>
|
||||
aw.mock([['**/populator.js', () => populator]], ['../create-object.js']);
|
||||
|
||||
let context = {};
|
||||
let types;
|
||||
let sn;
|
||||
let merged;
|
||||
let create;
|
||||
let populator;
|
||||
let sandbox;
|
||||
before(() => {
|
||||
sandbox = sinon.createSandbox();
|
||||
populator = sandbox.stub();
|
||||
[{ default: create }] = aw.mock([['**/populator.js', () => populator]], ['../create-object.js']);
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
types = {
|
||||
get: sinon.stub(),
|
||||
get: sandbox.stub(),
|
||||
};
|
||||
context = {
|
||||
app: {
|
||||
createSessionObject: sinon.stub().returns(Promise.resolve({ id: 'id' })),
|
||||
createSessionObject: sandbox.stub().returns(Promise.resolve({ id: 'id' })),
|
||||
},
|
||||
nebbie: {
|
||||
get: sinon.stub().returns('got it'),
|
||||
get: sandbox.stub().returns('got it'),
|
||||
types,
|
||||
},
|
||||
};
|
||||
|
||||
sn = { qae: { properties: { onChange: sinon.stub() } } };
|
||||
sn = { qae: { properties: { onChange: sandbox.stub() } } };
|
||||
merged = { m: 'true' };
|
||||
const t = {
|
||||
initialProperties: sinon.stub().returns(Promise.resolve(merged)),
|
||||
supernova: sinon.stub().returns(Promise.resolve(sn)),
|
||||
initialProperties: sandbox.stub().returns(Promise.resolve(merged)),
|
||||
supernova: sandbox.stub().returns(Promise.resolve(sn)),
|
||||
};
|
||||
types.get.returns(t);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sandbox.reset();
|
||||
});
|
||||
|
||||
it('should call types.get with name and version', () => {
|
||||
const [{ default: create }] = doMock();
|
||||
create({ type: 't', version: 'v', fields: 'f' }, {}, context);
|
||||
expect(types.get).to.have.been.calledWithExactly({ name: 't', version: 'v' });
|
||||
});
|
||||
|
||||
it('should call initialProperties on returned type', () => {
|
||||
const [{ default: create }] = doMock();
|
||||
const t = { initialProperties: sinon.stub() };
|
||||
t.initialProperties.returns({ then: () => {} });
|
||||
types.get.returns(t);
|
||||
@@ -46,32 +53,26 @@ describe('create-object', () => {
|
||||
});
|
||||
|
||||
it('should populate fields', async () => {
|
||||
const p = sinon.stub();
|
||||
const [{ default: create }] = doMock({ populator: p });
|
||||
await create({ type: 't', version: 'v', fields: 'f' }, { properties: 'props' }, context);
|
||||
expect(p).to.have.been.calledWithExactly({ sn, properties: merged, fields: 'f' }, context);
|
||||
expect(populator).to.have.been.calledWithExactly({ sn, properties: merged, fields: 'f' }, context);
|
||||
});
|
||||
|
||||
it('should call properties onChange handler when optional props are provided', async () => {
|
||||
const [{ default: create }] = doMock();
|
||||
await create({ type: 't', version: 'v', fields: 'f' }, { properties: 'props' }, context);
|
||||
expect(sn.qae.properties.onChange).to.have.been.calledWithExactly(merged);
|
||||
});
|
||||
|
||||
it('should not call onChange handler when optional props are not provided', async () => {
|
||||
const [{ default: create }] = doMock();
|
||||
await create({ type: 't', version: 'v', fields: 'f' }, {}, context);
|
||||
expect(sn.qae.properties.onChange.callCount).to.equal(0);
|
||||
});
|
||||
|
||||
it('should create a session object with merged props', async () => {
|
||||
const [{ default: create }] = doMock();
|
||||
await create({ type: 't', version: 'v', fields: 'f' }, { properties: 'props' }, context);
|
||||
expect(context.app.createSessionObject).to.have.been.calledWithExactly(merged);
|
||||
});
|
||||
|
||||
it('should call nebbie get', async () => {
|
||||
const [{ default: create }] = doMock();
|
||||
const ret = await create({ type: 't', version: 'v', fields: 'f' }, { properties: 'props', x: 'a' }, context);
|
||||
expect(ret).to.equal('got it');
|
||||
expect(context.nebbie.get).to.have.been.calledWithExactly(
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
const doMock = () => aw.mock([['**/uid.js', () => () => 'uid']], ['../hc-handler.js']);
|
||||
|
||||
describe('hc-handler', () => {
|
||||
let h;
|
||||
let hc;
|
||||
let def;
|
||||
let handler;
|
||||
before(() => {
|
||||
[{ default: handler }] = doMock();
|
||||
[{ default: handler }] = aw.mock([['**/uid.js', () => () => 'uid']], ['../hc-handler.js']);
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
const doMock = ({ handler } = {}) => aw.mock([['**/hc-handler.js', () => handler]], ['../populator.js']);
|
||||
describe('populator', () => {
|
||||
let handler;
|
||||
let context;
|
||||
@@ -19,7 +18,7 @@ describe('populator', () => {
|
||||
warn: sb.stub(),
|
||||
},
|
||||
};
|
||||
[{ default: populate, fieldType: ft }] = doMock({ handler });
|
||||
[{ default: populate, fieldType: ft }] = aw.mock([['**/hc-handler.js', () => handler]], ['../populator.js']);
|
||||
});
|
||||
beforeEach(() => {
|
||||
sb.reset();
|
||||
|
||||
@@ -1,13 +1,3 @@
|
||||
const mock = ({ SNFactory = () => ({}), satisfies = () => false, load = () => null } = {}) =>
|
||||
aw.mock(
|
||||
[
|
||||
['**/dist/supernova.js', () => SNFactory],
|
||||
['**/semver.js', () => ({ satisfies })],
|
||||
['**/load.js', () => ({ load })],
|
||||
],
|
||||
['../type']
|
||||
);
|
||||
|
||||
describe('type', () => {
|
||||
let c;
|
||||
let SNFactory;
|
||||
@@ -20,7 +10,14 @@ describe('type', () => {
|
||||
SNFactory = sb.stub();
|
||||
load = sb.stub();
|
||||
satisfies = sb.stub();
|
||||
[{ default: create }] = mock({ SNFactory, load, satisfies });
|
||||
[{ default: create }] = aw.mock(
|
||||
[
|
||||
['**/dist/supernova.js', () => SNFactory],
|
||||
['**/semver.js', () => ({ satisfies })],
|
||||
['**/load.js', () => ({ load })],
|
||||
],
|
||||
['../type']
|
||||
);
|
||||
});
|
||||
beforeEach(() => {
|
||||
c = create({ name: 'pie', version: '1.1.0' }, 'c', { load: 'customLoader' });
|
||||
|
||||
@@ -1,17 +1,3 @@
|
||||
const mock = ({ createType, clearFromCache = () => {} } = {}) =>
|
||||
aw.mock(
|
||||
[
|
||||
['**/sn/type.js', () => createType],
|
||||
[
|
||||
'**/sn/load.js',
|
||||
() => ({
|
||||
clearFromCache,
|
||||
}),
|
||||
],
|
||||
],
|
||||
['../types']
|
||||
);
|
||||
|
||||
describe('types', () => {
|
||||
let sb;
|
||||
let create;
|
||||
@@ -23,7 +9,18 @@ describe('types', () => {
|
||||
sb = sinon.createSandbox();
|
||||
type = sb.stub();
|
||||
clearFromCache = sb.stub();
|
||||
[{ create, semverSort }] = mock({ createType: type, clearFromCache });
|
||||
[{ create, semverSort }] = aw.mock(
|
||||
[
|
||||
['**/sn/type.js', () => type],
|
||||
[
|
||||
'**/sn/load.js',
|
||||
() => ({
|
||||
clearFromCache,
|
||||
}),
|
||||
],
|
||||
],
|
||||
['../types']
|
||||
);
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
describe('creator', () => {
|
||||
const [{ default: create }] = aw.mock([['**/action-hero.js', () => () => ({})]], ['../../src/creator']);
|
||||
let create;
|
||||
before(() => {
|
||||
[{ default: create }] = aw.mock([['**/action-hero.js', () => () => ({})]], ['../../src/creator']);
|
||||
});
|
||||
|
||||
it('should return a default component api', () => {
|
||||
const generator = {
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
// import generator from '../../src/generator';
|
||||
|
||||
describe('generator', () => {
|
||||
const [{ default: generator }] = aw.mock(
|
||||
[
|
||||
['**/creator.js', () => (...a) => [...a]],
|
||||
['**/qae.js', () => qae => qae || 'qae'],
|
||||
],
|
||||
['../../src/generator']
|
||||
);
|
||||
let generator;
|
||||
before(() => {
|
||||
[{ default: generator }] = aw.mock(
|
||||
[
|
||||
['**/creator.js', () => (...a) => [...a]],
|
||||
['**/qae.js', () => qae => qae || 'qae'],
|
||||
],
|
||||
['../../src/generator']
|
||||
);
|
||||
});
|
||||
|
||||
it('should have a default qae property', () => {
|
||||
expect(generator({}).qae).to.eql('qae');
|
||||
|
||||
Reference in New Issue
Block a user