test(front): add queue composable tests

This commit is contained in:
Kasper Seweryn 2023-05-06 14:32:08 +02:00 committed by jo
parent ed4b923b1e
commit 1f44cb8e6f
No known key found for this signature in database
GPG Key ID: B2FEC9B22722B984
2 changed files with 235 additions and 6 deletions

View File

@ -1,9 +1,7 @@
import { AudioContext } from 'standardized-audio-context-mock'
import { vi, beforeAll } from 'vitest'
import { vi } from 'vitest'
beforeAll(() => {
vi.mock('standardized-audio-context', () => ({
AudioContext
}))
})
vi.mock('standardized-audio-context', () => ({
AudioContext
}))

View File

@ -0,0 +1,231 @@
import { useQueue } from '~/composables/audio/queue'
import type { Track } from '~/types'
const { tracks, enqueue, dequeue, clear, reorder, currentIndex, shuffle } = 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()
// })
// })