]> git.codecow.com Git - flowpex.git/commitdiff
Add System.Datetime.format() supporting all three overloaded versions.
authorChris Duncan <chris@flowpex.dev>
Sat, 20 Jul 2024 21:02:14 +0000 (14:02 -0700)
committerChris Duncan <chris@flowpex.dev>
Sat, 20 Jul 2024 21:02:14 +0000 (14:02 -0700)
src/System/Datetime/format/System_Datetime_format.cls [new file with mode: 0644]
src/System/Datetime/format/System_Datetime_format.cls-meta.xml [new file with mode: 0644]
src/System/Datetime/format/System_Datetime_format_TEST.cls [new file with mode: 0644]
src/System/Datetime/format/System_Datetime_format_TEST.cls-meta.xml [new file with mode: 0644]

diff --git a/src/System/Datetime/format/System_Datetime_format.cls b/src/System/Datetime/format/System_Datetime_format.cls
new file mode 100644 (file)
index 0000000..2ea3939
--- /dev/null
@@ -0,0 +1,52 @@
+/*\r
+ * SPDX-FileCopyrightText: 2024 Chris Duncan <chris@flowpex.dev>\r
+ * SPDX-License-Identifier: GPL-3.0-or-later\r
+ */\r
+\r
+global class System_Datetime_format {\r
+\r
+    @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.')\r
+\r
+    global static List<Response> System_Datetime_format (List<Request> requests) {\r
+        List<Response> responses = new List<Response>();\r
+        for (Request req : requests) {\r
+            Response res = new Response();\r
+            try {\r
+                if (req.dateFormat == null && req.aTimezone == null) {\r
+                    res.stringFromDatetime = req.datetimeToString.format();\r
+                } else if (req.aTimezone == null) {\r
+                    res.stringFromDatetime = req.datetimeToString.format(req.dateFormat);\r
+                } else {\r
+                    res.stringFromDatetime = req.datetimeToString.format(req.dateFormat, req.aTimezone);\r
+                }\r
+            } catch (Exception e) {\r
+                System.debug(e);\r
+            }\r
+            responses.add(res);\r
+        }\r
+        return responses;\r
+    }\r
+\r
+    global class Request {\r
+        @InvocableVariable(required='true' label='Datetime' description='Datetime to convert to a locale-formatted string.')\r
+        global Datetime datetimeToString;\r
+\r
+        @InvocableVariable(required='false' label='Date Format' description='For more information on the Java simple date format, see Java SimpleDateFormat.')\r
+        global String dateFormat;\r
+\r
+        @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.')\r
+        global String aTimezone;\r
+\r
+        global Request () {}\r
+        global Request (Datetime d, String f, String t) {\r
+            this.datetimeToString = d;\r
+            this.dateFormat = f;\r
+            this.aTimezone = t;\r
+        }\r
+    }\r
+\r
+    global class Response {\r
+        @InvocableVariable(label='Formatted Datetime' description='Formatted string of specified datetime.')\r
+        global String stringFromDatetime;\r
+    }\r
+}
\ 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 (file)
index 0000000..7d03d55
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+SPDX-FileCopyrightText: 2024 Chris Duncan <chris@flowpex.dev>\r
+SPDX-License-Identifier: GPL-3.0-or-later\r
+-->\r
+<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">\r
+    <apiVersion>61.0</apiVersion>\r
+    <status>Active</status>\r
+</ApexClass>
\ 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 (file)
index 0000000..2c41808
--- /dev/null
@@ -0,0 +1,70 @@
+/*\r
+ * SPDX-FileCopyrightText: 2024 Chris Duncan <chris@flowpex.dev>\r
+ * SPDX-License-Identifier: GPL-3.0-or-later\r
+ */\r
+\r
+@isTest\r
+private class System_Datetime_format_TEST {\r
+\r
+    @isTest\r
+    static void testNoArgs () {\r
+        List<System_Datetime_format.Request> requests = new List<System_Datetime_format.Request>();\r
+\r
+        Test.startTest();\r
+        List<System_Datetime_format.Response> responses = System_Datetime_format.System_Datetime_format(requests);\r
+        Test.stopTest();\r
+\r
+        Assert.areEqual(0, responses.size());\r
+    }\r
+\r
+    @isTest\r
+    static void testEmptyRequest () {\r
+        List<System_Datetime_format.Request> requests = new List<System_Datetime_format.Request>();\r
+        System_Datetime_format.Request req = new System_Datetime_format.Request();\r
+        requests.add(req);\r
+\r
+        Test.startTest();\r
+        List<System_Datetime_format.Response> responses = System_Datetime_format.System_Datetime_format(requests);\r
+        Test.stopTest();\r
+\r
+        Assert.areEqual(1, responses.size());\r
+        Assert.isNull(responses[0].stringFromDatetime);\r
+    }\r
+\r
+    @isTest\r
+    static void testBlankArgs () {\r
+        System_Datetime_format.Request req0 = new System_Datetime_format.Request(null, null, null);\r
+        System_Datetime_format.Request req1 = new System_Datetime_format.Request(Datetime.now(), null, null);\r
+        System_Datetime_format.Request req2 = new System_Datetime_format.Request(null, 'yyyy-MM-dd', null);\r
+        List<System_Datetime_format.Request> requests = new List<System_Datetime_format.Request>{req0, req1, req2};\r
+\r
+        Test.startTest();\r
+        List<System_Datetime_format.Response> responses = System_Datetime_format.System_Datetime_format(requests);\r
+        Test.stopTest();\r
+\r
+        Assert.areEqual(3, responses.size());\r
+        Assert.isNull(responses[0].stringFromDatetime);\r
+        Assert.isNotNull(responses[1].stringFromDatetime);\r
+        Assert.isNull(responses[2].stringFromDatetime);\r
+    }\r
+\r
+    @isTest\r
+    static void testManyArgs () {\r
+        Datetime now = Datetime.now();\r
+\r
+        Test.startTest();\r
+        List<System_Datetime_format.Request> requests = new List<System_Datetime_format.Request>();\r
+        for (Integer i = 0; i < 200; i++) {\r
+            System_Datetime_format.Request req = new System_Datetime_format.Request(now.addDays(i), 'yyyy-MM-dd\'T\'HH:mm:ss.SSSXX', 'America/Los Angeles');\r
+            requests.add(req);\r
+        }\r
+        List<System_Datetime_format.Response> responses = System_Datetime_format.System_Datetime_format(requests);\r
+        Test.stopTest();\r
+\r
+        Assert.areEqual(200, responses.size());\r
+        for (System_Datetime_format.Response res : responses) {\r
+            Assert.isNotNull(res.stringFromDatetime);\r
+            Assert.isInstanceOfType(res.stringFromDatetime, String.class);\r
+        }\r
+    }\r
+}
\ 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 (file)
index 0000000..7d03d55
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+SPDX-FileCopyrightText: 2024 Chris Duncan <chris@flowpex.dev>\r
+SPDX-License-Identifier: GPL-3.0-or-later\r
+-->\r
+<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">\r
+    <apiVersion>61.0</apiVersion>\r
+    <status>Active</status>\r
+</ApexClass>
\ No newline at end of file