koel/resources/assets/js/components/layout/app-footer/FooterPlaybackControls.spec.ts

59 lines
1.7 KiB
TypeScript
Raw Normal View History

2022-10-13 15:18:47 +00:00
import { ref } from 'vue'
import { expect, it } from 'vitest'
import factory from '@/__tests__/factory'
import UnitTestCase from '@/__tests__/UnitTestCase'
2024-05-19 05:49:42 +00:00
import { CurrentPlayableKey } from '@/symbols'
2022-10-13 15:18:47 +00:00
import { playbackService } from '@/services'
import { screen } from '@testing-library/vue'
2022-12-02 16:17:37 +00:00
import FooterPlaybackControls from './FooterPlaybackControls.vue'
2022-10-13 15:18:47 +00:00
new class extends UnitTestCase {
2024-04-23 21:01:27 +00:00
protected test () {
it('renders without a current song', () => expect(this.renderComponent(null).html()).toMatchSnapshot())
it('renders with a current song', () => expect(this.renderComponent().html()).toMatchSnapshot())
it('plays the previous song', async () => {
const playMock = this.mock(playbackService, 'playPrev')
this.renderComponent()
await this.user.click(screen.getByRole('button', { name: 'Play previous song' }))
expect(playMock).toHaveBeenCalled()
})
it('plays the next song', async () => {
const playMock = this.mock(playbackService, 'playNext')
this.renderComponent()
await this.user.click(screen.getByRole('button', { name: 'Play next song' }))
expect(playMock).toHaveBeenCalled()
})
}
2022-10-13 15:18:47 +00:00
private renderComponent (song?: Song | null) {
if (song === undefined) {
song = factory<Song>('song', {
2022-12-02 16:17:37 +00:00
id: '00000000-0000-0000-0000-000000000000',
2022-10-13 15:18:47 +00:00
title: 'Fahrstuhl to Heaven',
artist_name: 'Led Zeppelin',
artist_id: 3,
album_name: 'Led Zeppelin IV',
album_id: 4,
liked: true
})
}
return this.render(FooterPlaybackControls, {
global: {
stubs: {
PlayButton: this.stub('PlayButton')
},
provide: {
2024-05-19 05:49:42 +00:00
[<symbol>CurrentPlayableKey]: ref(song)
2022-10-13 15:18:47 +00:00
}
}
})
}
}