admin-bro
Version:
Admin panel for apps written in node.js
117 lines (95 loc) • 3.56 kB
text/typescript
import chai, { expect } from 'chai'
import sinon from 'sinon'
import chaiAsPromised from 'chai-as-promised'
import BaseResource from './base-resource'
import NotImplementedError from '../../utils/errors/not-implemented-error'
import Filter from '../../utils/filter/filter'
import BaseRecord from '../record/base-record'
import AdminBro from '../../../admin-bro'
import ResourceDecorator from '../../decorators/resource/resource-decorator'
chai.use(chaiAsPromised)
describe('BaseResource', function () {
let resource: BaseResource
beforeEach(function () {
resource = new BaseResource({})
})
afterEach(function () {
sinon.restore()
})
describe('.isAdapterFor', function () {
it('throws NotImplementedError', async function () {
expect(() => BaseResource.isAdapterFor({})).to.throw(NotImplementedError)
})
})
describe('#databaseName', function () {
it('throws NotImplementedError', async function () {
expect(() => resource.databaseName()).to.throw(NotImplementedError)
})
})
describe('#databaseType', function () {
it('returns "database" by default', async function () {
expect(resource.databaseType()).to.eq('other')
})
})
describe('#id', function () {
it('throws NotImplementedError', async function () {
expect(() => resource.id()).to.throw(NotImplementedError)
})
})
describe('#properties', function () {
it('throws NotImplementedError', async function () {
expect(() => resource.properties()).to.throw(NotImplementedError)
})
})
describe('#property', function () {
it('throws NotImplementedError', async function () {
expect(() => resource.property('someProperty')).to.throw(NotImplementedError)
})
})
describe('#count', function () {
it('throws NotImplementedError', async function () {
expect(resource.count({} as Filter)).to.be.rejectedWith(NotImplementedError)
})
})
describe('#find', function () {
it('throws NotImplementedError', async function () {
expect(resource.find({} as Filter, {})).to.be.rejectedWith(NotImplementedError)
})
})
describe('#findOne', function () {
it('throws NotImplementedError', async function () {
expect(resource.findOne('someId')).to.be.rejectedWith(NotImplementedError)
})
})
describe('#build', function () {
it('returns new BaseRecord', async function () {
const params = { param: 'value' }
expect(resource.build(params)).to.be.instanceOf(BaseRecord)
})
})
describe('#create', function () {
it('throws NotImplementedError', async function () {
expect(resource.create({})).to.be.rejectedWith(NotImplementedError)
})
})
describe('#update', function () {
it('throws NotImplementedError', async function () {
expect(resource.update('id', {})).to.be.rejectedWith(NotImplementedError)
})
})
describe('#delete', function () {
it('throws NotImplementedError', async function () {
expect(resource.delete('id')).to.be.rejectedWith(NotImplementedError)
})
})
describe('#decorate', function () {
it('returns new Decorator when resource has been decorated', function () {
sinon.stub(resource, 'properties').returns([])
resource.assignDecorator(new AdminBro(), {})
expect(resource.decorate()).to.be.instanceOf(ResourceDecorator)
})
it('throws error when resource has not been decorated', function () {
expect(() => resource.decorate()).to.throw('resource does not have any assigned decorator yet')
})
})
})