mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-02-17 07:33:57 +00:00
64 lines
2.4 KiB
JavaScript
64 lines
2.4 KiB
JavaScript
import config from '../lib/config'
|
|
import WebDAV from '../lib/WebDAV'
|
|
import { DAVNamespace, DAVNamespaceShorthandMap } from 'tsdav'
|
|
import convert from 'xml-js'
|
|
|
|
beforeAll(function () {
|
|
jasmine.DEFAULT_TIMEOUT_INTERVAL = config.timeout || 10000;
|
|
});
|
|
|
|
describe('webdav sync', function() {
|
|
const webdav = new WebDAV(config.username, config.password)
|
|
const webdav_su = new WebDAV(config.superuser, config.superuser_password)
|
|
const resource = `/SOGo/dav/${config.username}/Calendar/test-webdavsync/`
|
|
|
|
afterEach(async function() {
|
|
await webdav_su.deleteObject(resource)
|
|
})
|
|
|
|
it('webdav sync', async function() {
|
|
const nsShort = DAVNamespaceShorthandMap[DAVNamespace.DAV].toUpperCase()
|
|
let response, xml, token
|
|
|
|
// missing tests:
|
|
// invalid tokens: negative, non-numeric, > current timestamp
|
|
// non-empty collections: token validity, status codes for added,
|
|
// modified and removed elements
|
|
|
|
response = await webdav.makeCalendar(resource)
|
|
expect(response.length).toBe(1)
|
|
expect(response[0].status)
|
|
.withContext(`HTTP status code when creating a Calendar`)
|
|
.toBe(201)
|
|
|
|
// test queries:
|
|
// empty collection:
|
|
// without a token (query1)
|
|
// with a token (query2)
|
|
// (when done, non-empty collection:
|
|
// without a token (query3)
|
|
// with a token (query4))
|
|
|
|
response = await webdav.syncCollectionRaw(resource, null, [ 'getetag' ])
|
|
xml = await response.text();
|
|
({ [`${nsShort}:multistatus`]: { [`${nsShort}:sync-token`]: { _text: token } } } = convert.xml2js(xml, {compact: true, nativeType: true}))
|
|
expect(response.status)
|
|
.withContext(`HTTP status code when performing sync-query without a token`)
|
|
.toBe(207)
|
|
expect(token)
|
|
.withContext(`Sync query returns valid token`)
|
|
.toBeGreaterThanOrEqual(0)
|
|
|
|
// we make sure that any token is accepted when the collection is
|
|
// empty, but that the returned token differs
|
|
response = await webdav.syncCollectionRaw(resource, '1234', [ 'getetag' ])
|
|
xml = await response.text();
|
|
({ [`${nsShort}:multistatus`]: { [`${nsShort}:sync-token`]: { _text: token } } } = convert.xml2js(xml, {compact: true, nativeType: true}))
|
|
expect(response.status)
|
|
.withContext(`HTTP status code when performing sync-query with a token`)
|
|
.toBe(207)
|
|
expect(token)
|
|
.withContext(`Sync query returns valid token`)
|
|
.toBeGreaterThanOrEqual(0)
|
|
})
|
|
}) |