232 lines
6.0 KiB
TypeScript
232 lines
6.0 KiB
TypeScript
import { useQueue } from '~/composables/audio/queue'
|
|
import type { Track } from '~/types'
|
|
|
|
const { tracks, enqueue, dequeue, clear, reorder, currentIndex } = useQueue()
|
|
|
|
describe('currentIndex', () => {
|
|
beforeEach(async () => {
|
|
await clear()
|
|
await enqueue(
|
|
{ id: 1, uploads: [] } as any as Track,
|
|
{ id: 2, uploads: [] } as any as Track,
|
|
{ id: 3, uploads: [] } as any as Track
|
|
)
|
|
})
|
|
|
|
describe('clamp', () => {
|
|
it('should be clamped to queue size', () => {
|
|
currentIndex.value = 100
|
|
expect(currentIndex.value).toBe(2)
|
|
|
|
currentIndex.value = -100
|
|
expect(currentIndex.value).toBe(0)
|
|
})
|
|
|
|
it('should be clamped to queue size after enqueue', async () => {
|
|
await enqueue({ id: 4, uploads: [] } as any as Track)
|
|
|
|
currentIndex.value = 100
|
|
expect(currentIndex.value).toBe(3)
|
|
|
|
currentIndex.value = -100
|
|
expect(currentIndex.value).toBe(0)
|
|
})
|
|
|
|
it('should be clamped to queue size after clear', async () => {
|
|
await clear()
|
|
expect(currentIndex.value).toBe(0)
|
|
|
|
currentIndex.value = 100
|
|
expect(currentIndex.value).toBe(0)
|
|
|
|
currentIndex.value = -100
|
|
expect(currentIndex.value).toBe(0)
|
|
})
|
|
|
|
it('should update currentIndex after removal of last track', async () => {
|
|
await dequeue(2)
|
|
|
|
currentIndex.value = 100
|
|
expect(currentIndex.value).toBe(1)
|
|
|
|
currentIndex.value = -100
|
|
expect(currentIndex.value).toBe(0)
|
|
})
|
|
|
|
it('should update currentIndex after removal of last track', async () => {
|
|
currentIndex.value = 2
|
|
tracks.value.splice(2, 1)
|
|
expect(currentIndex.value).toBe(1)
|
|
|
|
currentIndex.value = 100
|
|
expect(currentIndex.value).toBe(1)
|
|
|
|
currentIndex.value = -100
|
|
expect(currentIndex.value).toBe(0)
|
|
})
|
|
|
|
it('should update currentIndex after removal of middle track', async () => {
|
|
currentIndex.value = 2
|
|
tracks.value.splice(1, 1)
|
|
expect(currentIndex.value).toBe(1)
|
|
|
|
currentIndex.value = 100
|
|
expect(currentIndex.value).toBe(1)
|
|
|
|
currentIndex.value = -100
|
|
expect(currentIndex.value).toBe(0)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('Ordered queue', () => {
|
|
beforeEach(async () => {
|
|
await clear()
|
|
await enqueue(
|
|
{ id: 1, uploads: [] } as any as Track,
|
|
{ id: 2, uploads: [] } as any as Track,
|
|
{ id: 3, uploads: [] } as any as Track
|
|
)
|
|
})
|
|
|
|
describe('first track is playing', () => {
|
|
beforeEach(() => {
|
|
currentIndex.value = 0
|
|
})
|
|
|
|
it('reorder current track to the middle', () => {
|
|
reorder(0, 1)
|
|
expect(tracks.value).toEqual([2, 1, 3])
|
|
expect(currentIndex.value).toBe(1)
|
|
})
|
|
|
|
it('reorder current track to the end', () => {
|
|
reorder(0, 2)
|
|
expect(tracks.value).toEqual([2, 3, 1])
|
|
expect(currentIndex.value).toBe(2)
|
|
})
|
|
|
|
it('reorder middle track to the beginning', () => {
|
|
reorder(1, 0)
|
|
expect(tracks.value).toEqual([2, 1, 3])
|
|
expect(currentIndex.value).toBe(1)
|
|
})
|
|
|
|
it('reorder middle track to the end', () => {
|
|
reorder(1, 2)
|
|
expect(tracks.value).toEqual([1, 3, 2])
|
|
expect(currentIndex.value).toBe(0)
|
|
})
|
|
|
|
it('reorder last track to the beginning', () => {
|
|
reorder(2, 0)
|
|
expect(tracks.value).toEqual([3, 1, 2])
|
|
expect(currentIndex.value).toBe(1)
|
|
})
|
|
|
|
it('reorder last track to the middle', () => {
|
|
reorder(2, 1)
|
|
expect(tracks.value).toEqual([1, 3, 2])
|
|
expect(currentIndex.value).toBe(0)
|
|
})
|
|
})
|
|
|
|
describe('middle track is playing', () => {
|
|
beforeEach(() => {
|
|
currentIndex.value = 1
|
|
})
|
|
|
|
it('reorder current track to the beginning', () => {
|
|
reorder(1, 0)
|
|
expect(tracks.value).toEqual([2, 1, 3])
|
|
expect(currentIndex.value).toBe(0)
|
|
})
|
|
|
|
it('reorder current track to the end', () => {
|
|
reorder(1, 2)
|
|
expect(tracks.value).toEqual([1, 3, 2])
|
|
expect(currentIndex.value).toBe(2)
|
|
})
|
|
|
|
it('reorder first track to the middle', () => {
|
|
reorder(0, 1)
|
|
expect(tracks.value).toEqual([2, 1, 3])
|
|
expect(currentIndex.value).toBe(0)
|
|
})
|
|
|
|
it('reorder first track to the end', () => {
|
|
reorder(0, 2)
|
|
expect(tracks.value).toEqual([2, 3, 1])
|
|
expect(currentIndex.value).toBe(0)
|
|
})
|
|
|
|
it('reorder last track to the beginning', () => {
|
|
reorder(2, 0)
|
|
expect(tracks.value).toEqual([3, 1, 2])
|
|
expect(currentIndex.value).toBe(2)
|
|
})
|
|
|
|
it('reorder last track to the middle', () => {
|
|
reorder(2, 1)
|
|
expect(tracks.value).toEqual([1, 3, 2])
|
|
expect(currentIndex.value).toBe(2)
|
|
})
|
|
})
|
|
|
|
describe('last track is playing', () => {
|
|
beforeEach(() => {
|
|
currentIndex.value = 2
|
|
})
|
|
|
|
it('reorder current track to the beginning', () => {
|
|
reorder(2, 0)
|
|
expect(tracks.value).toEqual([3, 1, 2])
|
|
expect(currentIndex.value).toBe(0)
|
|
})
|
|
|
|
it('reorder current track to the middle', () => {
|
|
reorder(2, 1)
|
|
expect(tracks.value).toEqual([1, 3, 2])
|
|
expect(currentIndex.value).toBe(1)
|
|
})
|
|
|
|
it('reorder first track to the middle', () => {
|
|
reorder(0, 1)
|
|
expect(tracks.value).toEqual([2, 1, 3])
|
|
expect(currentIndex.value).toBe(2)
|
|
})
|
|
|
|
it('reorder first track to the end', () => {
|
|
reorder(0, 2)
|
|
expect(tracks.value).toEqual([2, 3, 1])
|
|
expect(currentIndex.value).toBe(1)
|
|
})
|
|
|
|
it('reorder middle track to the beginning', () => {
|
|
reorder(1, 0)
|
|
expect(tracks.value).toEqual([2, 1, 3])
|
|
expect(currentIndex.value).toBe(2)
|
|
})
|
|
|
|
it('reorder middle track to the end', () => {
|
|
reorder(1, 2)
|
|
expect(tracks.value).toEqual([1, 3, 2])
|
|
expect(currentIndex.value).toBe(1)
|
|
})
|
|
})
|
|
})
|
|
|
|
// TODO: Add tests for the shuffled queue
|
|
// describe('Shuffled queue', () => {
|
|
// beforeEach(async () => {
|
|
// await clear()
|
|
// await enqueue(
|
|
// { id: 1, uploads: [] } as any as Track,
|
|
// { id: 2, uploads: [] } as any as Track,
|
|
// { id: 3, uploads: [] } as any as Track,
|
|
// )
|
|
//
|
|
// shuffle()
|
|
// })
|
|
// })
|