|
4 | 4 | // LogEntryDataMaskRule__mdt checks |
5 | 5 | // The field LogEntryDataMaskRule__mdt.IsEnabled__c should be set to true for any records included in the packages. |
6 | 6 | for (LogEntryDataMaskRule__mdt record : [SELECT DeveloperName, IsEnabled__c FROM LogEntryDataMaskRule__mdt ORDER BY DeveloperName]) { |
7 | | - if (record.IsEnabled__c == false) { |
8 | | - throw new System.IllegalArgumentException('😡 IsEnabled__c field should be set to true for LogEntryDataMaskRule.' + record.DeveloperName); |
9 | | - } |
| 7 | + if (record.IsEnabled__c == false) { |
| 8 | + throw new System.IllegalArgumentException('😡 IsEnabled__c field should be set to true for LogEntryDataMaskRule.' + record.DeveloperName); |
| 9 | + } |
10 | 10 | } |
11 | | -System.debug('🥳 LogEntryDataMaskRule__mdt records have been correctly configured!'); |
| 11 | +System.debug('🥳 LogEntryDataMaskRule__mdt records have been correctly enabled!'); |
| 12 | + |
| 13 | +// LogEntryDataMaskRule__mdt checks |
| 14 | +// The fields SensitiveDataRegEx__c and ReplacementRegEx__c should contain valid regex patterns that mask the appropriate data. |
| 15 | +// US social security number rule |
| 16 | +LogEntryDataMaskRule__mdt socialSecurityNumberRule = LogEntryDataMaskRule__mdt.getInstance('SocialSecurityNumber'); |
| 17 | +System.Assert.areEqual( |
| 18 | + '>>> Here is a number XXX-XX-6789 which is the correct length for US SSN', |
| 19 | + '>>> Here is a number 123-45-6789 which is the correct length for US SSN' |
| 20 | + .replaceAll(socialSecurityNumberRule.SensitiveDataRegEx__c, socialSecurityNumberRule.ReplacementRegEx__c) |
| 21 | +); |
| 22 | +System.Assert.areEqual( |
| 23 | + '>>> Here is a number XXX-XX-6789 which is the correct length for US SSN', |
| 24 | + '>>> Here is a number 123 45 6789 which is the correct length for US SSN' |
| 25 | + .replaceAll(socialSecurityNumberRule.SensitiveDataRegEx__c, socialSecurityNumberRule.ReplacementRegEx__c) |
| 26 | +); |
| 27 | +List<String> invalidSSNLookalikes = new List<String>{ |
| 28 | + '0123-45-6789', |
| 29 | + '0123-45-67890', |
| 30 | + '23-45-678', |
| 31 | + '23-45-6789', |
| 32 | + '123-45-678', |
| 33 | + // US phone number formats |
| 34 | + '111-555-1234', |
| 35 | + '111 555 1234', |
| 36 | + '(111) 555-1234' |
| 37 | +}; |
| 38 | +for (String lookalike : invalidSSNLookalikes) { |
| 39 | + String originalInput = '>>> Here is a value ' + lookalike + ' and it is not a valid form for US SSN, so masking should not occur'; |
| 40 | + System.Assert.areEqual( |
| 41 | + originalInput, |
| 42 | + originalInput.replaceAll(socialSecurityNumberRule.SensitiveDataRegEx__c, socialSecurityNumberRule.ReplacementRegEx__c) |
| 43 | + ); |
| 44 | +} |
| 45 | +System.debug( |
| 46 | + '🥳 LogEntryDataMaskRule__mdt record \'SocialSecurityNumber\' has been correctly configured with functioning regexes for sensitive data & replacement!' |
| 47 | +); |
| 48 | + |
| 49 | +// Mastercard credit card rule |
| 50 | +LogEntryDataMaskRule__mdt mastercardCreditCardNumberRule = LogEntryDataMaskRule__mdt.getInstance('MastercardCreditCardNumber'); |
| 51 | +System.Assert.areEqual( |
| 52 | + '>>> Here is a credit card number ****-****-****-0005 which is the correct length for Mastercard', |
| 53 | + '>>> Here is a credit card number 5000-1111-2222-0005 which is the correct length for Mastercard' |
| 54 | + .replaceAll(mastercardCreditCardNumberRule.SensitiveDataRegEx__c, mastercardCreditCardNumberRule.ReplacementRegEx__c) |
| 55 | +); |
| 56 | +List<String> invalidMastercardLookalikes = new List<String>{ |
| 57 | + '05000-1111-2222-0005', |
| 58 | + '05000-1111-2222-00050', |
| 59 | + '000-1111-2222-000', |
| 60 | + '000-1111-2222-0005', |
| 61 | + '5000-1111-2222-000' |
| 62 | +}; |
| 63 | +for (String lookalike : invalidMastercardLookalikes) { |
| 64 | + String originalInput = '>>> Here is a value ' + lookalike + ' and it is not a valid form for Mastercard, so masking should not occur'; |
| 65 | + System.Assert.areEqual( |
| 66 | + originalInput, |
| 67 | + originalInput.replaceAll(socialSecurityNumberRule.SensitiveDataRegEx__c, socialSecurityNumberRule.ReplacementRegEx__c) |
| 68 | + ); |
| 69 | +} |
| 70 | +System.debug( |
| 71 | + '🥳 LogEntryDataMaskRule__mdt record \'MastercardCreditCardNumber\' has been correctly configured with functioning regexes for sensitive data & replacement!' |
| 72 | +); |
| 73 | + |
| 74 | +// Visa credit card rule |
| 75 | +LogEntryDataMaskRule__mdt visaCreditCardNumberRule = LogEntryDataMaskRule__mdt.getInstance('VisaCreditCardNumber'); |
| 76 | +System.Assert.areEqual( |
| 77 | + '>>> Here is a credit card number ****-****-****-0004 which is the correct length for Visa', |
| 78 | + '>>> Here is a credit card number 4000-1111-2222-0004 which is the correct length for Visa' |
| 79 | + .replaceAll(visaCreditCardNumberRule.SensitiveDataRegEx__c, visaCreditCardNumberRule.ReplacementRegEx__c) |
| 80 | +); |
| 81 | +List<String> invalidVisaLookalikes = new List<String>{ |
| 82 | + '04000-1111-2222-0004', |
| 83 | + '04000-1111-2222-00040', |
| 84 | + '000-1111-2222-000', |
| 85 | + '000-1111-2222-0004', |
| 86 | + '4000-1111-2222-000' |
| 87 | +}; |
| 88 | +for (String lookalike : invalidVisaLookalikes) { |
| 89 | + String originalInput = '>>> Here is a value ' + lookalike + ' and it is not a valid form for Visa, so masking should not occur'; |
| 90 | + System.Assert.areEqual( |
| 91 | + originalInput, |
| 92 | + originalInput.replaceAll(socialSecurityNumberRule.SensitiveDataRegEx__c, socialSecurityNumberRule.ReplacementRegEx__c) |
| 93 | + ); |
| 94 | +} |
| 95 | +System.debug( |
| 96 | + '🥳 LogEntryDataMaskRule__mdt record \'VisaCreditCardNumber\' has been correctly configured with functioning regexes for sensitive data & replacement!' |
| 97 | +); |
12 | 98 |
|
13 | 99 | // LoggerParameter__mdt checks |
14 | 100 | // The field LoggerParameter__mdt.Description__c is a long textarea field, so it can't be marked as required - but every record |
15 | 101 | // should have the field populated before being added to the unlocked & managed packages. |
16 | 102 | for (LoggerParameter__mdt record : [SELECT DeveloperName, Description__c FROM LoggerParameter__mdt ORDER BY DeveloperName]) { |
17 | | - if (record.Description__c == null) { |
18 | | - throw new System.IllegalArgumentException('😡 Description__c field should be populated for LoggerParameter.' + record.DeveloperName); |
19 | | - } |
| 103 | + if (record.Description__c == null) { |
| 104 | + throw new System.IllegalArgumentException('😡 Description__c field should be populated for LoggerParameter.' + record.DeveloperName); |
| 105 | + } |
20 | 106 | } |
21 | | -System.debug('🥳 LoggerParameter__mdt records have been correctly configured!'); |
| 107 | +System.debug('🥳 LoggerParameter__mdt records have been correctly populated with a description!'); |
22 | 108 |
|
23 | 109 | // LoggerSObjectHandler__mdt checks |
24 | 110 | // The field LoggerSObjectHandler__mdt.IsEnabled__c should be set to true for any records included in the packages. |
25 | 111 | for (LoggerSObjectHandler__mdt record : [SELECT DeveloperName, IsEnabled__c FROM LoggerSObjectHandler__mdt ORDER BY DeveloperName]) { |
26 | | - if (record.IsEnabled__c == false) { |
27 | | - throw new System.IllegalArgumentException('😡 IsEnabled__c field should be set to true for LoggerSObjectHandler.' + record.DeveloperName); |
28 | | - } |
| 112 | + if (record.IsEnabled__c == false) { |
| 113 | + throw new System.IllegalArgumentException('😡 IsEnabled__c field should be set to true for LoggerSObjectHandler.' + record.DeveloperName); |
| 114 | + } |
29 | 115 | } |
30 | | -System.debug('🥳 LoggerSObjectHandler__mdt records have been correctly configured!'); |
| 116 | +System.debug('🥳 LoggerSObjectHandler__mdt records have been correctly enabled!'); |
31 | 117 |
|
32 | 118 | // LogStatus__mdt checks |
33 | 119 | // The field LogStatus__mdt.IsActive__c should be set to true for any records included in the packages. |
34 | 120 | for (LogStatus__mdt record : [SELECT DeveloperName, IsActive__c FROM LogStatus__mdt ORDER BY DeveloperName]) { |
35 | | - // TODO rename LogStatus__mdt.IsActive__c to IsEnabled__c for consistency with other objects |
36 | | - if (record.IsActive__c == false) { |
37 | | - throw new System.IllegalArgumentException('😡 IsActive__c field should be set to true for LogStatus.' + record.DeveloperName); |
38 | | - } |
| 121 | + // TODO rename LogStatus__mdt.IsActive__c to IsEnabled__c for consistency with other objects |
| 122 | + if (record.IsActive__c == false) { |
| 123 | + throw new System.IllegalArgumentException('😡 IsActive__c field should be set to true for LogStatus.' + record.DeveloperName); |
| 124 | + } |
39 | 125 | } |
40 | | -System.debug('🥳 LogStatus__mdt records have been correctly configured!'); |
| 126 | +System.debug('🥳 LogStatus__mdt records records have been correctly enabled!'); |
0 commit comments