@snippetify/book-reader
Version:
Book reader utilities
82 lines (69 loc) • 2.71 kB
JavaScript
require('./utils/mock').initJsDOM()
const jquery = require('jquery')
const { JSDOM } = require('jsdom')
const Events = require('../src/events')
const { assert, expect } = require('chai')
const BookBuilder = require('../src/BookBuilder')
const EventManager = require('../src/EventManager')
const Selection = require('../src/models/Selection')
const SelectionManager = require('../src/SelectionManager')
const { pages, content, selectTextInDom } = require('./utils/mock')
describe('SelectionManager', () => {
let selectionManager
beforeEach(() => {
selectionManager = SelectionManager.getInstance()
selectionManager
.setEvents(EventManager.getInstance())
.setRootElement($(document).find('body').get(0))
})
describe('#getInstance', () => {
it('doit retourner une instance de SelectionManager', () => {
assert.isTrue(SelectionManager.getInstance() instanceof SelectionManager)
})
})
describe('#setRootElement', () => {
it('doit injecter le root element', () => {
selectionManager.setRootElement(document)
expect(document).to.equal(selectionManager.rootElement)
})
})
describe('#setEvents', () => {
it('doit injecter le manager d\'evenement', () => {
const events = EventManager.getInstance()
selectionManager.setEvents(events)
expect(events).to.eql(selectionManager.events)
})
})
describe('#create', () => {
it('doit retourner un objet Selection contenant l\'element selectionné', () => {
const bookBuilder = BookBuilder.getInstance()
bookBuilder.setRootElement($(document).find('body').get(0))
.setPages(pages).build().print()
selectTextInDom($(document).find('p').get(0))
const selection = selectionManager.create()
expect(selection).to.be.instanceOf(Selection)
expect(selection.content).to.contains($(content).first().text())
})
})
// TODO: Test non réussi, à retravailler
describe('#initDispatcher', () => {
it('s\'assurer que l\'événement textSelected a été lancé et contient le contenu selectionné', () => {
const jsdom = new JSDOM('<!doctype html><html><body></body></html>')
const { window } = jsdom
const { document } = window
const myJquery = jquery(window)
const rootElement = myJquery(document).find('body').get(0)
BookBuilder
.getInstance()
.setRootElement(rootElement)
.setPages(pages)
.build()
.print()
.events.subscribe(Events.textSelected, selection => {
expect(selection.content).to.contains($(content).first().text())
})
selectTextInDom(rootElement)
$(rootElement).trigger('click')
})
})
})