@snippetify/book-reader
Version:
Book reader utilities
202 lines (176 loc) • 6.82 kB
JavaScript
require('./utils/mock').initJsDOM()
const config = require('../src/config')
const Events = require('../src/events')
const { assert, expect } = require('chai')
const BookBuilder = require('../src/BookBuilder')
const Decorator = require('../src/models/Decorator')
const EventManager = require('../src/EventManager')
const DecoratorManager = require('../src/DecoratorManager')
const { decorators, pages, selectTextInDom } = require('./utils/mock')
describe('DecoratorManager', () => {
let decorationManager
const getOneDecorator = () => {
const bookBuilder = BookBuilder.getInstance()
.setRootElement($(document).find('body').get(0))
.setPages(pages)
.build()
.print()
selectTextInDom($(document).find('p').get(0))
const selection = bookBuilder.selectionManager.create()
return new Decorator({ ...selection, uuid: 'ert2', type: 'note' })
}
beforeEach(() => {
decorationManager = DecoratorManager.getInstance()
decorationManager
.setConfig(config.decorator)
.setRootElement($(document).find('body').get(0))
})
describe('#getInstance', () => {
it('doit retourner une instance de DecoratorManager', () => {
assert.isTrue(DecoratorManager.getInstance() instanceof DecoratorManager)
})
})
describe('#setConfig', () => {
it('contient la configuration', () => {
decorationManager.setConfig(config.decorator)
expect(config.decorator).to.eql(decorationManager.config)
})
})
describe('#setRootElement', () => {
it('doit injecter le root element', () => {
decorationManager.setRootElement(document)
expect(document).to.equal(decorationManager.rootElement)
})
})
describe('#setEvents', () => {
it('doit injecter le manager d\'evenement', () => {
const events = EventManager.getInstance()
decorationManager.setEvents(events)
expect(events).to.eql(decorationManager.events)
})
})
describe('#find', () => {
it('doit retourner un seul element', () => {
const index = 0
const decorator = decorators[index]
decorationManager.add(decorator)
expect(decorator).to.eql(decorationManager.find(decorator.uuid))
})
})
describe('#setMany', () => {
it('doit inserer plusieurs elements', () => {
decorationManager.setMany(decorators)
expect(decorators).to.eql(decorationManager.decorators)
})
})
describe('#add', () => {
it('doit inserer un seul element', () => {
const index = 0
decorationManager.add(decorators[index])
expect(decorators[index]).to.eql(decorationManager.decorators[index])
})
})
describe('#update', () => {
it('doit modifier un seul element', () => {
const index = 0
decorationManager.add(decorators[index])
expect(undefined).to.eql(decorationManager.decorators[index].style)
decorators[index].style = { color: 'red' }
decorationManager.update(decorators[index])
expect(decorators[index].style).to.eql(decorationManager.decorators[index].style)
})
})
describe('#updateMany', () => {
it('doit modifier plusieurs elements', () => {
const index = 0
const decorator = decorators[index]
decorator.style = {}
decorationManager.add(decorator)
expect({}).to.eql(decorationManager.decorators[index].style)
decorator.style = { color: 'red' }
decorationManager.updateMany([decorator])
expect(decorator.style).to.eql(decorationManager.decorators[index].style)
})
})
describe('#remove', () => {
it('doit effacer un seul element', () => {
const index = 0
const decorator = decorators[index]
decorationManager.add(decorator)
expect(decorator).to.eql(decorationManager.decorators[index])
decorationManager.remove(decorator)
assert.equal(undefined, decorationManager.decorators[index])
})
})
describe('#removeMany', () => {
it('doit effacer plusieurs elements', () => {
decorationManager.setMany(decorators)
expect(decorators).to.eql(decorationManager.decorators)
decorationManager.removeMany(decorators)
assert.equal(0, decorationManager.decorators.length)
})
})
describe('#removeAll', () => {
it('doit effacer tous les elements', () => {
decorationManager.setMany(decorators)
expect(decorators).to.eql(decorationManager.decorators)
decorationManager.removeAll()
assert.equal(0, decorationManager.decorators.length)
})
})
describe('#printOne', () => {
it('doit imprimer un decorator', () => {
decorationManager.printOne(getOneDecorator())
assert.isTrue($(document).find('body').find('[data-uuid="ert2"]').length > 0)
})
})
describe('#print', () => {
it('doit etre ajouté dans le body de la page', () => {
decorationManager.setMany([getOneDecorator()]).print()
assert.isTrue($(document).find('body').find('[data-uuid="ert2"]').length > 0)
})
})
describe('#updatePrinting', () => {
it('modifier un decorator dans la page', () => {
const decorator = getOneDecorator()
decorationManager.setMany([decorator]).print()
assert.isTrue($(document).find('body').find('[data-uuid="ert2"]').length > 0)
decorator.style = { color: 'red' }
decorationManager.updatePrinting(decorator)
assert.equal('red', $(document).find('body').find('[data-uuid="ert2"]').css('color'))
})
})
describe('#unprintOne', () => {
it('doit etre enlevé dans le body de la page', () => {
const decorator = getOneDecorator()
decorationManager.printOne(decorator)
assert.isTrue($(document).find('body').find('[data-uuid="ert2"]').length > 0)
decorationManager.unprintOne(decorator)
assert.isTrue($(document).find('body').find('[data-uuid="ert2"]').length === 0)
})
})
describe('#unprintAll', () => {
it('doit enlever tous les decorator dans le body de la page', () => {
const decorator = getOneDecorator()
decorationManager.printOne(decorator)
assert.isTrue($(document).find('body').find('[data-uuid="ert2"]').length > 0)
decorationManager.unprintAll()
assert.isTrue($(document).find('body').find('[data-uuid="ert2"]').length === 0)
})
})
describe('#initDispatcher', () => {
it('doit etre à l\'ecoute de l\'evenement onDecoratorClick afin de l\'intercepter', () => {
const decorator = getOneDecorator()
const bookBuilder = BookBuilder.getInstance()
.setRootElement($(document).find('body').get(0))
.setPages(pages)
.setDecorators([decorator])
.build()
.print()
bookBuilder.events.subscribe(Events.decoratorClick, item => {
expect(decorator).to.eql(item)
})
$('body').find('[data-uuid]').trigger('click')
})
})
})