From 9a6f03635c5a3dcb7ac4ddb598a4416f2c9deb99 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Sat, 20 Jul 2024 14:02:14 -0700 Subject: [PATCH] Add System.Datetime.format() supporting all three overloaded versions. --- .../format/System_Datetime_format.cls | 52 ++++++++++++++ .../System_Datetime_format.cls-meta.xml | 9 +++ .../format/System_Datetime_format_TEST.cls | 70 +++++++++++++++++++ .../System_Datetime_format_TEST.cls-meta.xml | 9 +++ 4 files changed, 140 insertions(+) create mode 100644 src/System/Datetime/format/System_Datetime_format.cls create mode 100644 src/System/Datetime/format/System_Datetime_format.cls-meta.xml create mode 100644 src/System/Datetime/format/System_Datetime_format_TEST.cls create mode 100644 src/System/Datetime/format/System_Datetime_format_TEST.cls-meta.xml 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 -- 2.52.0