242 lines
6.4 KiB
JavaScript
242 lines
6.4 KiB
JavaScript
import config from '../lib/config'
|
|
import WebDAV from '../lib/WebDAV'
|
|
import TestUtility from '../lib/utilities'
|
|
|
|
describe('create, read, modify, delete tasks for regular user', function() {
|
|
const webdav = new WebDAV(config.username, config.password)
|
|
const webdav_su = new WebDAV(config.superuser, config.superuser_password)
|
|
const webdav_subscriber = new WebDAV(config.subscriber_username, config.subscriber_password)
|
|
const utility = new TestUtility(webdav)
|
|
|
|
const cards = {
|
|
'new.vcf': `BEGIN:VCARD
|
|
VERSION:3.0
|
|
PRODID:-//Inverse//Card Generator//EN
|
|
UID:NEWTESTCARD
|
|
N:New;Carte
|
|
FN:Carte 'new'
|
|
ORG:societe;service
|
|
NICKNAME:surnom
|
|
ADR;TYPE=work:adr2 societe;;adr societe;ville societe;etat soc;code soc;pays soc
|
|
ADR;TYPE=home:rue perso 2;;rue perso;ville perso;etat perso;code post perso;pays perso
|
|
TEL;TYPE=work:+1 514 123-3372
|
|
TEL;TYPE=home:tel dom
|
|
TEL;TYPE=cell:portable
|
|
TEL;TYPE=fax:fax
|
|
TEL;TYPE=pager:pager
|
|
X-MOZILLA-HTML:FALSE
|
|
EMAIL;TYPE=work:address.email@domaine.ca
|
|
EMAIL;TYPE=home:address.email@domaine2.com
|
|
URL;TYPE=home:web perso
|
|
TITLE:fonction
|
|
URL;TYPE=work:page soc
|
|
CUSTOM1:divers1
|
|
CUSTOM2:divers2
|
|
CUSTOM3:divers3
|
|
CUSTOM4:divers4
|
|
NOTE:Remarque
|
|
X-AIM:pseudo aim
|
|
END:VCARD`,
|
|
'old.vcf': `BEGIN:VCARD
|
|
VERSION:3.0
|
|
PRODID:-//Inverse//Card Generator//EN
|
|
UID:NEWTESTCARD
|
|
N:Old;Carte
|
|
FN:Carte 'old'
|
|
ORG:societe;service
|
|
NICKNAME:surnom
|
|
ADR;TYPE=work:adr2 societe;;adr societe;ville societe;etat soc;code soc;pays soc
|
|
ADR;TYPE=home:rue perso 2;;rue perso;ville perso;etat perso;code post perso;pays perso
|
|
TEL;TYPE=work:+1 514 123-3372
|
|
TEL;TYPE=home:tel dom
|
|
TEL;TYPE=cell:portable
|
|
TEL;TYPE=fax:fax
|
|
TEL;TYPE=pager:pager
|
|
X-MOZILLA-HTML:FALSE
|
|
EMAIL;TYPE=work:address.email@domaine.ca
|
|
EMAIL;TYPE=home:address.email@domaine2.com
|
|
URL;TYPE=home:web perso
|
|
TITLE:fonction
|
|
URL;TYPE=work:page soc
|
|
CUSTOM1:divers1
|
|
CUSTOM2:divers2
|
|
CUSTOM3:divers3
|
|
CUSTOM4:divers4
|
|
NOTE:Remarque
|
|
X-AIM:pseudo aim
|
|
END:VCARD`,
|
|
'new-modified.vcf': `BEGIN:VCARD
|
|
VERSION:3.0
|
|
PRODID:-//Inverse//Card Generator//EN
|
|
UID:NEWTESTCARD
|
|
N:New;Carte modifiee
|
|
FN:Carte modifiee 'new'
|
|
ORG:societe;service
|
|
NICKNAME:surnom
|
|
ADR;TYPE=work:adr2 societe;;adr societe;ville societe;etat soc;code soc;pays soc
|
|
ADR;TYPE=home:rue perso 2;;rue perso;ville perso;etat perso;code post perso;pays perso
|
|
TEL;TYPE=work:+1 514 123-3372
|
|
TEL;TYPE=home:tel dom
|
|
TEL;TYPE=cell:portable
|
|
TEL;TYPE=fax:fax
|
|
TEL;TYPE=pager:pager
|
|
X-MOZILLA-HTML:FALSE
|
|
EMAIL;TYPE=work:address.email@domaine.ca
|
|
EMAIL;TYPE=home:address.email@domaine2.com
|
|
URL;TYPE=home:web perso
|
|
TITLE:fonction
|
|
URL;TYPE=work:page soc
|
|
CUSTOM1:divers1
|
|
CUSTOM2:divers2
|
|
CUSTOM3:divers3
|
|
CUSTOM4:divers4
|
|
NOTE:Remarque
|
|
X-AIM:pseudo aim
|
|
END:VCARD`,
|
|
'old-modified.vcf': `BEGIN:VCARD
|
|
VERSION:3.0
|
|
PRODID:-//Inverse//Card Generator//EN
|
|
UID:NEWTESTCARD
|
|
N:Old;Carte modifiee
|
|
FN:Carte modifiee 'old'
|
|
ORG:societe;service
|
|
NICKNAME:surnom
|
|
ADR;TYPE=work:adr2 societe;;adr societe;ville societe;etat soc;code soc;pays soc
|
|
ADR;TYPE=home:rue perso 2;;rue perso;ville perso;etat perso;code post perso;pays perso
|
|
TEL;TYPE=work:+1 514 123-3372
|
|
TEL;TYPE=home:tel dom
|
|
TEL;TYPE=cell:portable
|
|
TEL;TYPE=fax:fax
|
|
TEL;TYPE=pager:pager
|
|
X-MOZILLA-HTML:FALSE
|
|
EMAIL;TYPE=work:address.email@domaine.ca
|
|
EMAIL;TYPE=home:address.email@domaine2.com
|
|
URL;TYPE=home:web perso
|
|
TITLE:fonction
|
|
URL;TYPE=work:page soc
|
|
CUSTOM1:divers1
|
|
CUSTOM2:divers2
|
|
CUSTOM3:divers3
|
|
CUSTOM4:divers4
|
|
NOTE:Remarque
|
|
X-AIM:pseudo aim
|
|
END:VCARD`
|
|
}
|
|
|
|
const sogoRights = {
|
|
c: 'ObjectCreator',
|
|
d: 'ObjectEraser',
|
|
v: 'ObjectViewer',
|
|
e: 'ObjectEditor'
|
|
}
|
|
|
|
const resource = `/SOGo/dav/${config.username}/Contacts/test-dav-acl/`
|
|
|
|
const _putCard = async function(client, filename, expectedCode, realCard) {
|
|
const card = cards[realCard || filename]
|
|
if (!card)
|
|
throw new Error(`Card ${realCard || filename} is unknown`)
|
|
const response = await client.createVCard(resource, filename, card)
|
|
expect(response.status).toBe(expectedCode)
|
|
}
|
|
|
|
const _getCard = async function(client, filename, expectedCode) {
|
|
const [{ status }] = await client.getCard(resource, filename)
|
|
expect(status).toBe(expectedCode)
|
|
}
|
|
|
|
const _deleteCard = async function(client, filename, expectedCode = 204) {
|
|
const response = await client.deleteObject(resource + filename)
|
|
expect(response.status)
|
|
.withContext('HTTP status code when deleting a card')
|
|
.toBe(expectedCode)
|
|
}
|
|
|
|
const _testView = async function(rights) {
|
|
let expectedCode = 403
|
|
if (rights && (rights.v || rights.e)) {
|
|
expectedCode = 200
|
|
}
|
|
await _getCard(webdav_subscriber, 'old.vcf', expectedCode)
|
|
}
|
|
|
|
const _testCreate = async function(rights) {
|
|
let expectedCode
|
|
if (rights && rights.c)
|
|
expectedCode = 201
|
|
else
|
|
expectedCode = 403
|
|
await _putCard(webdav_subscriber, 'new.vcf', expectedCode)
|
|
}
|
|
|
|
const _testModify = async function(rights) {
|
|
let expectedCode
|
|
if (rights && rights.e)
|
|
expectedCode = 204
|
|
else
|
|
expectedCode = 403
|
|
await _putCard(webdav_subscriber, 'old.vcf', expectedCode, 'old-modified.vcf')
|
|
}
|
|
|
|
const _testDelete = async function(rights) {
|
|
let expectedCode = 403
|
|
if (rights && rights.d) {
|
|
expectedCode = 204
|
|
}
|
|
await _deleteCard(webdav_subscriber, 'old.vcf', expectedCode)
|
|
}
|
|
|
|
const _testRights = async function(rights) {
|
|
const results = await utility.setupAddressBookRights(resource, config.subscriber_username, rights)
|
|
expect(results.length).toBe(1)
|
|
expect(results[0].status).toBe(204)
|
|
await _testCreate(rights)
|
|
await _testView(rights)
|
|
await _testModify(rights)
|
|
await _testDelete(rights)
|
|
}
|
|
|
|
beforeEach(async function() {
|
|
await webdav.deleteObject(resource)
|
|
await webdav.makeCollection(resource)
|
|
await _putCard(webdav, 'old.vcf', 201)
|
|
})
|
|
|
|
afterEach(async function() {
|
|
await webdav_su.deleteObject(resource)
|
|
})
|
|
|
|
// DAVAddressBookAclTest
|
|
|
|
it("'view' only", async function() {
|
|
await _testRights({ v: true })
|
|
})
|
|
|
|
it("'edit' only", async function() {
|
|
await _testRights({ e: true })
|
|
})
|
|
|
|
it("'create' only", async function() {
|
|
await _testRights({ c: true })
|
|
})
|
|
|
|
it("'delete' only", async function() {
|
|
await _testRights({ d: true })
|
|
})
|
|
|
|
it("'create', 'delete'", async function() {
|
|
await _testRights({ c: true, d: true })
|
|
})
|
|
|
|
it("'view', 'delete'", async function() {
|
|
await _testRights({ v: true, d: true })
|
|
})
|
|
|
|
it("'edit', 'create'", async function() {
|
|
await _testRights({ c: true, e: true })
|
|
})
|
|
|
|
it("'edit', 'delete'", async function() {
|
|
await _testRights({ d: true, e: true })
|
|
})
|
|
}) |