Add data structures for chart plugin system (#6028)

* add unit tests

* add test structure

* add unit tests for Registry

* add LoaderRegistry unit test

* add unit test for makeSingleton

* add type check

* add plugin data structures

* simplify API

* add preset tests

* update test message

* fix lint

* update makeSingleton

* update Plugin, Preset and unit test

* revise Registry code

* update unit test, add remove function

* update test

* update unit test

* update plugin unit test

* add .keys(), .entries() and .entriesAsPromise()

* update test description
This commit is contained in:
Krist Wongsuphasawat
2018-10-09 11:47:16 -07:00
committed by Chris Williams
parent 395359f5ad
commit cd2c46a5ed
16 changed files with 602 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
import { describe, it } from 'mocha';
import { expect } from 'chai';
import ChartPlugin from '../../../../src/visualizations/core/models/ChartPlugin';
import ChartMetadata from '../../../../src/visualizations/core/models/ChartMetadata';
describe('ChartPlugin', () => {
const metadata = new ChartMetadata({});
it('exists', () => {
expect(ChartPlugin).to.not.equal(undefined);
});
describe('new ChartPlugin()', () => {
it('creates a new plugin', () => {
const plugin = new ChartPlugin({
metadata,
Chart() {},
});
expect(plugin).to.be.instanceof(ChartPlugin);
});
it('throws an error if metadata is not specified', () => {
expect(() => new ChartPlugin()).to.throw(Error);
});
it('throws an error if none of Chart or loadChart is specified', () => {
expect(() => new ChartPlugin({ metadata })).to.throw(Error);
});
});
describe('.register(key)', () => {
const plugin = new ChartPlugin({
metadata,
Chart() {},
});
it('throws an error if key is not provided', () => {
expect(() => plugin.register()).to.throw(Error);
expect(() => plugin.configure({ key: 'abc' }).register()).to.not.throw(Error);
});
it('returns itself', () => {
expect(plugin.configure({ key: 'abc' }).register()).to.equal(plugin);
});
});
});