From: Chris Duncan Date: Sat, 20 Jul 2024 21:02:14 +0000 (-0700) Subject: Add System.Datetime.format() supporting all three overloaded versions. X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=9a6f03635c5a3dcb7ac4ddb598a4416f2c9deb99;p=flowpex.git Add System.Datetime.format() supporting all three overloaded versions. --- diff --git a/src/System/Datetime/format/System_Datetime_format.cls b/src/System/Datetime/format/System_Datetime_format.cls new file mode 100644 index 0000000..2ea3939 --- /dev/null +++ b/src/System/Datetime/format/System_Datetime_format.cls @@ -0,0 +1,52 @@ +/* + * SPDX-FileCopyrightText: 2024 Chris Duncan + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +global class System_Datetime_format { + + @InvocableMethod(label='System.Datetime.format()' category='Flowpex' iconName='slds:standard:text' description='Converts the date to the specified time zone and returns the converted date as a string using the supplied Java simple date format. If the supplied time zone is not in the correct format, GMT is used. If the time zone is not supplied, the local time zone is used.') + + global static List System_Datetime_format (List requests) { + List responses = new List(); + for (Request req : requests) { + Response res = new Response(); + try { + if (req.dateFormat == null && req.aTimezone == null) { + res.stringFromDatetime = req.datetimeToString.format(); + } else if (req.aTimezone == null) { + res.stringFromDatetime = req.datetimeToString.format(req.dateFormat); + } else { + res.stringFromDatetime = req.datetimeToString.format(req.dateFormat, req.aTimezone); + } + } catch (Exception e) { + System.debug(e); + } + responses.add(res); + } + return responses; + } + + global class Request { + @InvocableVariable(required='true' label='Datetime' description='Datetime to convert to a locale-formatted string.') + global Datetime datetimeToString; + + @InvocableVariable(required='false' label='Date Format' description='For more information on the Java simple date format, see Java SimpleDateFormat.') + global String dateFormat; + + @InvocableVariable(required='false' label='Time Zone' description='Valid time zone values for the timezone argument are the time zones of the Java TimeZone class that correspond to the time zones returned by the TimeZone.getAvailableIDs method in Java. We recommend you use full time zone names, not the three-letter abbreviations.') + global String aTimezone; + + global Request () {} + global Request (Datetime d, String f, String t) { + this.datetimeToString = d; + this.dateFormat = f; + this.aTimezone = t; + } + } + + global class Response { + @InvocableVariable(label='Formatted Datetime' description='Formatted string of specified datetime.') + global String stringFromDatetime; + } +} \ No newline at end of file diff --git a/src/System/Datetime/format/System_Datetime_format.cls-meta.xml b/src/System/Datetime/format/System_Datetime_format.cls-meta.xml new file mode 100644 index 0000000..7d03d55 --- /dev/null +++ b/src/System/Datetime/format/System_Datetime_format.cls-meta.xml @@ -0,0 +1,9 @@ + + + + 61.0 + Active + \ No newline at end of file diff --git a/src/System/Datetime/format/System_Datetime_format_TEST.cls b/src/System/Datetime/format/System_Datetime_format_TEST.cls new file mode 100644 index 0000000..2c41808 --- /dev/null +++ b/src/System/Datetime/format/System_Datetime_format_TEST.cls @@ -0,0 +1,70 @@ +/* + * SPDX-FileCopyrightText: 2024 Chris Duncan + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +@isTest +private class System_Datetime_format_TEST { + + @isTest + static void testNoArgs () { + List requests = new List(); + + Test.startTest(); + List responses = System_Datetime_format.System_Datetime_format(requests); + Test.stopTest(); + + Assert.areEqual(0, responses.size()); + } + + @isTest + static void testEmptyRequest () { + List requests = new List(); + System_Datetime_format.Request req = new System_Datetime_format.Request(); + requests.add(req); + + Test.startTest(); + List responses = System_Datetime_format.System_Datetime_format(requests); + Test.stopTest(); + + Assert.areEqual(1, responses.size()); + Assert.isNull(responses[0].stringFromDatetime); + } + + @isTest + static void testBlankArgs () { + System_Datetime_format.Request req0 = new System_Datetime_format.Request(null, null, null); + System_Datetime_format.Request req1 = new System_Datetime_format.Request(Datetime.now(), null, null); + System_Datetime_format.Request req2 = new System_Datetime_format.Request(null, 'yyyy-MM-dd', null); + List requests = new List{req0, req1, req2}; + + Test.startTest(); + List responses = System_Datetime_format.System_Datetime_format(requests); + Test.stopTest(); + + Assert.areEqual(3, responses.size()); + Assert.isNull(responses[0].stringFromDatetime); + Assert.isNotNull(responses[1].stringFromDatetime); + Assert.isNull(responses[2].stringFromDatetime); + } + + @isTest + static void testManyArgs () { + Datetime now = Datetime.now(); + + Test.startTest(); + List requests = new List(); + for (Integer i = 0; i < 200; i++) { + System_Datetime_format.Request req = new System_Datetime_format.Request(now.addDays(i), 'yyyy-MM-dd\'T\'HH:mm:ss.SSSXX', 'America/Los Angeles'); + requests.add(req); + } + List responses = System_Datetime_format.System_Datetime_format(requests); + Test.stopTest(); + + Assert.areEqual(200, responses.size()); + for (System_Datetime_format.Response res : responses) { + Assert.isNotNull(res.stringFromDatetime); + Assert.isInstanceOfType(res.stringFromDatetime, String.class); + } + } +} \ No newline at end of file diff --git a/src/System/Datetime/format/System_Datetime_format_TEST.cls-meta.xml b/src/System/Datetime/format/System_Datetime_format_TEST.cls-meta.xml new file mode 100644 index 0000000..7d03d55 --- /dev/null +++ b/src/System/Datetime/format/System_Datetime_format_TEST.cls-meta.xml @@ -0,0 +1,9 @@ + + + + 61.0 + Active + \ No newline at end of file