Files
sogo/Tests/spec/CalDAVPropertiesSpec.js
2024-09-26 21:02:50 +02:00

133 lines
3.9 KiB
JavaScript

import config from '../lib/config'
import WebDAV from '../lib/WebDAV'
import TestUtility from '../lib/utilities'
beforeAll(function () {
jasmine.DEFAULT_TIMEOUT_INTERVAL = config.timeout || 10000;
});
describe('read and set calendar properties', function() {
const webdav = new WebDAV(config.username, config.password)
const utility = new TestUtility(webdav)
const resource = `/SOGo/dav/${config.username}/Calendar/test-dav-properties/`
beforeEach(async function() {
await webdav.makeCalendar(resource)
})
afterEach(async function() {
await webdav.deleteObject(resource)
})
it("calendar already exists", async function() {
const response = await webdav.makeCalendar(resource)
expect(response[0].status)
.withContext(`HTTP status code of MKCALENDAR`)
.toEqual(405)
})
// CalDAVPropertiesTest
it("propfind", async function() {
const [result] = await webdav.propfindCaldav(resource, ['schedule-calendar-transp'])
const { raw: { multistatus: { response: { propstat: { status, prop }}}}} = result
expect(status)
.withContext('schedule-calendar-transp profind is successful')
.toBe('HTTP/1.1 200 OK')
expect(Object.keys(prop).length)
.withContext('schedule-calendar-transp has one element only')
.toBe(1)
expect(Object.keys(prop.scheduleCalendarTransp).includes('opaque'))
.withContext('schedule-calendar-transp is "opaque" on new')
.toBeTrue()
})
it("proppatch", async function() {
let newValueNode
let results
newValueNode = { 'thisvaluedoesnotexist': {} }
results = await webdav.proppatchCaldav(resource, {'schedule-calendar-transp': newValueNode})
expect(results.length)
.toBe(1)
expect(results[0].status)
.withContext('Setting an invalid transparency is refused')
.toBe(400)
newValueNode = { 'transparent': {} }
results = await webdav.proppatchCaldav(resource, {'schedule-calendar-transp': newValueNode})
expect(results.length)
.toBe(1)
expect(results[0].status)
.withContext(`Setting transparency to ${newValueNode} is successful`)
.toBe(207)
newValueNode = { 'opaque': {} }
results = await webdav.proppatchCaldav(resource, {'schedule-calendar-transp': newValueNode})
expect(results.length)
.toBe(1)
expect(results[0].status)
.withContext(`Setting transparency to ${newValueNode} is successful`)
.toBe(207)
})
it("calendar-query", async function() {
const filename = `new.ics`
const event = `BEGIN:VCALENDAR
PRODID:-//Inverse//Event Generator//EN
VERSION:2.0
BEGIN:VEVENT
SEQUENCE:0
TRANSP:OPAQUE
UID:1234567890
SUMMARY:Visit to the museum of fine arts
DTSTART:20090805T100000Z
DTEND:20090805T140000Z
CLASS:PUBLIC
DESCRIPTION:description
LOCATION:location
DTSTAMP:20090805T100000Z
END:VEVENT
END:VCALENDAR`
let response = await webdav.createCalendarObject(resource, filename, event)
expect(response.status).toBe(201)
response = await webdav.calendarQuery(
resource,
[
{
type: 'comp-filter',
attributes: { name: 'VCALENDAR' },
children: [
{
type: 'comp-filter',
attributes: { name: 'VEVENT' },
children: [
{
type: 'prop-filter',
attributes: { name: 'TITLE' },
children: [
{
type: 'text-match',
value: 'museum'
}
]
}
]
}
]
}
]
)
expect(response.length)
.withContext(`Number of results from calendar-query`)
.toBe(1)
expect(response[0].status)
.withContext(`HTTP status code of calendar-query`)
.toEqual(207)
expect(utility.componentsAreEqual(response[0].props.calendarData, event))
.withContext(`Returned vCalendar matches ${filename}`)
.toBe(true)
})
})