Fix generated string id's
Co-authored-by: Miroslav Bajtoš <mbajtoss@gmail.com>
This commit is contained in:
parent
b07bdfc71a
commit
b9f0284a28
|
@ -719,7 +719,7 @@ DataSource.prototype.setupDataAccess = function(modelClass, settings) {
|
||||||
// Check if the id property should be generated
|
// Check if the id property should be generated
|
||||||
const idName = modelClass.definition.idName();
|
const idName = modelClass.definition.idName();
|
||||||
const idProp = modelClass.definition.rawProperties[idName];
|
const idProp = modelClass.definition.rawProperties[idName];
|
||||||
if (idProp && idProp.generated && this.connector.getDefaultIdType) {
|
if (idProp && idProp.generated && idProp.useDefaultIdType !== false && this.connector.getDefaultIdType) {
|
||||||
// Set the default id type from connector's ability
|
// Set the default id type from connector's ability
|
||||||
const idType = this.connector.getDefaultIdType() || String;
|
const idType = this.connector.getDefaultIdType() || String;
|
||||||
idProp.type = idType;
|
idProp.type = idType;
|
||||||
|
|
|
@ -648,6 +648,16 @@ describe('DataSource define model', function() {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('injects id with useDefaultIdType to false', function(done) {
|
||||||
|
const ds = new ModelBuilder();
|
||||||
|
|
||||||
|
const User = ds.define('User', {id: {type: String, generated: true, id: true, useDefaultIdType: false}});
|
||||||
|
assert.deepEqual(User.definition.properties.id,
|
||||||
|
{type: String, id: true, generated: true, updateOnly: true, useDefaultIdType: false});
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
it('disables idInjection if the value is false', function(done) {
|
it('disables idInjection if the value is false', function(done) {
|
||||||
const ds = new ModelBuilder();
|
const ds = new ModelBuilder();
|
||||||
|
|
||||||
|
|
|
@ -2662,6 +2662,41 @@ describe('manipulation', function() {
|
||||||
null, // databases representing `undefined` as `null` (e.g. SQL)
|
null, // databases representing `undefined` as `null` (e.g. SQL)
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('preserves custom type of auto-generated id property', async () => {
|
||||||
|
// NOTE: This test is trying to reproduce the behavior observed
|
||||||
|
// when using property defined as follows:
|
||||||
|
// {type: 'string', generated: true, mongodb: {dataType: 'ObjectID'}}
|
||||||
|
// We want to test that behavior for all connectors, which is tricky,
|
||||||
|
// because not all connectors support autogenerated string PK values.
|
||||||
|
|
||||||
|
const User = db.define('UserWithStringId', {
|
||||||
|
id: {
|
||||||
|
type: String,
|
||||||
|
id: true,
|
||||||
|
useDefaultIdType: false,
|
||||||
|
// `useDefaultIdType` is applied only when `generated: true`
|
||||||
|
generated: true,
|
||||||
|
},
|
||||||
|
name: String,
|
||||||
|
}, {forceId: false});
|
||||||
|
|
||||||
|
// disable `generated: true` because many SQL databases cannot
|
||||||
|
// auto-generate string ids
|
||||||
|
User.definition.properties.id.generated = false;
|
||||||
|
User.definition.rawProperties.id.generated = false;
|
||||||
|
await db.automigrate(User.modelName);
|
||||||
|
|
||||||
|
const userId = 'custom user id';
|
||||||
|
|
||||||
|
const createdUser = await User.create({id: userId, name: 'testUser'});
|
||||||
|
// strict equality check
|
||||||
|
createdUser.id.should.equal(userId);
|
||||||
|
|
||||||
|
const foundUser = await User.findById(userId);
|
||||||
|
// strict equality check
|
||||||
|
foundUser.id.should.equal(userId);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue