You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.2 KiB
126 lines
4.2 KiB
import path from 'path'
|
|
import { expect } from 'chai'
|
|
|
|
import AdminJS from './adminjs'
|
|
|
|
import BaseDatabase from './backend/adapters/database/base-database'
|
|
import BaseResource from './backend/adapters/resource/base-resource'
|
|
import { ComponentLoader } from './backend/utils/component-loader'
|
|
|
|
describe('AdminJS', function () {
|
|
beforeEach(function () {
|
|
global.RegisteredAdapters = []
|
|
})
|
|
|
|
describe('#constructor', function () {
|
|
it('sets default root path when no given', function () {
|
|
expect(new AdminJS().options.rootPath).to.equal('/admin')
|
|
})
|
|
})
|
|
|
|
describe('.AdminJS.registerAdapter', function () {
|
|
beforeEach(function () {
|
|
class Database extends BaseDatabase {}
|
|
class Resource extends BaseResource {}
|
|
this.DatabaseAdapter = { Database, Resource }
|
|
})
|
|
|
|
it('adds given adapter to list off all available adapters', function () {
|
|
AdminJS.registerAdapter(this.DatabaseAdapter)
|
|
expect(global.RegisteredAdapters).to.have.lengthOf(1)
|
|
})
|
|
|
|
it('throws an error when adapter is not full', function () {
|
|
expect(() => {
|
|
AdminJS.registerAdapter({
|
|
Resource: BaseResource,
|
|
Database: null as unknown as typeof BaseDatabase })
|
|
}).to.throw('Adapter has to have both Database and Resource')
|
|
})
|
|
|
|
it('throws an error when adapter has elements not being subclassed from base adapter', function () {
|
|
expect(() => {
|
|
AdminJS.registerAdapter({
|
|
Resource: {} as typeof BaseResource,
|
|
Database: {} as typeof BaseDatabase,
|
|
})
|
|
}).to.throw('Adapter elements have to be a subclass of AdminJS.BaseResource and AdminJS.BaseDatabase')
|
|
})
|
|
})
|
|
|
|
describe('resolveBabelConfigPath', function () {
|
|
it('load .babelrc file', function () {
|
|
const adminJS = new AdminJS({ bundler: { babelConfig: '../.babelrc' } })
|
|
expect(adminJS.options.bundler.babelConfig).not.to.undefined
|
|
})
|
|
|
|
it('load with json object directly', function () {
|
|
const adminJS = new AdminJS({ bundler: { babelConfig: {
|
|
presets: [
|
|
'@babel/preset-react',
|
|
['@babel/preset-env', {
|
|
targets: {
|
|
node: '8',
|
|
},
|
|
}],
|
|
'@babel/preset-typescript',
|
|
],
|
|
plugins: ['babel-plugin-styled-components'],
|
|
only: ['src/', 'spec/'],
|
|
ignore: [
|
|
'src/frontend/assets/scripts/app-bundle.development.js',
|
|
'src/frontend/assets/scripts/app-bundle.production.js',
|
|
'src/frontend/assets/scripts/global-bundle.development.js',
|
|
'src/frontend/assets/scripts/global-bundle.production.js',
|
|
],
|
|
} } })
|
|
expect(adminJS.options.bundler.babelConfig).not.to.undefined
|
|
})
|
|
|
|
it('load babel.config.js file', function () {
|
|
const adminJS = new AdminJS({ bundler: { babelConfig: './babel.test.config.js' } })
|
|
expect(adminJS.options.bundler.babelConfig).not.to.undefined
|
|
})
|
|
})
|
|
|
|
describe('.bundle', function () {
|
|
const loader = new ComponentLoader()
|
|
afterEach(function () {
|
|
loader.clear()
|
|
})
|
|
context('file exists', function () {
|
|
beforeEach(function () {
|
|
this.result = loader.add('ExampleComponent', '../spec/fixtures/example-component')
|
|
})
|
|
|
|
it('adds given file to a UserComponents object', function () {
|
|
expect(Object.keys(loader.getComponents())).to.have.lengthOf(1)
|
|
})
|
|
|
|
it('returns uniqe id', function () {
|
|
expect(loader.getComponents()[this.result]).not.to.be.undefined
|
|
expect(this.result).to.be.a('string')
|
|
})
|
|
|
|
it('converts relative path to absolute path', function () {
|
|
expect(
|
|
loader.getComponents()[this.result],
|
|
).to.equal(path.join(__dirname, '../spec/fixtures/example-component'))
|
|
})
|
|
})
|
|
|
|
context('component name given', function () {
|
|
it('returns the same component name as which was given', function () {
|
|
const name = loader.add('Dashboard', '../spec/fixtures/example-component')
|
|
expect(name).to.eq('Dashboard')
|
|
})
|
|
})
|
|
|
|
it('throws an error when component doesn\'t exist', function () {
|
|
expect(() => {
|
|
loader.add('ExampleComponent', './fixtures/example-components')
|
|
}).to.throw().property('name', 'ConfigurationError')
|
|
})
|
|
})
|
|
})
|