Skip to content

Commit de6599c

Browse files
committed
fix: defined schema protected indexes
1 parent 3351ca7 commit de6599c

File tree

2 files changed

+51
-9
lines changed

2 files changed

+51
-9
lines changed

spec/DefinedSchemas.spec.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,40 @@ describe('DefinedSchemas', () => {
432432
expect(testSchema.indexes).toBeUndefined();
433433
expect(userSchema.indexes).toEqual(expectedIndexes);
434434
});
435+
436+
it('should detect protected indexes for _User class', () => {
437+
const definedSchema = new DefinedSchemas({}, {});
438+
const protectedUserIndexes = ['_id_', 'case_insensitive_email', 'username_1', 'email_1'];
439+
protectedUserIndexes.forEach(field => {
440+
expect(definedSchema.isProtectedIndex('_User', field)).toEqual(true);
441+
});
442+
expect(definedSchema.isProtectedIndex('_User', 'test')).toEqual(false);
443+
});
444+
it('should detect protected indexes for _Role class', () => {
445+
const definedSchema = new DefinedSchemas({}, {});
446+
expect(definedSchema.isProtectedIndex('_Role', 'name_1')).toEqual(true);
447+
expect(definedSchema.isProtectedIndex('_Role', 'test')).toEqual(false);
448+
});
449+
it('should detect protected indexes for _Idempotency class', () => {
450+
const definedSchema = new DefinedSchemas({}, {});
451+
expect(definedSchema.isProtectedIndex('_Idempotency', 'reqId_1')).toEqual(true);
452+
expect(definedSchema.isProtectedIndex('_Idempotency', 'test')).toEqual(false);
453+
});
454+
455+
it('should not detect protected indexes on user defined class', () => {
456+
const definedSchema = new DefinedSchemas({}, {});
457+
const protectedIndexes = [
458+
'case_insensitive_email',
459+
'username_1',
460+
'email_1',
461+
'reqId_1',
462+
'name_1',
463+
];
464+
protectedIndexes.forEach(field => {
465+
expect(definedSchema.isProtectedIndex('ExampleClass', field)).toEqual(false);
466+
});
467+
expect(definedSchema.isProtectedIndex('ExampleClass', '_id_')).toEqual(true);
468+
});
435469
});
436470

437471
describe('ClassLevelPermissions', () => {

src/SchemaMigrations/DefinedSchemas.js

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -399,15 +399,23 @@ export class DefinedSchemas {
399399
}
400400

401401
isProtectedIndex(className: string, indexName: string) {
402-
let indexes = ['_id_'];
403-
if (className === '_User') {
404-
indexes = [
405-
...indexes,
406-
'case_insensitive_username',
407-
'case_insensitive_email',
408-
'username_1',
409-
'email_1',
410-
];
402+
const indexes = ['_id_'];
403+
switch (className) {
404+
case '_User':
405+
indexes.push(
406+
'case_insensitive_username',
407+
'case_insensitive_email',
408+
'username_1',
409+
'email_1'
410+
);
411+
break;
412+
case '_Role':
413+
indexes.push('name_1');
414+
break;
415+
416+
case '_Idempotency':
417+
indexes.push('reqId_1');
418+
break;
411419
}
412420

413421
return indexes.indexOf(indexName) !== -1;

0 commit comments

Comments
 (0)