Skip to content

Commit b29eca1

Browse files
Clean up Delete API tests
For PR nodeSolidServer#215 - Include RSVP promise lib - Extract test container and resource creation to helper methods - Pass failing tests
1 parent 798b1cf commit b29eca1

2 files changed

Lines changed: 83 additions & 40 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
"chai": "^3.0.0",
5757
"mocha": "^2.2.5",
5858
"nock": "^2.10.0",
59+
"rsvp": "^3.1.0",
5960
"standard": "^5.4.1",
6061
"supertest": "^1.0.1"
6162
},

test/http.js

Lines changed: 82 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,51 @@ var fs = require('fs')
33
var li = require('li')
44
var ldnode = require('../index')
55
var rm = require('./test-utils').rm
6+
var RSVP = require('rsvp')
7+
8+
var suffixAcl = '.acl'
9+
var suffixMeta = '.meta'
10+
var ldpServer = ldnode({
11+
root: __dirname + '/resources'
12+
})
13+
var server = supertest(ldpServer)
14+
15+
/**
16+
* Creates a new test basic container via an LDP POST
17+
* (located in `test/resources/{containerName}`)
18+
* @method createTestContainer
19+
* @param containerName {String} Container name used as slug, no leading `/`
20+
* @return {RSVP.Promise} Promise obj, for use with Mocha's `before()` etc
21+
*/
22+
function createTestContainer (containerName) {
23+
return new RSVP.Promise(function (resolve, reject) {
24+
server.post('/')
25+
.set('content-type', 'text/turtle')
26+
.set('slug', containerName)
27+
.set('link', '<http://www.w3.org/ns/ldp#BasicContainer>; rel="type"')
28+
.set('content-type', 'text/turtle')
29+
.end(function (error, res) {
30+
error ? reject(error) : resolve(res)
31+
})
32+
})
33+
}
34+
35+
/**
36+
* Creates a new turtle test resource via an LDP PUT
37+
* (located in `test/resources/{containerName}`)
38+
* @method createTestResource
39+
* @param resourceName {String} Resource name (should have a leading `/`)
40+
* @return {RSVP.Promise} Promise obj, for use with Mocha's `before()` etc
41+
*/
42+
function createTestResource (resourceName) {
43+
return new RSVP.Promise(function (resolve, reject) {
44+
server.put(resourceName)
45+
.set('content-type', 'text/turtle')
46+
.end(function (error, res) {
47+
error ? reject(error) : resolve(res)
48+
})
49+
})
50+
}
651

752
describe('HTTP APIs', function () {
853
var emptyResponse = function (res) {
@@ -35,15 +80,6 @@ describe('HTTP APIs', function () {
3580
return handler
3681
}
3782

38-
var ldpServer = ldnode({
39-
root: __dirname + '/resources'
40-
})
41-
42-
var suffixAcl = '.acl'
43-
var suffixMeta = '.meta'
44-
45-
var server = supertest(ldpServer)
46-
4783
describe('GET Root container', function () {
4884
it('should have Access-Control-Allow-Origin as the req.Origin', function (done) {
4985
server.get('/')
@@ -265,57 +301,63 @@ describe('HTTP APIs', function () {
265301
.set('content-type', 'text/turtle')
266302
.expect(hasHeader('describedBy', 'baz.ttl' + suffixMeta))
267303
.expect(hasHeader('acl', 'baz.ttl' + suffixAcl))
268-
.expect(function () {
269-
fs.unlinkSync(__dirname + '/resources/foo/bar/baz.ttl')
270-
fs.rmdirSync(__dirname + '/resources/foo/bar/')
271-
fs.rmdirSync(__dirname + '/resources/foo/')
272-
})
273304
.expect(201, done)
274305
})
275-
it('should return 409 code when trying to put to a container', function (done) {
276-
server.put('/')
277-
.expect(409, done)
306+
it('should return 409 code when trying to put to a container',
307+
function (done) {
308+
server.put('/')
309+
.expect(409, done)
310+
}
311+
)
312+
// Cleanup
313+
after(function () {
314+
rm('/foo/')
278315
})
279316
})
280317

281318
describe('DELETE API', function () {
319+
before(function () {
320+
// Ensure all these are finished before running tests
321+
return RSVP.all([
322+
rm('/false-file-48484848'),
323+
createTestContainer('delete-test-empty-container'),
324+
createTestResource('/put-resource-1.ttl'),
325+
createTestContainer('delete-test-non-empty'),
326+
createTestResource('/delete-test-non-empty/test.ttl')
327+
])
328+
})
329+
282330
it('should return 404 status when deleting a file that does not exists',
283331
function (done) {
284332
server.delete('/false-file-48484848')
285333
.expect(404, done)
286334
})
335+
287336
it('should delete previously PUT file', function (done) {
288337
server.delete('/put-resource-1.ttl')
289338
.expect(200, done)
290339
})
340+
291341
it('should fail to delete non-empty containers', function (done) {
292-
server.put('/fooo/bar.ttl')
293-
.set('content-type', 'text/turtle')
294-
.expect(function () {
295-
server.delete('/foo/')
296-
.expect(function () {
297-
fs.unlinkSync(__dirname + '/resources/foo/bar.ttl')
298-
fs.rmdirSync(__dirname + '/resources/foo/')
299-
})
300-
.expect(409)
301-
})
302-
.expect(201, done)
342+
server.delete('/delete-test-non-empty/')
343+
.expect(409, done)
303344
})
345+
304346
it('should delete a new and empty container', function (done) {
305-
server.post('/')
306-
.set('content-type', 'text/turtle')
307-
.set('slug', 'foo')
308-
.set('link', '<http://www.w3.org/ns/ldp#BasicContainer>; rel="type"')
309-
.set('content-type', 'text/turtle')
347+
server.delete('/delete-test-empty-container/')
310348
.expect(function () {
311-
server.delete('/foo/')
312-
.expect(function () {
313-
server.get('/foo/')
314-
.expect(404)
315-
})
316-
.expect(200)
349+
// Ensure container was deleted
350+
server.get('/delete-test-empty-container/')
351+
.expect(404)
317352
})
318-
.expect(201, done)
353+
.end(done)
354+
})
355+
356+
after(function () {
357+
// Clean up after DELETE API tests
358+
rm('/put-resource-1.ttl')
359+
rm('/delete-test-non-empty/')
360+
rm('/delete-test-empty-container/')
319361
})
320362
})
321363

0 commit comments

Comments
 (0)