diff --git a/package.json b/package.json index 64b64f4..5b4d3ba 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "lowdb": "^0.5.1", "method-override": "^2.1.2", "morgan": "^1.3.1", + "node-uuid": "^1.4.2", "serve-static": "^1.6.1", "superagent": "^0.15.7", "underscore": "^1.5.2", diff --git a/src/utils.js b/src/utils.js index afd41e1..ed4807f 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,4 +1,5 @@ var _ = require('underscore') +var uuid = require('node-uuid') var _inflections = require('underscore.inflections') _.mixin(_inflections) @@ -19,14 +20,22 @@ function toNative(value) { return value } -// Creates incremental id. +// Return incremented id or uuid function createId(coll) { if (_.isEmpty(coll)) { return 1 } else { - return _.max(coll, function(doc) { + var id = _.max(coll, function(doc) { return doc.id - }).id + 1 + }).id + + if (_.isFinite(id)) { + // Increment integer id + return ++id + } else { + // Generate string id + return uuid() + } } } diff --git a/test/index.js b/test/index.js index 910e32e..b56f145 100644 --- a/test/index.js +++ b/test/index.js @@ -29,6 +29,10 @@ describe('Server', function() { {id: 5, published: false, postId: 2}, ] + db.refs = [ + {id: 'abcd-1234', url: 'http://example.com', postId: 1} + ] + server = jsonServer(db) }) @@ -166,19 +170,34 @@ describe('Server', function() { describe('POST /:resource', function() { - it('should respond with json and create a resource', function(done) { - request(server) - .post('/posts') - .send({body: 'foo', booleanValue: 'true', integerValue: '1'}) - .expect('Content-Type', /json/) - .expect({id: 3, body: 'foo', booleanValue: true, integerValue: 1}) - .expect(200) - .end(function(err, res){ - if (err) return done(err) - assert.equal(db.posts.length, 3) - done() - }) - }) + it('should respond with json, create a resource and increment id', + function(done) { + request(server) + .post('/posts') + .send({body: 'foo', booleanValue: 'true', integerValue: '1'}) + .expect('Content-Type', /json/) + .expect({id: 3, body: 'foo', booleanValue: true, integerValue: 1}) + .expect(200) + .end(function(err, res){ + if (err) return done(err) + assert.equal(db.posts.length, 3) + done() + }) + }) + + it('should respond with json, create a resource and generate string id', + function(done) { + request(server) + .post('/refs') + .send({url: 'http://foo.com', postId: '1'}) + .expect('Content-Type', /json/) + .expect(200) + .end(function(err, res){ + if (err) return done(err) + assert.equal(db.refs.length, 2) + done() + }) + }) }) describe('PUT /:resource/:id', function() { diff --git a/test/utils.js b/test/utils.js index 4aaa3f5..5a4ed97 100644 --- a/test/utils.js +++ b/test/utils.js @@ -24,7 +24,7 @@ describe('utils', function() { { name: 'comments', id: 3 } ] - assert.deepEqual(expected, utils.getRemovable(db)) + assert.deepEqual(utils.getRemovable(db), expected) }) })