diff --git a/lib/migration.js b/lib/migration.js index 9b1a222c..7d69c557 100644 --- a/lib/migration.js +++ b/lib/migration.js @@ -264,7 +264,7 @@ function mixinMigration(PostgreSQL) { var self = this; var modelDef = this.getModelDefinition(model); var prop = modelDef.properties[propName]; - if (prop.id && prop.generated) { + if (prop.generated) { return 'SERIAL'; } var result = self.columnDataType(model, propName); diff --git a/test/postgresql.test.js b/test/postgresql.test.js index 0abd70e3..6fc046ef 100644 --- a/test/postgresql.test.js +++ b/test/postgresql.test.js @@ -10,6 +10,7 @@ require('loopback-datasource-juggler/test/common.batch.js'); require('loopback-datasource-juggler/test/include.test.js'); require('./init'); +var async = require('async'); var should = require('should'); var Post, db, created; @@ -500,6 +501,67 @@ describe('postgresql connector', function() { }); }); +describe('Serial properties', function() { + var db; + + before(function() { + db = getSchema(); + }); + + it('should allow serial properties', function(done) { + var schema = + { + 'name': 'TestInventory', + 'options': { + 'idInjection': false, + 'postgresql': { + 'schema': 'public', 'table': 'inventorytest', + }, + }, + 'properties': { + 'productId': { + 'type': 'String', 'required': true, 'id': true, + }, + 'productCode': { + 'type': 'number', 'generated': true, + }, + }, + }; + var models = db.modelBuilder.buildModels(schema); + var Model = models['TestInventory']; + var count = 0; + Model.attachTo(db); + + db.automigrate(function(err, data) { + async.series([ + function(callback) { + Model.destroyAll(callback); + }, + function(callback) { + Model.create({productId: 'p001'}, callback); + }, + function(callback) { + Model.create({productId: 'p002'}, callback); + }, + function(callback) { + Model.findOne({where: {productId: 'p001'}}, function(err, r) { + r.should.have.property('productId'); + r.should.have.property('productCode', 1); + callback(null, r); + }); + }, + function(callback) { + Model.findOne({where: {productId: 'p002'}}, function(err, r) { + r.should.have.property('productId'); + r.should.have.property('productCode', 2); + callback(null, r); + }); + }, + ], done); + }); + }); +}); + // FIXME: The following test cases are to be reactivated for PostgreSQL /*