diff --git a/Tests/lib/WebDAV.js b/Tests/lib/WebDAV.js index e71fe41c2c..3794ce40f3 100644 --- a/Tests/lib/WebDAV.js +++ b/Tests/lib/WebDAV.js @@ -71,10 +71,10 @@ class WebDAV { localHeaders.recipients = recipients.join(',') return fetch(this.serverUrl + resource, { - method: 'POST', - body: vcalendar, - headers: { ...this.headers, ...localHeaders } - }) + method: 'POST', + body: vcalendar, + headers: { ...this.headers, ...localHeaders } + }) } getEvent(resource, filename) { @@ -232,7 +232,7 @@ class WebDAV { // http://tools.ietf.org/html/rfc3253.html#section-3.8 expendProperty(resource, properties) { return davRequest({ - url: `${this.serverUrl}/${resource}`, + url: this.serverUrl + resource, init: { method: 'REPORT', namespace: DAVNamespaceShorthandMap[DAVNamespace.DAV], @@ -251,7 +251,7 @@ class WebDAV { syncColletion(resource) { return davRequest({ - url: `${this.serverUrl}/${resource}`, + url: this.serverUrl + resource, init: { method: 'REPORT', namespace: DAVNamespaceShorthandMap[DAVNamespace.DAV], @@ -272,7 +272,7 @@ class WebDAV { syncQuery(resource, token = '', properties) { const formattedProperties = properties.map(p => { return { name: p, namespace: DAVNamespace.DAV } }) return syncCollection({ - url: `${this.serverUrl}/${resource}`, + url: this.serverUrl + resource, props: formattedProperties, syncLevel: 1, syncToken: token, diff --git a/Tests/package.json b/Tests/package.json index fbae3e8eeb..e85967127b 100644 --- a/Tests/package.json +++ b/Tests/package.json @@ -10,6 +10,7 @@ "@babel/core": "^7.15.0", "@babel/preset-env": "^7.15.0", "babel-cli": "^6.26.0", + "cookie": "^0.4.1", "cross-fetch": "^3.1.4", "esm": "^3.2.25", "ical.js": "^1.4.0", diff --git a/Tests/spec/DAVCalendarAclSpec.js b/Tests/spec/DAVCalendarAclSpec.js index 2feea588f6..070b4e63e0 100644 --- a/Tests/spec/DAVCalendarAclSpec.js +++ b/Tests/spec/DAVCalendarAclSpec.js @@ -53,7 +53,9 @@ END:VCALENDAR` const _checkViewEventRight = function(operation, event, eventClass, right) { if (right) { - expect(event).toBeTruthy() + expect(event) + .withContext(`Returned event during operation '${operation}'`) + .toBeTruthy() if (['v', 'r', 'm'].includes(right)) { const iscClass = classToICSClass[eventClass] const expectedEvent = utility.formatTemplate(event_template, { @@ -338,7 +340,9 @@ END:VCALENDAR` const _testEventRight = async function(eventClass, rights) { const right = Object.keys(rights).includes(eventClass) ? rights[eventClass] : undefined - let event = await _getEvent(eventClass) + let event + + event = await _getEvent(eventClass) _checkViewEventRight('GET', event, eventClass, right) event = await _propfindEvent(eventClass) @@ -372,7 +376,9 @@ END:VCALENDAR` const _testRights = async function(rights) { const results = await utility.setupCalendarRights(resource, config.subscriber_username, rights) expect(results.length).toBe(1) - expect(results[0].status).toBe(204) + expect(results[0].status) + .withContext(`Setup rights (${JSON.stringify(rights)}) on ${resource}`) + .toBe(204) await _testCreate(rights) await _testCollectionDAVAcl(rights) await _testEventRight('pu', rights) @@ -393,7 +399,9 @@ END:VCALENDAR` 'filename': eventFilename }) let response = await webdav.createCalendarObject(resource, eventFilename, event) - expect(response.status).toBe(201) + expect(response.status) + .withContext(`HTTP status when creating event with ${c} class`) + .toBe(201) // Create task for each class const taskFilename = `${c.toLowerCase()}-task.ics` const task = utility.formatTemplate(task_template, { @@ -401,7 +409,9 @@ END:VCALENDAR` 'filename': taskFilename }) response = await webdav.createCalendarObject(resource, taskFilename, task) - expect(response.status).toBe(201) + expect(response.status) + .withContext(`HTTP status when creating task with ${c} class`) + .toBe(201) } }) diff --git a/Tests/spec/HTTPPreferencesSpec.js b/Tests/spec/HTTPPreferencesSpec.js new file mode 100644 index 0000000000..d04bd5d1e7 --- /dev/null +++ b/Tests/spec/HTTPPreferencesSpec.js @@ -0,0 +1,56 @@ +import config from '../lib/config' +import Preferences from '../lib/Preferences' + +const prefs = new Preferences(config.username, config.password) + +beforeAll(async function() { + // because if not set in vacation will not be found later + // we must make sure they are there at the start + await prefs.setOrCreate('autoReplyText', '', ['defaults', 'Vacation']) + await prefs.setOrCreate('PreventInvitations', 0, ['settings', 'Calendar']) + await prefs.setOrCreate('PreventInvitationsWhitelist', {}, ['settings', 'Calendar']) +}) + +describe('preferences', function() { + + const _setTextPref = async function(prefText) { + await prefs.set('autoReplyText', prefText) + const prefData = await prefs.get('Vacation') + + expect(prefData.autoReplyText) + .withContext(`Set a text preference to a known value`) + .toEqual(prefText) + } + + // preferencesTest + + it('Set/get a text preference - normal characters', async function() { + await _setTextPref('defaultText') + }) + + it('Set/get a text preference - weird characters - used to crash on 1.3.12', async function() { + const prefText = `weird data \ ' \"; ^` + await _setTextPref(prefText) + }) + + it('Set/get the PreventInvitation pref', async function() { + await prefs.set('PreventInvitations', 0) + const notset = await prefs.get('Calendar', false) + expect(notset.PreventInvitations) + .withContext(`Set/get Settings/Calendar/PreventInvitations (0)`) + .toEqual(0) + await prefs.set('PreventInvitations', 1) + const isset = await prefs.get('Calendar', false) + expect(isset.PreventInvitations) + .withContext(`Set/get Settings/Calendar/PreventInvitations (1)`) + .toEqual(1) + }) + + it('Set/get the PreventInvitations Whitelist', async function() { + await prefs.set('PreventInvitationsWhitelist', config.white_listed_attendee) + const whitelist = await prefs.get('Calendar', false) + expect(whitelist.PreventInvitationsWhitelist) + .withContext(`Set/get Settings/Calendar/PreventInvitationsWhitelist`) + .toEqual(config.white_listed_attendee) + }) +}) diff --git a/Tests/spec/WebDAVSpec.js b/Tests/spec/WebDAVSpec.js index 6242d1dc56..64cb9638c5 100644 --- a/Tests/spec/WebDAVSpec.js +++ b/Tests/spec/WebDAVSpec.js @@ -99,11 +99,17 @@ describe('WebDAV', function() { expect(results.length).toBe(1) results.forEach(o => { const { props = {} } = o - expect(o.status).toBe(207) + 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).toBe(outcomes[p].href) - expect(displayname).toBe(outcomes[p].displayname) + 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) }) }) }) diff --git a/Tests/spec/support/jasmine.json b/Tests/spec/support/jasmine.json new file mode 100644 index 0000000000..4f0fdb35c2 --- /dev/null +++ b/Tests/spec/support/jasmine.json @@ -0,0 +1,11 @@ +{ + "spec_dir": "spec", + "spec_files": [ + "**/*[sS]pec.?(m)js" + ], + "helpers": [ + "helpers/**/*.?(m)js" + ], + "stopSpecOnExpectationFailure": false, + "random": true +}