@@ -649,4 +649,159 @@ describe_only_db('mongo')('MongoStorageAdapter', () => {
649649 } ) ;
650650 } ) ;
651651 }
652+
653+ describe ( 'index creation options' , ( ) => {
654+ beforeEach ( async ( ) => {
655+ await new MongoStorageAdapter ( { uri : databaseURI } ) . deleteAllClasses ( ) ;
656+ } ) ;
657+
658+ async function getIndexes ( collectionName ) {
659+ const adapter = Config . get ( Parse . applicationId ) . database . adapter ;
660+ const collections = await adapter . database . listCollections ( { name : collectionName } ) . toArray ( ) ;
661+ if ( collections . length === 0 ) {
662+ return [ ] ;
663+ }
664+ return await adapter . database . collection ( collectionName ) . indexes ( ) ;
665+ }
666+
667+ it ( 'should skip username index when createIndexUsername is false' , async ( ) => {
668+ await reconfigureServer ( {
669+ databaseAdapter : undefined ,
670+ databaseURI,
671+ databaseOptions : { createIndexUsername : false } ,
672+ } ) ;
673+ const indexes = await getIndexes ( '_User' ) ;
674+ expect ( indexes . find ( idx => idx . name === 'username_1' ) ) . toBeUndefined ( ) ;
675+ } ) ;
676+
677+ it ( 'should create username index when createIndexUsername is true' , async ( ) => {
678+ await reconfigureServer ( {
679+ databaseAdapter : undefined ,
680+ databaseURI,
681+ databaseOptions : { createIndexUsername : true } ,
682+ } ) ;
683+ const indexes = await getIndexes ( '_User' ) ;
684+ expect ( indexes . find ( idx => idx . name === 'username_1' ) ) . toBeDefined ( ) ;
685+ } ) ;
686+
687+ it ( 'should skip case-insensitive username index when createIndexUsernameCaseInsensitive is false' , async ( ) => {
688+ await reconfigureServer ( {
689+ databaseAdapter : undefined ,
690+ databaseURI,
691+ databaseOptions : { createIndexUsernameCaseInsensitive : false } ,
692+ } ) ;
693+ const indexes = await getIndexes ( '_User' ) ;
694+ expect ( indexes . find ( idx => idx . name === 'case_insensitive_username' ) ) . toBeUndefined ( ) ;
695+ } ) ;
696+
697+ it ( 'should create case-insensitive username index when createIndexUsernameCaseInsensitive is true' , async ( ) => {
698+ await reconfigureServer ( {
699+ databaseAdapter : undefined ,
700+ databaseURI,
701+ databaseOptions : { createIndexUsernameCaseInsensitive : true } ,
702+ } ) ;
703+ const indexes = await getIndexes ( '_User' ) ;
704+ expect ( indexes . find ( idx => idx . name === 'case_insensitive_username' ) ) . toBeDefined ( ) ;
705+ } ) ;
706+
707+ it ( 'should skip email index when createIndexEmail is false' , async ( ) => {
708+ await reconfigureServer ( {
709+ databaseAdapter : undefined ,
710+ databaseURI,
711+ databaseOptions : { createIndexEmail : false } ,
712+ } ) ;
713+ const indexes = await getIndexes ( '_User' ) ;
714+ expect ( indexes . find ( idx => idx . name === 'email_1' ) ) . toBeUndefined ( ) ;
715+ } ) ;
716+
717+ it ( 'should create email index when createIndexEmail is true' , async ( ) => {
718+ await reconfigureServer ( {
719+ databaseAdapter : undefined ,
720+ databaseURI,
721+ databaseOptions : { createIndexEmail : true } ,
722+ } ) ;
723+ const indexes = await getIndexes ( '_User' ) ;
724+ expect ( indexes . find ( idx => idx . name === 'email_1' ) ) . toBeDefined ( ) ;
725+ } ) ;
726+
727+ it ( 'should skip case-insensitive email index when createIndexEmailCaseInsensitive is false' , async ( ) => {
728+ await reconfigureServer ( {
729+ databaseAdapter : undefined ,
730+ databaseURI,
731+ databaseOptions : { createIndexEmailCaseInsensitive : false } ,
732+ } ) ;
733+ const indexes = await getIndexes ( '_User' ) ;
734+ expect ( indexes . find ( idx => idx . name === 'case_insensitive_email' ) ) . toBeUndefined ( ) ;
735+ } ) ;
736+
737+ it ( 'should create case-insensitive email index when createIndexEmailCaseInsensitive is true' , async ( ) => {
738+ await reconfigureServer ( {
739+ databaseAdapter : undefined ,
740+ databaseURI,
741+ databaseOptions : { createIndexEmailCaseInsensitive : true } ,
742+ } ) ;
743+ const indexes = await getIndexes ( '_User' ) ;
744+ expect ( indexes . find ( idx => idx . name === 'case_insensitive_email' ) ) . toBeDefined ( ) ;
745+ } ) ;
746+
747+ it ( 'should skip email verify token index when createIndexEmailVerifyToken is false' , async ( ) => {
748+ await reconfigureServer ( {
749+ databaseAdapter : undefined ,
750+ databaseURI,
751+ databaseOptions : { createIndexEmailVerifyToken : false } ,
752+ } ) ;
753+ const indexes = await getIndexes ( '_User' ) ;
754+ expect ( indexes . find ( idx => idx . name === '_email_verify_token' || idx . name === '_email_verify_token_1' ) ) . toBeUndefined ( ) ;
755+ } ) ;
756+
757+ it ( 'should create email verify token index when createIndexEmailVerifyToken is true' , async ( ) => {
758+ await reconfigureServer ( {
759+ databaseAdapter : undefined ,
760+ databaseURI,
761+ databaseOptions : { createIndexEmailVerifyToken : true } ,
762+ } ) ;
763+ const indexes = await getIndexes ( '_User' ) ;
764+ expect ( indexes . find ( idx => idx . name === '_email_verify_token' || idx . name === '_email_verify_token_1' ) ) . toBeDefined ( ) ;
765+ } ) ;
766+
767+ it ( 'should skip password reset token index when createIndexPasswordResetToken is false' , async ( ) => {
768+ await reconfigureServer ( {
769+ databaseAdapter : undefined ,
770+ databaseURI,
771+ databaseOptions : { createIndexPasswordResetToken : false } ,
772+ } ) ;
773+ const indexes = await getIndexes ( '_User' ) ;
774+ expect ( indexes . find ( idx => idx . name === '_perishable_token' || idx . name === '_perishable_token_1' ) ) . toBeUndefined ( ) ;
775+ } ) ;
776+
777+ it ( 'should create password reset token index when createIndexPasswordResetToken is true' , async ( ) => {
778+ await reconfigureServer ( {
779+ databaseAdapter : undefined ,
780+ databaseURI,
781+ databaseOptions : { createIndexPasswordResetToken : true } ,
782+ } ) ;
783+ const indexes = await getIndexes ( '_User' ) ;
784+ expect ( indexes . find ( idx => idx . name === '_perishable_token' || idx . name === '_perishable_token_1' ) ) . toBeDefined ( ) ;
785+ } ) ;
786+
787+ it ( 'should skip role name index when createIndexRoleName is false' , async ( ) => {
788+ await reconfigureServer ( {
789+ databaseAdapter : undefined ,
790+ databaseURI,
791+ databaseOptions : { createIndexRoleName : false } ,
792+ } ) ;
793+ const indexes = await getIndexes ( '_Role' ) ;
794+ expect ( indexes . find ( idx => idx . name === 'name_1' ) ) . toBeUndefined ( ) ;
795+ } ) ;
796+
797+ it ( 'should create role name index when createIndexRoleName is true' , async ( ) => {
798+ await reconfigureServer ( {
799+ databaseAdapter : undefined ,
800+ databaseURI,
801+ databaseOptions : { createIndexRoleName : true } ,
802+ } ) ;
803+ const indexes = await getIndexes ( '_Role' ) ;
804+ expect ( indexes . find ( idx => idx . name === 'name_1' ) ) . toBeDefined ( ) ;
805+ } ) ;
806+ } ) ;
652807} ) ;
0 commit comments