Skip to content

Commit

Permalink
Merge pull request #13018 from lpizzinidev/gh-12991
Browse files Browse the repository at this point in the history
fix(schematype): fixed validation for required UUID field
  • Loading branch information
vkarpov15 committed Feb 28, 2023
2 parents 4fa8b1c + 38795bf commit a006210
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 1 deletion.
5 changes: 4 additions & 1 deletion lib/schema/uuid.js
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,10 @@ SchemaUUID.checkRequired = SchemaType.checkRequired;
*/

SchemaUUID.prototype.checkRequired = function checkRequired(value) {
return UUID_FORMAT.test(value);
if (Buffer.isBuffer(value)) {
value = binaryToString(value);
}
return value != null && UUID_FORMAT.test(value);
};

/**
Expand Down
63 changes: 63 additions & 0 deletions test/schema.validation.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const start = require('./common');
const Promise = require('bluebird');
const assert = require('assert');
const random = require('./util').random;
const { v4: uuidv4 } = require('uuid');

const mongoose = start.mongoose;
const Schema = mongoose.Schema;
Expand Down Expand Up @@ -1473,5 +1474,67 @@ describe('schema', function() {
assert.ifError(err);
});
});

it('should validate required UUID fields correctly (gh-12991)', function() {
const uuidSchema = new mongoose.Schema({
_id: { type: mongoose.Schema.Types.UUID, required: true },
name: { type: mongoose.Schema.Types.String, required: true }
});

const uuidRefSchema = new mongoose.Schema({
_id: { type: mongoose.Schema.Types.UUID, required: true },
uuidRef: { type: mongoose.Schema.Types.UUID, ref: 'UUIDModel', required: true },
uuidNonRef: { type: mongoose.Schema.Types.UUID, required: true },
uuidRefNonRequired: { type: mongoose.Schema.Types.UUID, ref: 'UUIDModel' },
name: { type: mongoose.Schema.Types.String, required: true }
});

const UUIDModel = mongoose.model('UUIDModel', uuidSchema, 'uuids');

const UUIDRefModel = mongoose.model('UUIDRefModel', uuidRefSchema, 'uuidRefs');

const uuid = new UUIDModel({ _id: uuidv4(), name: 'uuidName' });
assert.ifError(uuid.validateSync());

const uuidRef = new UUIDRefModel({
_id: uuidv4(),
uuidRef: uuidv4(),
uuidNonRef: uuidv4(),
uuidRefNonRequired: uuidv4(),
name: 'uuidRefName'
});
assert.ifError(uuidRef.validateSync());

const uuidRef2 = new UUIDRefModel({
_id: uuidv4(),
uuidNonRef: uuidv4(),
uuidRefNonRequired: uuidv4(),
name: 'uuidRefName'
});

const err2 = uuidRef2.validateSync();
assert.ok(err2);
assert.ok(err2.errors['uuidRef']);

const uuidRef3 = new UUIDRefModel({
_id: uuidv4(),
uuidRef: uuidv4(),
uuidRefNonRequired: uuidv4(),
name: 'uuidRefName'
});

const err3 = uuidRef3.validateSync();
assert.ok(err3);
assert.ok(err3.errors['uuidNonRef']);

const uuidRef4 = new UUIDRefModel({
_id: uuidv4(),
uuidRef: uuidv4(),
uuidNonRef: uuidv4(),
name: 'uuidRefName'
});

assert.ifError(uuidRef4.validateSync());
});
});
});

0 comments on commit a006210

Please sign in to comment.