Skip to content

Commit 791659b

Browse files
authored
Add support for THIS_FISCAL_QUARTER in SOQL and implement related tests (#257)
1 parent 1177a01 commit 791659b

File tree

8 files changed

+120
-2
lines changed

8 files changed

+120
-2
lines changed

moxygen/main/default/classes/database/MockDatabaseTest.cls

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7309,4 +7309,32 @@ private class MockDatabaseTest {
73097309
'Incorrect number of opportunities'
73107310
);
73117311
}
7312+
7313+
@isTest
7314+
static void ensureThisFiscalQuarterWorksInWhereClause() {
7315+
List<Opportunity> oppList = new List<Opportunity>();
7316+
Date startOfThisFiscalQuarter = Gmt.startOfThisFiscalQuarter();
7317+
for (Integer i = 0; i < 36; i++) {
7318+
oppList.add(
7319+
new Opportunity(
7320+
Name = 'Opp' + i,
7321+
CloseDate = startOfThisFiscalQuarter.addMonths(i)
7322+
)
7323+
);
7324+
}
7325+
7326+
MockDatabase.doInsert(oppList, true);
7327+
7328+
Test.startTest();
7329+
List<Opportunity> opportunities = MockDatabase.query(
7330+
'SELECT Id, CloseDate FROM Opportunity WHERE CloseDate = THIS_FISCAL_QUARTER'
7331+
);
7332+
Test.stopTest();
7333+
7334+
Assert.areEqual(
7335+
3,
7336+
opportunities.size(),
7337+
'Incorrect number of opportunities'
7338+
);
7339+
}
73127340
}

moxygen/main/default/classes/database/Token.cls

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ public with sharing class Token {
156156
public final static String NEXT_FISCAL_QUARTER = 'next_fiscal_quarter';
157157
public final static String NEXT_N_FISCAL_QUARTERS = 'next_n_fiscal_quarters';
158158
public final static String LAST_FISCAL_QUARTER = 'last_fiscal_quarter';
159+
public final static String THIS_FISCAL_QUARTER = 'this_fiscal_quarter';
159160

160161
public final static Set<String> DATE_LITERAL_TOKENS = new Set<String>{
161162
TODAY_LITERAL,
@@ -190,6 +191,7 @@ public with sharing class Token {
190191
LAST_N_FISCAL_QUARTERS,
191192
NEXT_FISCAL_QUARTER,
192193
NEXT_N_FISCAL_QUARTERS,
193-
LAST_FISCAL_QUARTER
194+
LAST_FISCAL_QUARTER,
195+
THIS_FISCAL_QUARTER
194196
};
195197
}

moxygen/main/default/classes/database/soql-engine/interpreter/operator-handler/date-literal-comparable/DateLiteralComparableFactory.cls

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ public with sharing class DateLiteralComparableFactory {
3838
Token.LAST_N_FISCAL_QUARTERS => LastNFiscalQuartersComparable.class,
3939
Token.NEXT_FISCAL_QUARTER => NextFiscalQuarterComparable.class,
4040
Token.NEXT_N_FISCAL_QUARTERS => NextNFiscalQuartersComparable.class,
41-
Token.LAST_FISCAL_QUARTER => LastFiscalQuarterComparable.class
41+
Token.LAST_FISCAL_QUARTER => LastFiscalQuarterComparable.class,
42+
Token.THIS_FISCAL_QUARTER => ThisFiscalQuarterComparable.class
4243
};
4344

4445
@TestVisible
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @description Comparable class for THIS_FISCAL_QUARTER
3+
* @author Zackary Frazier
4+
* @since 2/2/2025
5+
*/
6+
public with sharing class ThisFiscalQuarterComparable extends DateLiteralComparable {
7+
public override Boolean isLessThan(Datetime fieldValue) {
8+
Date startOfThisFiscalQuarter = Gmt.startOfThisFiscalQuarter();
9+
return fieldValue < startOfThisFiscalQuarter;
10+
}
11+
12+
public override Boolean isGreaterThan(Datetime fieldValue) {
13+
Date startOfThisFiscalQuarter = Gmt.startOfThisFiscalQuarter();
14+
Date startOfNextFiscalQuarter = startOfThisFiscalQuarter.addMonths(3);
15+
return fieldValue >= startOfNextFiscalQuarter;
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3+
<apiVersion>62.0</apiVersion>
4+
<status>Active</status>
5+
</ApexClass>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
@isTest
2+
private class ThisFiscalQuarterComparableTest {
3+
@isTest
4+
static void ensureIsLessThanWorks() {
5+
Date startOfThisFiscalQuarter = Gmt.startOfThisFiscalQuarter();
6+
Date startOfThisFiscalQuarterMinusOneDay = startOfThisFiscalQuarter.addDays(
7+
-1
8+
);
9+
10+
ThisFiscalQuarterComparable dateLiteralComparable = new ThisFiscalQuarterComparable();
11+
12+
Assert.isTrue(
13+
dateLiteralComparable.isLessThan(
14+
startOfThisFiscalQuarterMinusOneDay
15+
),
16+
'Start of this fiscal quarter minus one day should be less than the this fiscal quarter'
17+
);
18+
19+
Assert.isFalse(
20+
dateLiteralComparable.isLessThan(startOfThisFiscalQuarter),
21+
'Start of this fiscal quarter should not be less than the this fiscal quarter'
22+
);
23+
}
24+
25+
@isTest
26+
static void ensureIsGreaterThanWorks() {
27+
Date startOfThisFiscalQuarter = Gmt.startOfThisFiscalQuarter();
28+
Date startOfNextFiscalQuarter = startOfThisFiscalQuarter.addMonths(3);
29+
30+
ThisFiscalQuarterComparable dateLiteralComparable = new ThisFiscalQuarterComparable();
31+
32+
Assert.isTrue(
33+
dateLiteralComparable.isGreaterThan(startOfNextFiscalQuarter),
34+
'Start of next fiscal quarter should be greater than the this fiscal quarter'
35+
);
36+
37+
Assert.isFalse(
38+
dateLiteralComparable.isGreaterThan(startOfThisFiscalQuarter),
39+
'Start of this fiscal quarter should not be greater than the this fiscal quarter'
40+
);
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3+
<apiVersion>62.0</apiVersion>
4+
<status>Active</status>
5+
</ApexClass>

moxygen/main/default/classes/database/soql-engine/parser/ParserTest.cls

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,4 +806,22 @@ private class ParserTest {
806806
}
807807
Test.stopTest();
808808
}
809+
810+
@isTest
811+
static void ensureThisFiscalQuarterCanBeParsed() {
812+
Parser p = new Parser();
813+
String soqlQuery = 'SELECT Id FROM Opportunity WHERE CreatedDate = THIS_FISCAL_QUARTER';
814+
Test.startTest();
815+
try {
816+
p.parse(soqlQuery);
817+
} catch (Exception e) {
818+
Assert.fail(
819+
'Expected no exception but got ' +
820+
e.getMessage() +
821+
' for ' +
822+
soqlQuery
823+
);
824+
}
825+
Test.stopTest();
826+
}
809827
}

0 commit comments

Comments
 (0)