sogo/Tests/spec/WebDAVSpec.js

116 lines
3.7 KiB
JavaScript

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
expect(o.status)
.withContext(`HTTP status code when expanding properties`)
.toBe(207)
Object.keys(outcomes).forEach(p => {
const { response: { href, propstat: { prop: { displayname }} }} = props[p]
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)
})
})
})
})