diff --git a/.github/workflows/deploy.and.test.yml b/.github/workflows/deploy.and.test.yml index d50e75e..efc4fe0 100644 --- a/.github/workflows/deploy.and.test.yml +++ b/.github/workflows/deploy.and.test.yml @@ -26,7 +26,13 @@ jobs: run: npm install @salesforce/cli --global - name: Authorize with the dev hub - run: echo "${{ secrets.SFDX_AUTH_URL }}" | sf org login sfdx-url --alias SFDX-ENV --set-default-dev-hub --sfdx-url-stdin + env: + SFDX_AUTH_URL: ${{ secrets.SFDX_AUTH_URL }} + run: | + echo "$SFDX_AUTH_URL" | wc -c + echo "${{ secrets.SFDX_AUTH_URL }}" | wc -c + echo "$Env:SFDX_AUTH_URL" | wc -c + echo "${{ secrets.SFDX_AUTH_URL }}" | sf org login sfdx-url --alias SFDX-ENV --set-default-dev-hub --sfdx-url-stdin - name: Setup the config parameters needed run: | @@ -82,4 +88,4 @@ jobs: - name: Push changes to GIT run: | - git push \ No newline at end of file + git push diff --git a/sfdx-source/apex-extensions/main/default/classes/domains/fflib_SObjects2.cls b/sfdx-source/apex-extensions/main/default/classes/domains/fflib_SObjects2.cls index dcbb89b..2a5ecc6 100644 --- a/sfdx-source/apex-extensions/main/default/classes/domains/fflib_SObjects2.cls +++ b/sfdx-source/apex-extensions/main/default/classes/domains/fflib_SObjects2.cls @@ -1078,6 +1078,29 @@ public virtual class fflib_SObjects2 return getRecordsNotIn(sObjectField, new Set{ value }); } + /** + * Overrides the fflib_SObjects base implementation, which casts every value to `String` and + * uses `String.isNotBlank` — that throws a TypeException on Date / Datetime / Number / Lookup + * fields. This override generalises to "any non-null value, and for Strings also non-blank", + * so the helper works for every field type. + * + * @param field The field to check. + * + * @return The records whose value for `field` is non-null (and, for Strings, non-blank). + */ + protected override List getRecordsWithNonBlankFieldValues(Schema.SObjectField sObjectField) + { + List result = new List(); + for (SObject record : getRecords()) + { + Object value = record.get(sObjectField); + if (value == null) continue; + if (value instanceof String && String.isBlank((String) value)) continue; + result.add(record); + } + return result; + } + @TestVisible protected virtual List getRecordsNotIn(Schema.SObjectField sObjectField, Set values) { @@ -1455,4 +1478,4 @@ public virtual class fflib_SObjects2 } public class DeveloperException extends Exception { } -} \ No newline at end of file +} diff --git a/sfdx-source/apex-extensions/tests/classes/domains/fflib_SObjects2Test.cls b/sfdx-source/apex-extensions/tests/classes/domains/fflib_SObjects2Test.cls index bea4072..a1d8b5d 100644 --- a/sfdx-source/apex-extensions/tests/classes/domains/fflib_SObjects2Test.cls +++ b/sfdx-source/apex-extensions/tests/classes/domains/fflib_SObjects2Test.cls @@ -679,6 +679,30 @@ private class fflib_SObjects2Test System.Assert.areEqual(3, domain.selectWithShippingCountry().size()); } + @IsTest + static void itShouldReturnRecordsWithNonNullNumericField() + { + DomainAccounts domain = generateDomain(); + + System.Assert.areEqual(4, domain.selectWithAnnualRevenue().size()); + } + + @IsTest + static void itShouldReturnRecordsWithNonNullDatetimeField() + { + Datetime now = Datetime.now(); + DomainAccounts domain = new DomainAccounts( + new List + { + (Account) fflib_MockSObjectUtil.addFieldValue(new Account(Name = 'A'), Account.CreatedDate, now), + (Account) fflib_MockSObjectUtil.addFieldValue(new Account(Name = 'B'), Account.CreatedDate, now), + new Account(Name = 'C') + } + ); + + System.Assert.areEqual(2, domain.selectWithCreatedDate().size()); + } + @IsTest static void itShouldReturnRecordsWithAllFieldValues() { @@ -845,11 +869,25 @@ private class fflib_SObjects2Test public List selectWithShippingCountry() { - return getRecordsWithNotBlankFieldValues( + return getRecordsWithNonBlankFieldValues( Schema.Account.ShippingCountry ); } + public List selectWithAnnualRevenue() + { + return getRecordsWithNonBlankFieldValues( + Schema.Account.AnnualRevenue + ); + } + + public List selectWithCreatedDate() + { + return getRecordsWithNonBlankFieldValues( + Schema.Account.CreatedDate + ); + } + public List selectWithEmptyRecord() { return getRecordsWithAllBlankFieldValues(