mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-20 19:06:06 +01:00
96 lines
4.1 KiB
JavaScript
96 lines
4.1 KiB
JavaScript
const chai = require('chai')
|
|
const sinon = require('sinon')
|
|
const TrackProgressMonitor = require('../../../server/objects/TrackProgressMonitor')
|
|
|
|
const expect = chai.expect
|
|
|
|
describe('TrackProgressMonitor', () => {
|
|
let trackDurations
|
|
let trackStartedCallback
|
|
let progressCallback
|
|
let trackFinishedCallback
|
|
let monitor
|
|
|
|
beforeEach(() => {
|
|
trackDurations = [10, 40, 50]
|
|
trackStartedCallback = sinon.spy()
|
|
progressCallback = sinon.spy()
|
|
trackFinishedCallback = sinon.spy()
|
|
})
|
|
|
|
it('should initialize correctly', () => {
|
|
monitor = new TrackProgressMonitor(trackDurations, trackStartedCallback, progressCallback, trackFinishedCallback)
|
|
|
|
expect(monitor.trackDurations).to.deep.equal(trackDurations)
|
|
expect(monitor.totalDuration).to.equal(100)
|
|
expect(monitor.trackStartedCallback).to.equal(trackStartedCallback)
|
|
expect(monitor.progressCallback).to.equal(progressCallback)
|
|
expect(monitor.trackFinishedCallback).to.equal(trackFinishedCallback)
|
|
expect(monitor.currentTrackIndex).to.equal(0)
|
|
expect(monitor.cummulativeProgress).to.equal(0)
|
|
expect(monitor.currentTrackPercentage).to.equal(10)
|
|
expect(monitor.numTracks).to.equal(trackDurations.length)
|
|
expect(monitor.allTracksFinished).to.be.false
|
|
})
|
|
|
|
it('should update the progress', () => {
|
|
monitor = new TrackProgressMonitor(trackDurations, trackStartedCallback, progressCallback, trackFinishedCallback)
|
|
monitor.update(5)
|
|
|
|
expect(monitor.currentTrackIndex).to.equal(0)
|
|
expect(monitor.cummulativeProgress).to.equal(0)
|
|
expect(monitor.currentTrackPercentage).to.equal(10)
|
|
expect(trackStartedCallback.calledOnceWithExactly(0)).to.be.true
|
|
expect(progressCallback.calledOnceWithExactly(0, 50, 5)).to.be.true
|
|
expect(trackFinishedCallback.notCalled).to.be.true
|
|
})
|
|
|
|
it('should update the progress multiple times on the same track', () => {
|
|
monitor = new TrackProgressMonitor(trackDurations, trackStartedCallback, progressCallback, trackFinishedCallback)
|
|
monitor.update(5)
|
|
monitor.update(7)
|
|
|
|
expect(monitor.currentTrackIndex).to.equal(0)
|
|
expect(monitor.cummulativeProgress).to.equal(0)
|
|
expect(monitor.currentTrackPercentage).to.equal(10)
|
|
expect(trackStartedCallback.calledOnceWithExactly(0)).to.be.true
|
|
expect(progressCallback.calledTwice).to.be.true
|
|
expect(progressCallback.calledWithExactly(0, 50, 5)).to.be.true
|
|
expect(progressCallback.calledWithExactly(0, 70, 7)).to.be.true
|
|
expect(trackFinishedCallback.notCalled).to.be.true
|
|
})
|
|
|
|
it('should update the progress multiple times on different tracks', () => {
|
|
monitor = new TrackProgressMonitor(trackDurations, trackStartedCallback, progressCallback, trackFinishedCallback)
|
|
monitor.update(5)
|
|
monitor.update(20)
|
|
|
|
expect(monitor.currentTrackIndex).to.equal(1)
|
|
expect(monitor.cummulativeProgress).to.equal(10)
|
|
expect(monitor.currentTrackPercentage).to.equal(40)
|
|
expect(trackStartedCallback.calledTwice).to.be.true
|
|
expect(trackStartedCallback.calledWithExactly(0)).to.be.true
|
|
expect(trackStartedCallback.calledWithExactly(1)).to.be.true
|
|
expect(progressCallback.calledTwice).to.be.true
|
|
expect(progressCallback.calledWithExactly(0, 50, 5)).to.be.true
|
|
expect(progressCallback.calledWithExactly(1, 25, 20)).to.be.true
|
|
expect(trackFinishedCallback.calledOnceWithExactly(0)).to.be.true
|
|
})
|
|
|
|
it('should finish all tracks', () => {
|
|
monitor = new TrackProgressMonitor(trackDurations, trackStartedCallback, progressCallback, trackFinishedCallback)
|
|
monitor.finish()
|
|
|
|
expect(monitor.allTracksFinished).to.be.true
|
|
expect(trackStartedCallback.calledThrice).to.be.true
|
|
expect(trackFinishedCallback.calledThrice).to.be.true
|
|
expect(progressCallback.notCalled).to.be.true
|
|
expect(trackStartedCallback.calledWithExactly(0)).to.be.true
|
|
expect(trackFinishedCallback.calledWithExactly(0)).to.be.true
|
|
expect(trackStartedCallback.calledWithExactly(1)).to.be.true
|
|
expect(trackFinishedCallback.calledWithExactly(1)).to.be.true
|
|
expect(trackStartedCallback.calledWithExactly(2)).to.be.true
|
|
expect(trackFinishedCallback.calledWithExactly(2)).to.be.true
|
|
})
|
|
})
|