@@ -34,7 +34,7 @@ private with sharing class fflib_SObjectSelectorTest
34
34
35
35
static testMethod void testGetSObjectName ()
36
36
{
37
- Testfflib_SObjectSelector selector = new Testfflib_SObjectSelector ();
37
+ AccountSelector selector = new AccountSelector ();
38
38
system .assertEquals (null , selector .getSObjectFieldSetList ());
39
39
system .assertEquals (' Account' ,selector .getSObjectName ());
40
40
}
@@ -51,7 +51,7 @@ private with sharing class fflib_SObjectSelectorTest
51
51
idSet .add (item .Id );
52
52
53
53
Test .startTest ();
54
- Testfflib_SObjectSelector selector = new Testfflib_SObjectSelector ();
54
+ AccountSelector selector = new AccountSelector ();
55
55
List <Account > result = (List <Account >) selector .selectSObjectsById (idSet );
56
56
Test .stopTest ();
57
57
@@ -76,7 +76,7 @@ private with sharing class fflib_SObjectSelectorTest
76
76
idSet .add (item .Id );
77
77
78
78
Test .startTest ();
79
- Testfflib_SObjectSelector selector = new Testfflib_SObjectSelector ();
79
+ AccountSelector selector = new AccountSelector ();
80
80
Database .QueryLocator result = selector .queryLocatorById (idSet );
81
81
System .Iterator < SObject > iteratorResult = result .iterator ();
82
82
Test .stopTest ();
@@ -110,7 +110,7 @@ private with sharing class fflib_SObjectSelectorTest
110
110
return ; // Abort the test if unable to create a user with low enough acess
111
111
System .runAs (testUser )
112
112
{
113
- Testfflib_SObjectSelector selector = new Testfflib_SObjectSelector ();
113
+ AccountSelector selector = new AccountSelector ();
114
114
try
115
115
{
116
116
List <Account > result = (List <Account >) selector .selectSObjectsById (idSet );
@@ -139,7 +139,7 @@ private with sharing class fflib_SObjectSelectorTest
139
139
return ; // Abort the test if unable to create a user with low enough acess
140
140
System .runAs (testUser )
141
141
{
142
- Testfflib_SObjectSelector selector = new Testfflib_SObjectSelector (false , false , false , true );
142
+ AccountSelector selector = new AccountSelector (false , false , false , true );
143
143
try
144
144
{
145
145
List <Account > result = (List <Account >) selector .selectSObjectsById (idSet );
@@ -153,7 +153,7 @@ private with sharing class fflib_SObjectSelectorTest
153
153
154
154
static testMethod void testSOQL ()
155
155
{
156
- Testfflib_SObjectSelector selector = new Testfflib_SObjectSelector ();
156
+ AccountSelector selector = new AccountSelector ();
157
157
String soql = selector .newQueryFactory ().toSOQL ();
158
158
Pattern p = Pattern .compile (' SELECT (.*) FROM Account ORDER BY AccountNumber DESC NULLS FIRST , AnnualRevenue ASC NULLS LAST ' );
159
159
Matcher m = p .matcher (soql );
@@ -165,7 +165,7 @@ private with sharing class fflib_SObjectSelectorTest
165
165
166
166
static testMethod void testSOQL_defaultSorting ()
167
167
{
168
- Testfflib_SObjectSelectorDefaultSorting selector = new Testfflib_SObjectSelectorDefaultSorting (false );
168
+ DefaultSortingAccountSelector selector = new DefaultSortingAccountSelector (false );
169
169
String soql = selector .newQueryFactory ().toSOQL ();
170
170
Pattern p = Pattern .compile (String .format (' SELECT (.*) FROM Account ORDER BY {0} ASC NULLS FIRST ' ,
171
171
new List <String >{selector .getOrderBy ()}));
@@ -178,7 +178,7 @@ private with sharing class fflib_SObjectSelectorTest
178
178
179
179
static testMethod void testDefaultConfig ()
180
180
{
181
- Testfflib_SObjectSelector selector = new Testfflib_SObjectSelector ();
181
+ AccountSelector selector = new AccountSelector ();
182
182
System .assertEquals (false , selector .isEnforcingFLS ());
183
183
System .assertEquals (true , selector .isEnforcingCRUD ());
184
184
System .assertEquals (false , selector .isIncludeFieldSetFields ());
@@ -213,7 +213,7 @@ private with sharing class fflib_SObjectSelectorTest
213
213
static void testWithoutSorting ()
214
214
{
215
215
// Given
216
- Testfflib_SObjectSelector selector = new Testfflib_SObjectSelector (false , false , false , false );
216
+ AccountSelector selector = new AccountSelector (false , false , false , false );
217
217
fflib_QueryFactory qf = selector .newQueryFactory ();
218
218
219
219
Set <String > expectedSelectFields = new Set <String >{ ' Name' , ' Id' , ' AccountNumber' , ' AnnualRevenue' };
@@ -239,7 +239,7 @@ private with sharing class fflib_SObjectSelectorTest
239
239
static void testWithOrderingNullsLast ()
240
240
{
241
241
// Build the selector to test with
242
- Testfflib_SObjectSelector selector = new Testfflib_SObjectSelector (false , false , false , false );
242
+ AccountSelector selector = new AccountSelector (false , false , false , false );
243
243
fflib_QueryFactory qf = selector .newQueryFactory ();
244
244
245
245
// Add in the expected fields
@@ -466,14 +466,14 @@ private with sharing class fflib_SObjectSelectorTest
466
466
}
467
467
468
468
469
- private class Testfflib_SObjectSelector extends fflib_SObjectSelector
469
+ private class AccountSelector extends fflib_SObjectSelector
470
470
{
471
- public Testfflib_SObjectSelector ()
471
+ public AccountSelector ()
472
472
{
473
473
super ();
474
474
}
475
475
476
- public Testfflib_SObjectSelector (Boolean includeFieldSetFields , Boolean enforceCRUD , Boolean enforceFLS , Boolean sortSelectFields )
476
+ public AccountSelector (Boolean includeFieldSetFields , Boolean enforceCRUD , Boolean enforceFLS , Boolean sortSelectFields )
477
477
{
478
478
super (includeFieldSetFields , enforceCRUD , enforceFLS , sortSelectFields );
479
479
}
@@ -498,7 +498,7 @@ private with sharing class fflib_SObjectSelectorTest
498
498
return ' AccountNumber DESC, AnnualRevenue ASC NULLS LAST' ;
499
499
}
500
500
}
501
-
501
+
502
502
private class Testfflib_UserSObjectSelector extends fflib_SObjectSelector
503
503
{
504
504
public Testfflib_UserSObjectSelector ()
@@ -523,9 +523,9 @@ private with sharing class fflib_SObjectSelectorTest
523
523
524
524
}
525
525
526
- private class Testfflib_SObjectSelectorDefaultSorting extends fflib_SObjectSelector
526
+ private class DefaultSortingAccountSelector extends fflib_SObjectSelector
527
527
{
528
- public Testfflib_SObjectSelectorDefaultSorting (Boolean includeFieldSetFields )
528
+ public DefaultSortingAccountSelector (Boolean includeFieldSetFields )
529
529
{
530
530
super (includeFieldSetFields );
531
531
}
@@ -629,6 +629,56 @@ private with sharing class fflib_SObjectSelectorTest
629
629
}
630
630
}
631
631
632
+ private class ContractSelector extends fflib_SObjectSelector {
633
+ public ContractSelector (){
634
+ super (false ,DataAccess .SYSTEM_MODE );
635
+ }
636
+
637
+ public Schema.SObjectType getSObjectType (){
638
+ return Contract .SObjectType ;
639
+ }
640
+
641
+ public List <Schema .SObjectField > getSObjectFieldList (){
642
+ return new List <Schema .SObjectField > {
643
+ Contract .Id ,
644
+ Contract .ContractNumber
645
+ };
646
+ }
647
+ }
648
+
649
+ private class OrderSelector extends fflib_SObjectSelector {
650
+ public OrderSelector (){
651
+ super (false ,DataAccess .SYSTEM_MODE );
652
+ }
653
+
654
+ public Schema.SObjectType getSObjectType (){
655
+ return Order .SObjectType ;
656
+ }
657
+
658
+ public List <Schema .SObjectField > getSObjectFieldList (){
659
+ return new List <Schema .SObjectField > {
660
+ Order .Id ,
661
+ Order .OrderNumber
662
+ };
663
+ }
664
+ }
665
+
666
+ private class TaskSelector extends fflib_SObjectSelector {
667
+ public TaskSelector (){
668
+ super (false ,DataAccess .SYSTEM_MODE );
669
+ }
670
+
671
+ public Schema.SObjectType getSObjectType (){
672
+ return Task .SObjectType ;
673
+ }
674
+
675
+ public List <Schema .SObjectField > getSObjectFieldList (){
676
+ return new List <Schema .SObjectField > {
677
+ Task .Id ,
678
+ Task .Subject
679
+ };
680
+ }
681
+ }
632
682
633
683
/**
634
684
* Create test user
@@ -762,6 +812,37 @@ private with sharing class fflib_SObjectSelectorTest
762
812
System .assertEquals (expectedSOQL , actualSOQL );
763
813
}
764
814
815
+ @IsTest
816
+ static void toSOQL_When_GreatGreatGrandchildRelationships_Expect_WelformedSOQL (){
817
+ AccessLevelAccountSelector aSel = new AccessLevelAccountSelector ();
818
+ fflib_QueryFactory aQF = aSel .newQueryFactory ();
819
+
820
+ ContractSelector cSel = new ContractSelector ();
821
+ fflib_QueryFactory cQF = cSel .addQueryFactorySubselect (aQF );
822
+
823
+ AccessLevelOpportunitySelector oppSel = new AccessLevelOpportunitySelector ();
824
+ fflib_QueryFactory oppQF = oppSel .addQueryFactorySubselect (cQF );
825
+
826
+ OrderSelector orderSel = new OrderSelector ();
827
+ fflib_QueryFactory orderQF = orderSel .addQueryFactorySubselect (oppQF );
828
+
829
+ TaskSelector tSel = new TaskSelector ();
830
+ fflib_QueryFactory tQF = tSel .addQueryFactorySubselect (orderQF );
831
+
832
+ String expected
833
+ = ' SELECT name, id, annualrevenue, accountnumber, '
834
+ + ' (SELECT id, contractnumber, '
835
+ + ' (SELECT name, id, amount, closedate, '
836
+ + ' (SELECT id, ordernumber, '
837
+ + ' (SELECT id, subject FROM Tasks ORDER BY Subject ASC NULLS FIRST ) '
838
+ + ' FROM Orders ORDER BY OrderNumber ASC NULLS FIRST ) '
839
+ + ' FROM Opportunities ORDER BY Name ASC NULLS FIRST ) '
840
+ + ' FROM Contracts ORDER BY ContractNumber ASC NULLS FIRST ) '
841
+ + ' FROM Account WITH USER_MODE ORDER BY Name ASC NULLS FIRST ' ;
842
+
843
+ Assert .areEqual (expected ,aQF .toSOQL ());
844
+ }
845
+
765
846
private class CampaignMemberSelector extends fflib_SObjectSelector {
766
847
public CampaignMemberSelector (DataAccess access ) {
767
848
super (false , access );
0 commit comments