116 lines
3.2 KiB
JavaScript
116 lines
3.2 KiB
JavaScript
import config from '../lib/config'
|
|
import WebDAV from '../lib/WebDAV'
|
|
import TestUtility from '../lib/utilities'
|
|
|
|
describe('DAVCalendarSuperUserAcl', function() {
|
|
const webdav = new WebDAV(config.username, config.password)
|
|
const webdav_su = new WebDAV(config.superuser, config.superuser_password)
|
|
const utility = new TestUtility(webdav)
|
|
|
|
const event_template = `BEGIN:VCALENDAR
|
|
PRODID:-//Inverse//Event Generator//EN
|
|
VERSION:2.0
|
|
BEGIN:VEVENT
|
|
SEQUENCE:0
|
|
TRANSP:OPAQUE
|
|
UID:12345-%(class)-%(filename)
|
|
SUMMARY:%(class) event (orig. title)
|
|
DTSTART:20090805T100000Z
|
|
DTEND:20090805T140000Z
|
|
CLASS:%(class)
|
|
DESCRIPTION:%(class) description
|
|
LOCATION:location
|
|
%(organizer_line)%(attendee_line)CREATED:20090805T100000Z
|
|
DTSTAMP:20090805T100000Z
|
|
END:VEVENT
|
|
END:VCALENDAR`
|
|
|
|
const resource = `/SOGo/dav/${config.subscriber_username}/Calendar/test-dav-superuser-acl/`
|
|
const filename = 'suevent.ics'
|
|
|
|
const event = utility.formatTemplate(event_template, {
|
|
'class': 'PUBLIC',
|
|
'filename': filename
|
|
})
|
|
|
|
beforeAll(async function() {
|
|
await webdav_su.deleteObject(resource)
|
|
await webdav_su.makeCalendar(resource)
|
|
})
|
|
|
|
afterAll(async function() {
|
|
await webdav_su.deleteObject(resource)
|
|
})
|
|
|
|
// DAVCalendarSuperUserAclTest.testSUAccess
|
|
it("create, read, modify, delete for superuser", async function() {
|
|
let result, results
|
|
|
|
// 1. Create
|
|
|
|
result = await webdav_su.createCalendarObject(resource, filename, event)
|
|
expect(result.status)
|
|
.withContext('Event creation returns status code 201')
|
|
.toBe(201)
|
|
|
|
// 2. Read - GET
|
|
|
|
results = await webdav_su.getObject(resource, filename)
|
|
expect(results.length).toBe(1)
|
|
expect(results[0].raw.replace(/\r\n/g,'\n')).toBe(event)
|
|
|
|
// 2. Read - PROPFIND calendar-data
|
|
|
|
results = await webdav_su.propfindEvent(resource + filename)
|
|
expect(results.length).toBe(2) // suevent.ics + suevent.ics/master
|
|
expect(results.find(o => {
|
|
if (o.href == resource + filename) {
|
|
expect(o.props.calendarData.replace(/\r\n/g,'\n')).toBe(event)
|
|
return true
|
|
}
|
|
return false
|
|
})).toBeTruthy()
|
|
|
|
// 2. Read - REPORT calendar-multiget
|
|
|
|
results = await webdav_su.calendarMultiGet(resource, filename)
|
|
expect(results.length).toBe(1)
|
|
expect(results.find(o => {
|
|
if (o.href == resource + filename) {
|
|
expect(o.props.calendarData.replace(/\r\n/g,'\n')).toBe(event)
|
|
return true
|
|
}
|
|
return false
|
|
})).toBeTruthy()
|
|
|
|
// 2. Read - webdav-sync
|
|
|
|
results = await webdav_su.syncColletion(resource)
|
|
expect(results.length).toBe(1)
|
|
expect(results.find(o => {
|
|
expect(o.status).toBe(201)
|
|
if (o.href == resource + filename) {
|
|
expect(o.props.calendarData.replace(/\r\n/g,'\n')).toBe(event)
|
|
return true
|
|
}
|
|
return false
|
|
})).toBeTruthy()
|
|
|
|
// 3. Modify
|
|
|
|
const classes = ['CONFIDENTIAL', 'PRIVATE', 'PUBLIC']
|
|
for (const c of classes) {
|
|
const event = utility.formatTemplate(event_template, {
|
|
'class': c,
|
|
'filename': filename
|
|
})
|
|
const response = await webdav_su.createCalendarObject(resource, filename, event)
|
|
expect(response.status).toBe(204)
|
|
}
|
|
|
|
// 4. Delete
|
|
const response = await webdav_su.deleteObject(resource)
|
|
expect(response.status).toBe(204)
|
|
})
|
|
|
|
}) |