test(dav): add e2e tests for availability & absence

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
This commit is contained in:
Ferdinand Thiessen 2025-10-23 02:53:23 +02:00
parent 97b91027da
commit 3364f18ca0
No known key found for this signature in database
GPG key ID: 45FAE7268762B400

View file

@ -0,0 +1,128 @@
/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { clearState } from '../../support/commonUtils.ts'
describe('Calendar: Availability', { testIsolation: true }, () => {
before(() => {
clearState()
})
it('User can see the availability section in settings', () => {
cy.createRandomUser().then(($user) => {
cy.login($user)
cy.visit('/settings/user')
})
// can see the section
cy.findAllByRole('link', { name: /Availability/ })
.should('be.visible')
.click()
cy.url().should('match', /settings\/user\/availability$/)
cy.findByRole('heading', { name: /Availability/, level: 2 })
.should('be.visible')
})
it('Users can set their availability status', () => {
cy.createRandomUser().then(($user) => {
cy.login($user)
cy.visit('/settings/user/availability')
})
// can see the settings
cy.findByRole('list', { name: 'Weekdays' })
.should('be.visible')
.within(() => {
cy.contains('li', 'Friday')
.should('be.visible')
.should('contain.text', 'No working hours set')
.as('fridayItem')
.findByRole('button', { name: 'Add slot' })
.click()
})
cy.get('@fridayItem')
.findByLabelText(/start time/i)
.type('09:00')
cy.get('@fridayItem')
.findByLabelText(/end time/i)
.type('18:00')
cy.intercept('PROPPATCH', '**/remote.php/dav/calendars/*/inbox').as('saveAvailability')
cy.get('#availability')
.findByRole('button', { name: 'Save' })
.click()
cy.wait('@saveAvailability')
cy.reload()
cy.findByRole('list', { name: 'Weekdays' })
.should('be.visible')
.within(() => {
cy.contains('li', 'Friday')
.should('be.visible')
.should('not.contain.text', 'No working hours set')
})
})
it('Users can set their absence', () => {
cy.createUser({ language: 'en', password: 'password', userId: 'replacement-user' })
cy.createRandomUser().then(($user) => {
cy.login($user)
cy.visit('/settings/user/availability')
})
cy.findByRole('heading', { name: /absence/i }).scrollIntoView()
cy.findByLabelText(/First day/)
.should('be.visible')
.type('2024-12-24')
cy.findByLabelText(/Last day/)
.should('be.visible')
.type('2024-12-28')
cy.findByRole('textbox', { name: /Short absence/ })
.should('be.visible')
.type('Vacation')
cy.findByRole('textbox', { name: /Long absence/ })
.should('be.visible')
.type('Happy holidays!')
cy.intercept('GET', '**/ocs/v2.php/apps/files_sharing/api/v1/sharees?*search=replacement*').as('userSearch')
cy.findByRole('searchbox')
.should('be.visible')
.as('userSearchBox')
.click()
cy.get('@userSearchBox')
.type('replacement')
cy.wait('@userSearch')
cy.findByRole('option', { name: 'replacement-user' })
.click()
cy.intercept('POST', '**/ocs/v2.php/apps/dav/api/v1/outOfOffice/*').as('saveAbsence')
cy.get('#absence')
.findByRole('button', { name: 'Save' })
.click()
cy.wait('@saveAbsence')
cy.reload()
// see its saved
cy.findByLabelText(/First day/)
.should('have.value', '2024-12-24')
cy.findByLabelText(/Last day/)
.should('have.value', '2024-12-28')
cy.findByRole('textbox', { name: /Short absence/ })
.should('have.value', 'Vacation')
cy.findByRole('textbox', { name: /Long absence/ })
.should('have.value', 'Happy holidays!')
cy.findByRole('combobox')
.should('contain.text', 'replacement-user')
})
})