@@ -523,4 +523,35 @@ describe('DefinedSchemas', () => {
523523 expect ( calls [ 1 ] . args [ 0 ] ) . toEqual ( 2000 ) ;
524524 expect ( calls [ 2 ] . args [ 0 ] ) . toEqual ( 3000 ) ;
525525 } ) ;
526+ it ( 'should perform migration in parallel without failing' , async ( ) => {
527+ const server = await reconfigureServer ( ) ;
528+ const logger = require ( '../lib/logger' ) . logger ;
529+ spyOn ( logger , 'error' ) . and . callThrough ( ) ;
530+ const schema = {
531+ className : 'Test' ,
532+ fields : { aField : { type : 'String' } } ,
533+ indexes : { aField : { aField : 1 } } ,
534+ classLevelPermissions : {
535+ create : { requiresAuthentication : true } ,
536+ } ,
537+ } ;
538+
539+ // Simulate parallel deployment
540+ await Promise . all ( [
541+ new DefinedSchemas ( [ schema ] , server . config ) . execute ( ) ,
542+ new DefinedSchemas ( [ schema ] , server . config ) . execute ( ) ,
543+ new DefinedSchemas ( [ schema ] , server . config ) . execute ( ) ,
544+ new DefinedSchemas ( [ schema ] , server . config ) . execute ( ) ,
545+ new DefinedSchemas ( [ schema ] , server . config ) . execute ( ) ,
546+ ] ) ;
547+
548+ const testSchema = ( await Parse . Schema . all ( ) ) . find (
549+ ( { className } ) => className === schema . className
550+ ) ;
551+
552+ expect ( testSchema . indexes . aField ) . toEqual ( { aField : 1 } ) ;
553+ expect ( testSchema . fields . aField ) . toEqual ( { type : 'String' } ) ;
554+ expect ( testSchema . classLevelPermissions . create ) . toEqual ( { requiresAuthentication : true } ) ;
555+ expect ( logger . error ) . toHaveBeenCalledTimes ( 0 ) ;
556+ } ) ;
526557} ) ;
0 commit comments