@@ -380,8 +380,11 @@ public virtual inherited sharing class SOQL implements Queryable {
380380
381381 @TestVisible
382382 private static Mockable mock (String mockId ) {
383- queryIdToMock .put (mockId , new SoqlMock ());
384- return queryIdToMock .get (mockId );
383+ if (! SOQL .queryIdToMock .containsKey (mockId )) {
384+ SOQL .queryIdToMock .put (mockId , new List <SoqlMock >());
385+ }
386+ SOQL .queryIdToMock .get (mockId ).add (new SoqlMock ());
387+ return SOQL .queryIdToMock .get (mockId ).get (SOQL .queryIdToMock .get (mockId ).size () - 1 );
385388 }
386389
387390 @TestVisible
@@ -402,25 +405,25 @@ public virtual inherited sharing class SOQL implements Queryable {
402405
403406 @TestVisible // deprecated
404407 private static void setMock (String mockId , SObject record ) {
405- queryIdToMock .put (mockId , new SoqlMock ().useLegacyMockingBehavior ());
406- queryIdToMock .get (mockId ).thenReturn (record );
408+ SOQL . queryIdToMock .put (mockId , new List < SoqlMock >{ new SoqlMock ().useLegacyMockingBehavior () } );
409+ SOQL . queryIdToMock .get (mockId ). get ( SOQL . queryIdToMock . get ( mockId ). size () - 1 ).thenReturn (record );
407410 }
408411
409412 @TestVisible // deprecated
410413 private static void setMock (String mockId , List <SObject > records ) {
411- queryIdToMock .put (mockId , new SoqlMock ().useLegacyMockingBehavior ());
412- queryIdToMock .get (mockId ).thenReturn (records );
414+ SOQL . queryIdToMock .put (mockId , new List < SoqlMock >{ new SoqlMock ().useLegacyMockingBehavior () } );
415+ SOQL . queryIdToMock .get (mockId ). get ( SOQL . queryIdToMock . get ( mockId ). size () - 1 ).thenReturn (records );
413416 }
414417
415418 @TestVisible // deprecated
416419 private static void setCountMock (String mockId , Integer amount ) {
417- queryIdToMock .put (mockId , new SoqlMock ().useLegacyMockingBehavior ());
418- queryIdToMock .get (mockId ).thenReturn (amount );
420+ SOQL . queryIdToMock .put (mockId , new List < SoqlMock >{ new SoqlMock ().useLegacyMockingBehavior () } );
421+ SOQL . queryIdToMock .get (mockId ). get ( SOQL . queryIdToMock . get ( mockId ). size () - 1 ).thenReturn (amount );
419422 }
420423
421424 // Implementation
422425
423- private static Map <String , SoqlMock > queryIdToMock = new Map <String , SoqlMock >();
426+ private static Map <String , List < SoqlMock >> queryIdToMock = new Map <String , List < SoqlMock > >();
424427
425428 private static Binder binder = new Binder ();
426429 private static Integer syncQueriesIssued = 0 ;
@@ -896,7 +899,7 @@ public virtual inherited sharing class SOQL implements Queryable {
896899 }
897900
898901 public Queryable mockId (String queryIdentifier ) {
899- this .executor .mock (queryIdToMock .get (queryIdentifier ));
902+ this .executor .mock (SOQL . queryIdToMock .get (queryIdentifier ));
900903 return this ;
901904 }
902905
@@ -2505,7 +2508,7 @@ public virtual inherited sharing class SOQL implements Queryable {
25052508 private AccessLevel accessMode ;
25062509 private AccessType accessType ;
25072510 private SoqlBuilder builder ;
2508- private SoqlMock mock ;
2511+ private List < SoqlMock > mocks = new List < SoqlMock >() ;
25092512
25102513 public Executor (SoqlBuilder builder ) {
25112514 this .builder = builder ;
@@ -2529,8 +2532,8 @@ public virtual inherited sharing class SOQL implements Queryable {
25292532 this .accessMode = accessMode ;
25302533 }
25312534
2532- public void mock (SoqlMock mock ) {
2533- this .mock = mock ;
2535+ public void mock (List < SoqlMock > mocks ) {
2536+ this .mocks = mocks ;
25342537 }
25352538
25362539 public SObject toObject () {
@@ -2550,8 +2553,8 @@ public virtual inherited sharing class SOQL implements Queryable {
25502553 public List <SObject > toList () {
25512554 this .incrementQueryIssued ();
25522555
2553- if (this .mock != null ) {
2554- return this .mock . sObjectMock . get ( this . builder . fields , this . builder . subQueries );
2556+ if (! this .mocks . isEmpty () ) {
2557+ return this .getMockedListProxy ( );
25552558 }
25562559
25572560 if (this .accessType == null ) {
@@ -2564,26 +2567,47 @@ public virtual inherited sharing class SOQL implements Queryable {
25642567 ).getRecords ();
25652568 }
25662569
2570+ private List <SObject > getMockedListProxy () {
2571+ if (this .mocks .size () == 1 ) {
2572+ return this .mocks [0 ].sObjectMock .get (this .builder .fields , this .builder .subQueries );
2573+ }
2574+ return this .mocks .remove (0 ).sObjectMock .get (this .builder .fields , this .builder .subQueries );
2575+ }
2576+
25672577 public List <AggregateResultProxy > toAggregatedProxy () {
25682578 this .incrementQueryIssued ();
25692579
2570- if (this .mock != null ) {
2571- return this .mock . aggregateResultMock . get ();
2580+ if (! this .mocks . isEmpty () ) {
2581+ return this .getMockedAggregateProxy ();
25722582 }
25732583
25742584 return new AggregateResultProxys ().add ((List <AggregateResult >) this .toList ()).get ();
25752585 }
25762586
2587+ private List <AggregateResultProxy > getMockedAggregateProxy () {
2588+ if (this .mocks .size () == 1 ) {
2589+ return this .mocks [0 ].aggregateResultMock .get ();
2590+ }
2591+ return this .mocks .remove (0 ).aggregateResultMock .get ();
2592+ }
2593+
25772594 public Integer toInteger () {
25782595 this .incrementQueryIssued ();
25792596
2580- if (this .mock != null ) {
2581- return this .mock . countMock . get ();
2597+ if (! this .mocks . isEmpty () ) {
2598+ return this .getMockedCount ();
25822599 }
25832600
25842601 return this .sharingExecutor .toInteger (this .builder .toString (), binder .getBindingMap (), this .accessMode );
25852602 }
25862603
2604+ private Integer getMockedCount () {
2605+ if (this .mocks .size () == 1 ) {
2606+ return this .mocks [0 ].countMock .get ();
2607+ }
2608+ return this .mocks .remove (0 ).countMock .get ();
2609+ }
2610+
25872611 public Database.QueryLocator toQueryLocator () {
25882612 this .incrementQueryIssued ();
25892613 return this .sharingExecutor .toQueryLocator (this .builder .toString (), binder .getBindingMap (), this .accessMode );
0 commit comments