koel/cypress/integration/queuing.spec.ts

142 lines
4.5 KiB
TypeScript
Raw Normal View History

2021-01-01 19:53:58 +00:00
// Setting scrollBehavior to false because we don't want Cypress to scroll the row into view,
// causing the first row lost due to virtual scrolling.
context('Queuing', { scrollBehavior: false }, () => {
const MIN_SONG_ITEMS_SHOWN = 15
beforeEach(() => {
cy.$mockPlayback()
cy.$login()
})
it('allows shuffling all songs', () => {
cy.$clickSidebarItem('Current Queue')
cy.get('#queueWrapper').within(() => {
cy.findByText('Current Queue').should('be.visible')
cy.findByText('shuffling all songs').click()
cy.get('tr.song-item').should('have.length.at.least', MIN_SONG_ITEMS_SHOWN)
cy.get('tr.song-item:first-child').should('have.class', 'playing')
})
cy.$assertPlaying()
2021-01-01 19:53:58 +00:00
})
it('clears the queue', () => {
cy.$clickSidebarItem('Current Queue')
cy.get('#queueWrapper').within(() => {
cy.findByText('Current Queue').should('be.visible')
cy.findByText('shuffling all songs').click()
cy.get('tr.song-item').should('have.length.at.least', MIN_SONG_ITEMS_SHOWN)
cy.get('.screen-header [data-test=song-list-controls]')
.findByText('Clear')
.click()
cy.get('tr.song-item').should('have.length', 0)
})
})
it('shuffles all from a song list screen', () => {
cy.$clickSidebarItem('All Songs')
cy.get('#songsWrapper').within(() => {
cy.get('.screen-header [data-test=btn-shuffle-all]').click()
cy.url().should('contains', '/#!/queue')
})
cy.get('#queueWrapper').within(() => {
cy.get('tr.song-item').should('have.length.at.least', MIN_SONG_ITEMS_SHOWN)
cy.get('tr.song-item:first-child').should('have.class', 'playing')
})
cy.$assertPlaying()
2021-01-01 19:53:58 +00:00
})
it('creates a queue from selected songs', () => {
cy.$shuffleSeveralSongs()
2021-01-01 19:53:58 +00:00
cy.get('#queueWrapper').within(() => {
cy.get('tr.song-item').should('have.length', 3)
cy.get('tr.song-item:first-child').should('have.class', 'playing')
})
})
it('deletes a song from queue', () => {
cy.$shuffleSeveralSongs()
2021-01-01 19:53:58 +00:00
cy.get('#queueWrapper').within(() => {
cy.get('tr.song-item').should('have.length', 3)
cy.get('tr.song-item:first-child').type('{backspace}')
cy.get('tr.song-item').should('have.length', 2)
})
})
2021-01-02 10:28:07 +00:00
it('queues a song when plays it', () => {
cy.$shuffleSeveralSongs()
2021-01-02 10:28:07 +00:00
cy.$clickSidebarItem('All Songs')
let songTitle
cy.get('#songsWrapper').within(() => {
cy.get('tr.song-item:nth-child(4) .title')
.invoke('text')
.then(text => {
songTitle = text
})
cy.get('tr.song-item:nth-child(4)').dblclick()
})
cy.$clickSidebarItem('Current Queue')
cy.get('#queueWrapper').within(() => {
cy.get('tr.song-item').should('have.length', 4)
cy.get(`tr.song-item:nth-child(2) .title`).should('have.text', songTitle)
cy.get('tr.song-item:nth-child(2)').should('have.class', 'playing')
})
cy.$assertPlaying()
2021-01-02 10:28:07 +00:00
})
it('navigates through the queue', () => {
cy.$shuffleSeveralSongs()
cy.get('#queueWrapper tr.song-item:nth-child(1)').should('have.class', 'playing')
cy.findByTestId('play-next-btn').click({ force: true })
cy.get('#queueWrapper tr.song-item:nth-child(2)').should('have.class', 'playing')
cy.$assertPlaying()
cy.findByTestId('play-prev-btn').click({ force: true })
cy.get('#queueWrapper tr.song-item:nth-child(1)').should('have.class', 'playing')
cy.$assertPlaying()
})
it('stops playing if reaches end of queue in no-repeat mode', () => {
cy.$shuffleSeveralSongs()
cy.findByTestId('play-next-btn').click({ force: true })
cy.findByTestId('play-next-btn').click({ force: true })
cy.findByTestId('play-next-btn').click({ force: true })
cy.$assertNotPlaying()
})
it('rotates if reaches end of queue in repeat-all mode', () => {
cy.findByTestId('repeat-mode-switch').click()
cy.$shuffleSeveralSongs()
cy.findByTestId('play-next-btn').click({ force: true })
cy.findByTestId('play-next-btn').click({ force: true })
cy.findByTestId('play-next-btn').click({ force: true })
cy.get('#queueWrapper tr.song-item:nth-child(1)').should('have.class', 'playing')
cy.$assertPlaying()
})
it('still moves to next song in repeat-one mode', () => {
cy.findByTestId('repeat-mode-switch').click()
cy.findByTestId('repeat-mode-switch').click()
cy.$shuffleSeveralSongs()
cy.findByTestId('play-next-btn').click({ force: true })
cy.get('#queueWrapper tr.song-item:nth-child(2)').should('have.class', 'playing')
cy.$assertPlaying()
})
2021-01-01 19:53:58 +00:00
})