2021-07-16 20:42:15 +02:00
|
|
|
import config from '../lib/config'
|
|
|
|
import WebDAV from '../lib/WebDAV'
|
|
|
|
import TestUtility from '../lib/utilities'
|
|
|
|
|
|
|
|
describe('WebDAV', function() {
|
|
|
|
var webdav
|
|
|
|
var utility
|
|
|
|
|
|
|
|
beforeEach(function() {
|
|
|
|
webdav = new WebDAV(config.username, config.password)
|
|
|
|
utility = new TestUtility(webdav)
|
|
|
|
})
|
|
|
|
|
|
|
|
it("property: 'principal-collection-set' on collection object", async function() {
|
|
|
|
const resource = `/SOGo/dav/${config.username}/`
|
|
|
|
const results = await webdav.principalCollectionSet(resource)
|
|
|
|
expect(results.length).toBe(1)
|
|
|
|
results.forEach(o => {
|
|
|
|
expect(o.ok).toBe(true)
|
|
|
|
expect(o.status).toBe(207)
|
|
|
|
expect(resource).toBe(o.href)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it("property: 'principal-collection-set' on non-collection object", function() {
|
|
|
|
const resource = `/SOGo/dav/${config.username}/freebusy.ifb`
|
|
|
|
return webdav.principalCollectionSet(resource).then(function(results) {
|
|
|
|
expect(results.length).toBe(1)
|
|
|
|
results.forEach(o => {
|
|
|
|
expect(o.ok).toBe(true)
|
|
|
|
expect(o.status).toBe(207)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it("propfind: ensure various NSURL work-arounds", async function() {
|
|
|
|
const resultsNoSlash = await webdav.propfindURL(`/SOGo/dav/${config.username}`)
|
|
|
|
resultsNoSlash.forEach(o => {
|
|
|
|
// Expect no trailing slash nowhere
|
|
|
|
expect(o.href.slice(-1)).toMatch(/[^\/]$/)
|
|
|
|
})
|
|
|
|
const resultsWithSlash = await webdav.propfindURL(`/SOGo/dav/${config.username}/`)
|
|
|
|
resultsWithSlash.forEach(o => {
|
|
|
|
// Expect a trailing slash for collections only
|
|
|
|
if (o.props.resourcetype.collection) {
|
|
|
|
expect(o.href.slice(-1)).toMatch(/\/$/)
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
expect(o.href.slice(-1)).toMatch(/[^\/]$/)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
const resultsNoColl = await webdav.propfindURL(`/SOGo/dav/${config.username}/freebusy.ifb`)
|
|
|
|
resultsNoColl.forEach(o => {
|
|
|
|
// Expect no collection
|
|
|
|
expect(o.props.resourcetype.collection).toBeFalsy()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
// REPORT
|
|
|
|
it("principal-property-search", async function() {
|
|
|
|
const resource = `/SOGo/dav/${config.username}/Calendar`
|
|
|
|
const user = await utility.fetchUserInfo(config.username)
|
|
|
|
const results = await webdav.principalPropertySearch(resource)
|
|
|
|
expect(results.length).toBe(1)
|
|
|
|
results.forEach(o => {
|
|
|
|
expect(o.props.displayname).toBe(user.displayname)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
// http://tools.ietf.org/html/rfc3253.html#section-3.8
|
|
|
|
it("expand-property", async function () {
|
|
|
|
const resource = `/SOGo/dav/${config.username}/`
|
|
|
|
const user = await utility.fetchUserInfo(config.username)
|
|
|
|
const properties = [
|
|
|
|
{
|
|
|
|
_attributes: {
|
|
|
|
name: 'owner'
|
|
|
|
},
|
|
|
|
property: { _attributes: { name: 'displayname' } }
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_attributes: {
|
|
|
|
name: 'principal-collection-set'
|
|
|
|
},
|
|
|
|
property: { _attributes: { name: 'displayname' } }
|
|
|
|
}
|
|
|
|
]
|
|
|
|
const outcomes = {
|
|
|
|
owner: {
|
|
|
|
href: resource,
|
|
|
|
displayname: user.displayname
|
|
|
|
},
|
|
|
|
principalCollectionSet: {
|
|
|
|
href: '/SOGo/dav/',
|
|
|
|
displayname: 'SOGo'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const results = await webdav.expendProperty(resource, properties)
|
|
|
|
expect(results.length).toBe(1)
|
|
|
|
results.forEach(o => {
|
|
|
|
const { props = {} } = o
|
2021-09-01 17:07:32 +02:00
|
|
|
expect(o.status)
|
|
|
|
.withContext(`HTTP status code when expanding properties`)
|
|
|
|
.toBe(207)
|
2021-07-16 20:42:15 +02:00
|
|
|
Object.keys(outcomes).forEach(p => {
|
|
|
|
const { response: { href, propstat: { prop: { displayname }} }} = props[p]
|
2021-09-01 17:07:32 +02:00
|
|
|
expect(href)
|
|
|
|
.withContext(`Result of expand-property for href`)
|
|
|
|
.toBe(outcomes[p].href)
|
|
|
|
expect(displayname)
|
|
|
|
.withContext(`Result of expand-property for displayname`)
|
|
|
|
.toBe(outcomes[p].displayname)
|
2021-07-16 20:42:15 +02:00
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|