--- /dev/null
+/*\r
+ * SPDX-FileCopyrightText: 2024 Chris Duncan <chris@flowpex.dev>\r
+ * SPDX-License-Identifier: GPL-3.0-or-later\r
+ */\r
+\r
+global class System_Id_valueOf {\r
+\r
+ @InvocableMethod(label='System.Id.valueOf()' category='Flowpex' iconName='slds:standard:product' description='Converts the specified String into an ID and returns the ID.')\r
+\r
+ global static List<Response> System_Id_valueOf (List<Request> requests) {\r
+ List<Response> responses = new List<Response>();\r
+ for (Request req : requests) {\r
+ Response res = new Response();\r
+ try {\r
+ res.idFromString = System.Id.valueOf(req.stringToId, req.restoreCasing);\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='String' description='String to be converted to an ID.')\r
+ global String stringToId;\r
+\r
+ @InvocableVariable(required='false' label='Restore Casing?' description='If set to true, and the string represents an 18-character ID, the method returns an 18-character ID that is correctly aligned with its casing. Default value is false.')\r
+ global Boolean restoreCasing;\r
+\r
+ global Request () {}\r
+ global Request (String s) {\r
+ this.stringToId = s;\r
+ this.restoreCasing = false;\r
+ }\r
+ global Request (String s, Boolean b) {\r
+ this.stringToId = s;\r
+ this.restoreCasing = b;\r
+ }\r
+ }\r
+\r
+ global class Response {\r
+ @InvocableVariable(label='Id' description='ID that was converted from a String.')\r
+ global Id idFromString;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\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_Id_valueOf_TEST {\r
+\r
+ @isTest\r
+ static void testNoArgs () {\r
+ List<System_Id_valueOf.Request> requests = new List<System_Id_valueOf.Request>();\r
+\r
+ Test.startTest();\r
+ List<System_Id_valueOf.Response> responses = System_Id_valueOf.System_Id_valueOf(requests);\r
+ Test.stopTest();\r
+\r
+ Assert.areEqual(0, responses.size());\r
+ }\r
+\r
+ @isTest\r
+ static void testEmptyRequest () {\r
+ List<System_Id_valueOf.Request> requests = new List<System_Id_valueOf.Request>();\r
+ System_Id_valueOf.Request req = new System_Id_valueOf.Request();\r
+ requests.add(req);\r
+\r
+ Test.startTest();\r
+ List<System_Id_valueOf.Response> responses = System_Id_valueOf.System_Id_valueOf(requests);\r
+ Test.stopTest();\r
+\r
+ Assert.areEqual(1, responses.size());\r
+ System_Id_valueOf.Response res = responses[0];\r
+ Assert.areEqual(null, res.idFromString);\r
+ }\r
+\r
+ @isTest\r
+ static void testBlankArg () {\r
+ List<System_Id_valueOf.Request> requests = new List<System_Id_valueOf.Request>();\r
+ System_Id_valueOf.Request req = new System_Id_valueOf.Request('');\r
+ requests.add(req);\r
+\r
+ Test.startTest();\r
+ List<System_Id_valueOf.Response> responses = System_Id_valueOf.System_Id_valueOf(requests);\r
+ Test.stopTest();\r
+\r
+ Assert.areEqual(1, responses.size());\r
+ System_Id_valueOf.Response res = responses[0];\r
+ Assert.areEqual(null, res.idFromString);\r
+ }\r
+\r
+ @isTest\r
+ static void testManyArgs () {\r
+ List<Account> accountList = new List<Account>();\r
+ for (Integer i = 0; i < 200; i++) {\r
+ Account a = new Account(\r
+ Name = 'Test Account ' + i\r
+ );\r
+ accountList.add(a);\r
+ }\r
+ insert accountList;\r
+\r
+ Map<Id, String> stringMap = new Map<Id, String>();\r
+ for (Account a : accountList) {\r
+ stringMap.put(a.Id, a.Id);\r
+ }\r
+\r
+ Test.startTest();\r
+ List<System_Id_valueOf.Request> requests = new List<System_Id_valueOf.Request>();\r
+ for (String s : stringMap.values()) {\r
+ System_Id_valueOf.Request req = new System_Id_valueOf.Request(s, true);\r
+ requests.add(req);\r
+ }\r
+ List<System_Id_valueOf.Response> responses = System_Id_valueOf.System_Id_valueOf(requests);\r
+ Test.stopTest();\r
+\r
+ Assert.areEqual(200, responses.size());\r
+ for (System_Id_valueOf.Response res : responses) {\r
+ Assert.isInstanceOfType(res.idFromString, Id.class);\r
+ Assert.areEqual(stringMap.get(res.idFromString), res.idFromString);\r
+ }\r
+ }\r
+}
\ No newline at end of file