mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-02-17 07:33:57 +00:00
133 lines
3.9 KiB
JavaScript
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)
|
|
})
|
|
}) |