diff --git a/test/tests/unlock.js b/test/tests/unlock.js
index b28dd193..9076862f 100644
--- a/test/tests/unlock.js
+++ b/test/tests/unlock.js
@@ -6,7 +6,7 @@ module.exports = (test, options, index) => test('unlock', isValid =>
{
var server = new webdav.WebDAVServer();
server.start(options.port + index);
- isValid = isValid.multiple(1, server);
+ isValid = isValid.multiple(4, server);
const _ = (e, cb) => {
if(e)
isValid(false, e);
@@ -42,13 +42,86 @@ module.exports = (test, options, index) => test('unlock', isValid =>
url: url + '/test.txt',
method: 'UNLOCK',
headers: {
- 'Lock-Token': lock,
+ 'Lock-Token': lock === 'urn:uuid:24fa520c-520c-14fa-00d6-0000d546f655' ? 'urn:uuid:24fa520c-520c-14fa-00d6-0000d546f656' : 'urn:uuid:24fa520c-520c-14fa-00d6-0000d546f655',
Authorization: 'Basic dXNlcm5hbWVYOnBhc3N3b3Jk'
}
}, (e, res, body) => _(e, () => {
- wfsNotOwner.writeFile('/test.txt', 'Content!', (e) => _(e, () => isValid(true)))
+ if(res.statusCode !== 409)
+ {
+ isValid(false, 'A bad Lock-Token must lead to a 409 Conflict');
+ return;
+ }
+
+ request({
+ url: url + '/test.txt',
+ method: 'UNLOCK',
+ headers: {
+ 'Lock-Token': lock,
+ Authorization: 'Basic dXNlcm5hbWVYOnBhc3N3b3Jk'
+ }
+ }, (e, res, body) => _(e, () => {
+ wfsNotOwner.writeFile('/test.txt', 'Content!', (e) => _(e, () => isValid(true)))
+ }))
}))
}))
}))
}))
+
+ server.rootResource.addChild(new webdav.VirtualFile('test2.txt'), e => _(e, () => {
+ request({
+ url: url + '/test2.txt',
+ method: 'UNLOCK',
+ headers: {
+ 'Lock-Token': 'urn:uuid:24fa520c-520c-14fa-00d6-0000d546f655',
+ Authorization: 'Basic dXNlcm5hbWVYOnBhc3N3b3Jk'
+ }
+ }, (e, res, body) => _(e, () => {
+ isValid(res.statusCode === 409, 'An UNLOCK request to a not locked resource must lead to a 409 Conflict');
+ }))
+ }))
+
+ server.rootResource.addChild(new webdav.VirtualFile('test3.txt'), e => _(e, () => {
+ request({
+ url: url + '/test3.txt',
+ method: 'LOCK',
+ headers: {
+ Authorization: 'Basic dXNlcm5hbWVYOnBhc3N3b3Jk'
+ },
+ body: ''+url+'/user'
+ }, (e, res, body) => _(e, () => {
+ const lock = body.substr(body.indexOf('') + ''.length, 'urn:uuid:24fa520c-520c-14fa-00d6-0000d546f655'.length);
+
+ request({
+ url: url + '/test3.txt',
+ method: 'UNLOCK',
+ headers: {
+ 'Lock-Token': lock,
+ Authorization: 'Basic dXNlcm5hbWVYMjpwYXNzd29yZDI='
+ }
+ }, (e, res, body) => _(e, () => {
+ isValid(res.statusCode === 403, 'An UNLOCK request to a resource not locked by the user must lead to a 403 Forbidden');
+ }))
+ }))
+ }))
+
+ server.rootResource.addChild(new webdav.VirtualFile('test4.txt'), e => _(e, () => {
+ request({
+ url: url + '/test4.txt',
+ method: 'LOCK',
+ headers: {
+ Authorization: 'Basic dXNlcm5hbWVYOnBhc3N3b3Jk'
+ },
+ body: ''+url+'/user'
+ }, (e, res, body) => _(e, () => {
+ request({
+ url: url + '/test4.txt',
+ method: 'UNLOCK',
+ headers: {
+ Authorization: 'Basic dXNlcm5hbWVYOnBhc3N3b3Jk'
+ }
+ }, (e, res, body) => _(e, () => {
+ isValid(res.statusCode === 400, 'An UNLOCK request without Lock-Token header must lead to a 400 Bad Request');
+ }))
+ }))
+ }))
})
\ No newline at end of file