@@ -82,6 +82,35 @@ private class SObjectCollectionTest {
8282 }
8383 }
8484
85+ @IsTest
86+ private static void groupByDatetimesGroupsWithApiFieldName () {
87+ Datetime now = Datetime .now ();
88+ SObjectCollection c = SObjectCollection .of (new List <Event >{
89+ new Event (
90+ ActivityDateTime = now
91+ ),
92+ new Event (
93+ ActivityDateTime = now
94+ ),
95+ new Event (
96+ ActivityDateTime = now .addHours (1 )
97+ )
98+ });
99+ Map <Datetime , List <Event >> eventsByDatetimes = c .groupByDatetimes (Event .ActivityDateTime );
100+ System .Assert .areEqual (2 , eventsByDatetimes .size ());
101+ List <Event > nowEvents = eventsByDatetimes .get (now );
102+ System .Assert .areEqual (2 , nowEvents .size ());
103+ for (Event e : nowEvents ) {
104+ System .Assert .areEqual (now , e .ActivityDateTime );
105+ }
106+
107+ List <Event > nextHourEvents = eventsByDatetimes .get (now .addHours (1 ));
108+ System .Assert .areEqual (1 , nextHourEvents .size ());
109+ for (Event e : nextHourEvents ) {
110+ System .Assert .areEqual (now .addHours (1 ), e .ActivityDateTime );
111+ }
112+ }
113+
85114 @IsTest
86115 private static void testAsMap () {
87116 Map <Id , SObject > recordMap = SObjectCollection .of (testAccounts ()).asMap ();
@@ -151,6 +180,16 @@ private class SObjectCollectionTest {
151180 System .Assert .areEqual (150.0 , revenues [3 ]);
152181 }
153182
183+ @IsTest
184+ private static void testPluckDecimalsWithRelation () {
185+ List <Decimal > revenues = SObjectCollection .of (testAccounts ()).pluckDecimals (' AnnualRevenue' );
186+ System .Assert .areEqual (4 , revenues .size ());
187+ System .Assert .areEqual (100.0 , revenues [0 ]);
188+ System .Assert .areEqual (60.0 , revenues [1 ]);
189+ System .Assert .areEqual (150.0 , revenues [2 ]);
190+ System .Assert .areEqual (150.0 , revenues [3 ]);
191+ }
192+
154193 @IsTest
155194 private static void testPluckStrings () {
156195 List <String > names = SObjectCollection .of (testAccounts ()).pluckStrings (Account .Name );
@@ -161,6 +200,16 @@ private class SObjectCollectionTest {
161200 System .Assert .areEqual (' Bar' , names [3 ]);
162201 }
163202
203+ @IsTest
204+ private static void testPluckStringsWithRelation () {
205+ List <String > names = SObjectCollection .of (testAccounts ()).pluckStrings (' Name' );
206+ System .Assert .areEqual (4 , names .size ());
207+ System .Assert .areEqual (' Foo' , names [0 ]);
208+ System .Assert .areEqual (' Bar' , names [1 ]);
209+ System .Assert .areEqual (' Foo' , names [2 ]);
210+ System .Assert .areEqual (' Bar' , names [3 ]);
211+ }
212+
164213 @IsTest
165214 private static void testPluckIdsAsStrings () {
166215 List <String > ownerIds = SObjectCollection .of (testAccounts ()).pluckStrings (Account .OwnerId );
@@ -208,6 +257,77 @@ private class SObjectCollectionTest {
208257 System .Assert .isFalse (active [2 ]);
209258 }
210259
260+ @IsTest
261+ private static void testPluckBooleansWithRelation () {
262+ List <User > users = new List <User >{
263+ new User (Title = ' Foo' , IsActive = true ),
264+ new User (Title = ' Bar' , IsActive = true ),
265+ new User (Title = ' Baz' , IsActive = false )
266+ };
267+ List <Boolean > active = SObjectCollection .of (users ).pluckBooleans (' IsActive' );
268+ System .Assert .areEqual (3 , active .size ());
269+ System .Assert .isTrue (active [0 ]);
270+ System .Assert .isTrue (active [1 ]);
271+ System .Assert .isFalse (active [2 ]);
272+ }
273+
274+ @IsTest
275+ private static void testPluckDates () {
276+ Date today = Date .today ();
277+ List <Opportunity > opps = new List <Opportunity >{
278+ new Opportunity (CloseDate = today ),
279+ new Opportunity (CloseDate = today .addDays (1 )),
280+ new Opportunity (CloseDate = today .addDays (2 ))
281+ };
282+ List <Date > closeDates = SObjectCollection .of (opps ).pluckDates (Opportunity .CloseDate );
283+ System .Assert .areEqual (3 , closeDates .size ());
284+ System .Assert .areEqual (today , closeDates [0 ]);
285+ System .Assert .areEqual (today .addDays (1 ), closeDates [1 ]);
286+ System .Assert .areEqual (today .addDays (2 ), closeDates [2 ]);
287+ }
288+
289+ @IsTest
290+ private static void testPluckDatesWithRelation () {
291+ Date today = Date .today ();
292+ List <Opportunity > opps = new List <Opportunity >{
293+ new Opportunity (CloseDate = today ),
294+ new Opportunity (CloseDate = today .addDays (1 )),
295+ new Opportunity (CloseDate = today .addDays (2 ))
296+ };
297+ List <Date > closeDates = SObjectCollection .of (opps ).pluckDates (' CloseDate' );
298+ System .Assert .areEqual (3 , closeDates .size ());
299+ System .Assert .areEqual (today , closeDates [0 ]);
300+ System .Assert .areEqual (today .addDays (1 ), closeDates [1 ]);
301+ System .Assert .areEqual (today .addDays (2 ), closeDates [2 ]);
302+ }
303+
304+ @IsTest
305+ private static void testPluckDatetimes () {
306+ Datetime now = Datetime .now ();
307+ List <Event > events = new List <Event >{
308+ new Event (ActivityDateTime = now ),
309+ new Event (ActivityDateTime = now .addHours (1 ))
310+ };
311+ List <Datetime > completedDatetimes = SObjectCollection .of (events ).pluckDatetimes (Event .ActivityDateTime );
312+ System .Assert .areEqual (2 , completedDatetimes .size ());
313+ System .Assert .areEqual (now , completedDatetimes [0 ]);
314+ System .Assert .areEqual (now .addHours (1 ), completedDatetimes [1 ]);
315+ }
316+
317+
318+ @IsTest
319+ private static void testPluckDatetimesWithRelation () {
320+ Datetime now = Datetime .now ();
321+ List <Event > events = new List <Event >{
322+ new Event (ActivityDateTime = now ),
323+ new Event (ActivityDateTime = now .addHours (1 ))
324+ };
325+ List <Datetime > completedDatetimes = SObjectCollection .of (events ).pluckDatetimes (' ActivityDateTime' );
326+ System .Assert .areEqual (2 , completedDatetimes .size ());
327+ System .Assert .areEqual (now , completedDatetimes [0 ]);
328+ System .Assert .areEqual (now .addHours (1 ), completedDatetimes [1 ]);
329+ }
330+
211331 @IsTest
212332 private static void testFieldsMatchFilter () {
213333 SObjectCollection c = SObjectCollection .of (new List <Account >{
0 commit comments