mirror of
https://github.com/koel/koel
synced 2024-12-20 09:33:23 +00:00
79 lines
2.6 KiB
TypeScript
79 lines
2.6 KiB
TypeScript
|
import UnitTestCase from '@/__tests__/UnitTestCase'
|
||
|
import data from '@/__tests__/blobs/data'
|
||
|
import { queueStore } from '@/stores/queueStore'
|
||
|
import { expect, it } from 'vitest'
|
||
|
|
||
|
const ARTIST_ID = 5
|
||
|
let songs
|
||
|
let songToQueue: Song
|
||
|
|
||
|
new class extends UnitTestCase {
|
||
|
protected beforeEach () {
|
||
|
super.beforeEach(() => {
|
||
|
songs = data.songs.filter(song => song.artist_id === ARTIST_ID)
|
||
|
queueStore.state.songs = songs
|
||
|
queueStore.state.current = songs[1]
|
||
|
|
||
|
songToQueue = data.songs[0]
|
||
|
})
|
||
|
}
|
||
|
|
||
|
protected test () {
|
||
|
it('returns all queued songs', () => expect(queueStore.all).toEqual(songs))
|
||
|
it('returns the first queued song', () => expect(queueStore.first.title).toBe('No bravery'))
|
||
|
it('returns the last queued song', () => expect(queueStore.last.title).toBe('Tears and rain'))
|
||
|
|
||
|
it('appends a song to end of the queue', () => {
|
||
|
queueStore.queue(songToQueue)
|
||
|
expect(queueStore.last.title).toBe('I Swear')
|
||
|
})
|
||
|
|
||
|
it('prepends a song to top of the queue', () => {
|
||
|
queueStore.queueToTop(songToQueue)
|
||
|
expect(queueStore.first.title).toBe('I Swear')
|
||
|
})
|
||
|
|
||
|
it('replaces the whole queue', () => {
|
||
|
queueStore.replaceQueueWith(songToQueue)
|
||
|
expect(queueStore.all).toHaveLength(1)
|
||
|
expect(queueStore.first.title).toBe('I Swear')
|
||
|
})
|
||
|
|
||
|
it('removes a song from queue', () => {
|
||
|
queueStore.unqueue(queueStore.state.songs[0])
|
||
|
expect(queueStore.first.title).toBe('So long, Jimmy')
|
||
|
})
|
||
|
|
||
|
it('removes multiple songs from queue', () => {
|
||
|
queueStore.unqueue([queueStore.state.songs[0], queueStore.state.songs[1]])
|
||
|
expect(queueStore.first.title).toBe('Wisemen')
|
||
|
})
|
||
|
|
||
|
it('removes all songs from queue', () => {
|
||
|
queueStore.clear()
|
||
|
expect(queueStore.state.songs).toHaveLength(0)
|
||
|
})
|
||
|
|
||
|
it('returns the current song', () => expect(queueStore.current?.title).toBe('So long, Jimmy'))
|
||
|
|
||
|
it('sets the current song', () => {
|
||
|
queueStore.current = queueStore.state.songs[0]
|
||
|
expect(queueStore.current.title).toBe('No bravery')
|
||
|
})
|
||
|
|
||
|
it('gets the next song in queue', () => expect(queueStore.next?.title).toBe('Wisemen'))
|
||
|
|
||
|
it('returns undefined as next song if at end of queue', () => {
|
||
|
queueStore.current = queueStore.state.songs[queueStore.state.songs.length - 1]
|
||
|
expect(queueStore.next).toBeUndefined()
|
||
|
})
|
||
|
|
||
|
it('gets the previous song in queue', () => expect(queueStore.previous?.title).toBe('No bravery'))
|
||
|
|
||
|
it('returns undefined as previous song if at beginning of queue', () => {
|
||
|
queueStore.current = queueStore.state.songs[0]
|
||
|
expect(queueStore.previous).toBeUndefined()
|
||
|
})
|
||
|
}
|
||
|
}
|