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
|
||||
const idName = modelClass.definition.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
|
||||
const idType = this.connector.getDefaultIdType() || String;
|
||||
idProp.type = idType;
|
||||
|
|
|
@ -648,6 +648,16 @@ describe('DataSource define model', function() {
|
|||
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) {
|
||||
const ds = new ModelBuilder();
|
||||
|
||||
|
|
|
@ -2662,6 +2662,41 @@ describe('manipulation', function() {
|
|||
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