From 14b1ce21025c754488a490de2142b37ae1e50c3f Mon Sep 17 00:00:00 2001 From: Andrew Fawcett Date: Wed, 18 Mar 2026 14:54:38 +0000 Subject: [PATCH 1/2] Changes to run sample app in user mode --- README.md | 52 ++- images/sampleappoverview.png | Bin 103662 -> 0 bytes .../main/classes/Application.cls | 17 +- .../classes/domains/OpportunityLineItems.cls | 11 +- .../classes/selectors/AccountsSelector.cls | 8 +- .../selectors/OpportunitiesSelector.cls | 8 +- .../OpportunityLineItemsSelector.cls | 8 +- .../selectors/PricebookEntriesSelector.cls | 8 +- .../classes/selectors/PricebooksSelector.cls | 8 +- .../classes/selectors/ProductsSelector.cls | 4 +- .../main/classes/selectors/UsersSelector.cls | 8 +- ...sePatternsSampleApp.permissionset-meta.xml | 350 ++++++++++++++++++ .../test/classes/TestDataFactory.cls | 46 +++ .../test/classes/TestDataFactory.cls-meta.xml | 5 + .../domains/DeveloperWorkItemsTest.cls | 49 ++- .../classes/domains/OpportunitiesTest.cls | 62 ++-- .../selectors/ProductsSelectorTest.cls | 76 ++-- .../classes/service/InvoicingServiceTest.cls | 29 +- .../OpportunitiesServiceIntegrationTest.cls | 21 +- 19 files changed, 632 insertions(+), 138 deletions(-) delete mode 100644 images/sampleappoverview.png create mode 100644 sfdx-source/apex-common-samplecode/main/permissionSets/ApexEnterprisePatternsSampleApp.permissionset-meta.xml create mode 100644 sfdx-source/apex-common-samplecode/test/classes/TestDataFactory.cls create mode 100644 sfdx-source/apex-common-samplecode/test/classes/TestDataFactory.cls-meta.xml diff --git a/README.md b/README.md index 116d5c1..5119d98 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,46 @@ FFLib Apex Common Sample -======================== +===================================== ![Push Source and Run Apex Tests](https://github.com/apex-enterprise-patterns/fflib-apex-common-samplecode/workflows/Create%20a%20Scratch%20Org,%20Push%20Source%20and%20Run%20Apex%20Tests/badge.svg) **Dependencies:** Must deploy [Apex Mocks](https://github.com/apex-enterprise-patterns/fflib-apex-mocks) and [Apex Common](https://github.com/apex-enterprise-patterns/fflib-apex-common) before deploying this library -Deploy Apex Mocks - - Deploy to Salesforce - - -Deploy Apex Common - - Deploy to Salesforce - - -Deploy Apex Common Sample Code - - Deploy to Salesforce - +| Library | Deploy | +|---------|--------| +| Apex Mocks | Deploy to Salesforce | +| Apex Common | Deploy to Salesforce | +| Apex Common Sample Code | Deploy to Salesforce | Sample Application ================== -This repository contains a sample application illustrating the Apex Enterprise Patterns library. The aim is to illustrate fullly working sample application to better illustrate the patterns in presentations and articles. You can see a [demo of this application in the Dreamforce 2013 session](http://www.youtube.com/watch?v=qlq46AEAlLI#t=572) presented by @afawcett +This repository contains a sample application illustrating the Apex Enterprise Patterns library. The aim is to illustrate a fully working sample application that demonstrates the patterns. **NOTE:** The supporting **Apex Common** library can be found [here](https://github.com/apex-enterprise-patterns/fflib-apex-common). -![Alt text](/images/sampleappoverview.png "Optional title") +| Platform Feature | Patterns Used | +|------------------|---------------| +| Custom Buttons | Building **UI** logic and calling **Service Layer** code from Controllers | +| Batch Apex | Reusing **Service** and **Selector Layer** code from within a Batch context | +| Integration API | Exposing an Integration API via **Service Layer** using Apex and REST | +| Apex Triggers | Factoring your Apex Trigger logic via the **Domain Layer** (wrappers) | + +User Mode and CRUD/FLS +---------------------- + +This sample enforces field-level security (FLS) by using fflib user mode throughout. Selectors use `setDataAccess(USER_MODE)` for FLS on queries; the UnitOfWork uses `UserModeDML()` via an inner `UserModeUnitOfWorkFactory` in `Application.cls` for FLS on DML. Tests that exercise USER_MODE code use `TestDataFactory` to create a Standard User with the `ApexEnterprisePatternsSampleApp` permission set, then run under `System.runAs(getRunAsUser())`; data setup requiring elevated permissions (e.g. PricebookEntry insert) runs in system context. + +| Area | Approach | +|------|----------| +| **Selectors** | `super(false); setDataAccess(USER_MODE)` in all selector constructors | +| **UnitOfWork** | Inner `UserModeUnitOfWorkFactory` in Application.cls; uses `UserModeDML()` | +| **Tests** | `TestDataFactory`; `@TestSetup` + `System.runAs(getRunAsUser())` for DML/selector tests | +| **Permission set** | `ApexEnterprisePatternsSampleApp` grants field-level access for USER_MODE tests | Application Enterprise Patterns on Salesforce Lightning Platform ================================================================ Design patterns are an invaluable tool for developers and architects looking to build enterprise solutions. Here are presented some tried and tested enterprise application engineering patterns that have been used in other platforms and languages. We will discuss and illustrate how patterns such as Data Mapper, Service Layer, Unit of Work and of course Model View Controller can be applied to Force.com. Applying these patterns can help manage governed resources (such as DML) better, encourage better separation-of-concerns in your logic and enforce Force.com coding best practices. -Dreamforce Session and Slides ------------------------------ - -- View slides for the **Dreamforce 2013** session [here](https://docs.google.com/file/d/0B6brfGow3cD8RVVYc1dCX2s0S1E/edit) -- Video recording of the **Dreamforce 2014** advanced session [here](https://www.youtube.com/watch?v=BLXp0ZP0cF0). -- View slides for the **Dreamforce 2015** session [here](http://www.slideshare.net/andyinthecloud/building-strong-foundations-apex-enterprise-patterns) - More Information on Trailhead -------------------------------------------- diff --git a/images/sampleappoverview.png b/images/sampleappoverview.png deleted file mode 100644 index 42bf8a6a2a81f758156e45f4169c87261582c011..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103662 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 F{|7a9mK*>8 diff --git a/sfdx-source/apex-common-samplecode/main/classes/Application.cls b/sfdx-source/apex-common-samplecode/main/classes/Application.cls index b4d8882..609e7eb 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/Application.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/Application.cls @@ -26,9 +26,9 @@ public class Application { - // Configure and create the UnitOfWorkFactory for this Application - public static final fflib_Application.UnitOfWorkFactory UnitOfWork = - new fflib_Application.UnitOfWorkFactory( + // Configure and create the UnitOfWorkFactory for this Application (UserMode DML for FLS) + public static final fflib_Application.UnitOfWorkFactory UnitOfWork = + new UserModeUnitOfWorkFactory( new List { Account.SObjectType, Invoice__c.SObjectType, @@ -40,7 +40,7 @@ public class Application WorkOrder__c.SObjectType, DeveloperWorkItem__c.SObjectType, TrainingWorkItem__c.SObjectType, - DesignWorkItem__c.SObjectType }); + DesignWorkItem__c.SObjectType }); // Configure and create the ServiceFactory for this Application public static final fflib_Application.ServiceFactory Service = @@ -71,4 +71,13 @@ public class Application OpportunityLineItem.SObjectType => OpportunityLineItems.Constructor.class, Account.SObjectType => Accounts.Constructor.class, DeveloperWorkItem__c.SObjectType => DeveloperWorkItems.class }); + + // Custom UnitOfWork factory that uses UserModeDML for FLS enforcement + private class UserModeUnitOfWorkFactory extends fflib_Application.UnitOfWorkFactory { + public UserModeUnitOfWorkFactory(List objectTypes) { super(objectTypes); } + public override fflib_ISObjectUnitOfWork newInstance() { + if (m_mockUow != null) return m_mockUow; + return new fflib_SObjectUnitOfWork(m_objectTypes, new fflib_SObjectUnitOfWork.UserModeDML()); + } + } } diff --git a/sfdx-source/apex-common-samplecode/main/classes/domains/OpportunityLineItems.cls b/sfdx-source/apex-common-samplecode/main/classes/domains/OpportunityLineItems.cls index ea2b8e7..a3ce517 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/domains/OpportunityLineItems.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/domains/OpportunityLineItems.cls @@ -63,12 +63,11 @@ public with sharing class OpportunityLineItems extends fflib_SObjectDomain continue; } } - - // Adjust UnitPrice - line.UnitPrice = line.UnitPrice * factor; - - // Register this record as dirty with the unit of work - uow.registerDirty(line); + + // Minimal record (Id + UnitPrice only): USER_MODE DML enforces FLS on every field in the record; queried records carry OpportunityId, PricebookEntryId, etc. that trigger "fields being inaccessible". + OpportunityLineItem updateOli = new OpportunityLineItem(Id = line.Id); + updateOli.UnitPrice = line.UnitPrice * factor; + uow.registerDirty(updateOli); } } diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/AccountsSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/AccountsSelector.cls index 4979727..50985b5 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/AccountsSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/AccountsSelector.cls @@ -34,7 +34,13 @@ public class AccountsSelector extends fflib_SObjectSelector { return (IAccountsSelector) Application.Selector.newInstance(Account.SObjectType); } - + + public AccountsSelector() + { + super(false); + setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + } + public List getSObjectFieldList() { return new List { diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunitiesSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunitiesSelector.cls index 9cbfe83..11de9a2 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunitiesSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunitiesSelector.cls @@ -31,7 +31,13 @@ public class OpportunitiesSelector extends fflib_SObjectSelector { return (IOpportunitiesSelector) Application.Selector.newInstance(Opportunity.SObjectType); } - + + public OpportunitiesSelector() + { + super(false); + setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + } + public List getSObjectFieldList() { return new List { diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunityLineItemsSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunityLineItemsSelector.cls index 83492b5..c4f81e8 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunityLineItemsSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunityLineItemsSelector.cls @@ -31,7 +31,13 @@ public class OpportunityLineItemsSelector extends fflib_SObjectSelector { return (IOpportunityLineItemsSelector) Application.Selector.newInstance(OpportunityLineItem.SObjectType); } - + + public OpportunityLineItemsSelector() + { + super(false); + setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + } + public List getSObjectFieldList() { return new List { diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebookEntriesSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebookEntriesSelector.cls index 138998c..ee0e210 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebookEntriesSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebookEntriesSelector.cls @@ -31,7 +31,13 @@ public class PricebookEntriesSelector extends fflib_SObjectSelector { return (IPricebookEntriesSelector) Application.Selector.newInstance(PricebookEntry.SObjectType); } - + + public PricebookEntriesSelector() + { + super(false); + setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + } + public List getSObjectFieldList() { return new List { diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebooksSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebooksSelector.cls index 694679f..7aef90a 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebooksSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebooksSelector.cls @@ -31,7 +31,13 @@ public class PricebooksSelector extends fflib_SObjectSelector { return (IPricebooksSelector) Application.Selector.newInstance(Pricebook2.SObjectType); } - + + public PricebooksSelector() + { + super(false); + setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + } + public List getSObjectFieldList() { return new List { diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/ProductsSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/ProductsSelector.cls index ae7018c..7a59aca 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/ProductsSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/ProductsSelector.cls @@ -35,11 +35,13 @@ public class ProductsSelector extends fflib_SObjectSelector public ProductsSelector() { super(false); + setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); } - + public ProductsSelector(Boolean includeFieldSetFields) { super(includeFieldSetFields); + setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); } public List getSObjectFieldList() diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/UsersSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/UsersSelector.cls index 6308574..db56816 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/UsersSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/UsersSelector.cls @@ -34,7 +34,13 @@ public class UsersSelector extends fflib_SObjectSelector { return (IUsersSelector) Application.Selector.newInstance(User.SObjectType); } - + + public UsersSelector() + { + super(false); + setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + } + public List getSObjectFieldList() { // Current app requirements driven solely by getUsersEmail at this stage diff --git a/sfdx-source/apex-common-samplecode/main/permissionSets/ApexEnterprisePatternsSampleApp.permissionset-meta.xml b/sfdx-source/apex-common-samplecode/main/permissionSets/ApexEnterprisePatternsSampleApp.permissionset-meta.xml new file mode 100644 index 0000000..3ade872 --- /dev/null +++ b/sfdx-source/apex-common-samplecode/main/permissionSets/ApexEnterprisePatternsSampleApp.permissionset-meta.xml @@ -0,0 +1,350 @@ + + + Grants access to custom fields and objects used by Apex Enterprise Patterns sample app tests (USER_MODE enforcement) + + true + DeveloperWorkItem__c.CodeReviewingHours__c + true + + + true + DeveloperWorkItem__c.CodingHours__c + true + + + true + DeveloperWorkItem__c.DeveloperCost__c + true + + + true + DeveloperWorkItem__c.TechnicalDesignHours__c + true + + + true + TrainingWorkItem__c.DeliveryHours__c + true + + + true + TrainingWorkItem__c.PreparationHours__c + true + + + true + TrainingWorkItem__c.TrainingCost__c + true + + + true + WorkOrder__c.Account__c + true + + + true + InvoiceLine__c.Description__c + true + + + true + InvoiceLine__c.Product__c + true + + + true + InvoiceLine__c.Quantity__c + true + + + true + InvoiceLine__c.UnitPrice__c + true + + + true + Invoice__c.Account__c + true + + + true + Invoice__c.Description__c + true + + + true + Invoice__c.InvoiceDate__c + true + + + true + Opportunity.AccountId + true + + + true + Opportunity.Amount + true + + + true + Opportunity.CampaignId + true + + + true + Opportunity.ContractId + true + + + true + Opportunity.Description + true + + + true + Opportunity.DiscountType__c + true + + + true + Opportunity.ExpectedRevenue + true + + + true + Opportunity.InvoicedStatus__c + true + + + true + Opportunity.IsPrivate + true + + + true + Opportunity.LeadSource + true + + + true + Opportunity.NextStep + true + + + true + Opportunity.Probability + true + + + true + Opportunity.TotalOpportunityQuantity + true + + + true + Opportunity.Type + true + + + true + OpportunityLineItem.Description + true + + + true + OpportunityLineItem.Discount + true + + + true + OpportunityLineItem.ListPrice + true + + + true + OpportunityLineItem.ProductCode + true + + + true + OpportunityLineItem.ServiceDate + true + + + true + OpportunityLineItem.Subtotal + true + + + true + OpportunityLineItem.TotalPrice + true + + + true + Product2.Description + true + + + true + Product2.DiscountingApproved__c + true + + + true + Product2.DisplayUrl + true + + + true + Product2.ExternalDataSourceId + true + + + true + Product2.ExternalId + true + + + true + Product2.Family + true + + + true + Product2.ProductCode + true + + + true + Product2.QuantityUnitOfMeasure + true + + + true + Product2.SellerId + true + + + true + Product2.SourceProductId + true + + + true + Product2.StockKeepingUnit + true + + + true + Product2.SubscriberField__c + true + + + true + Product2.TransferRecordMode + true + + false + + Salesforce + + true + false + true + true + false + Account + false + false + + + true + false + true + true + false + DeveloperWorkItem__c + false + false + + + true + false + true + true + false + InvoiceLine__c + false + false + + + true + false + true + true + false + Invoice__c + false + false + + + true + true + true + true + false + Opportunity + false + false + + + false + false + false + true + false + Pricebook2 + false + false + + + true + false + true + true + false + Product2 + false + false + + + true + false + true + true + false + TrainingWorkItem__c + false + false + + + true + false + true + true + false + WorkOrder__c + false + false + + + standard-Opportunity + Visible + + + standard-Product2 + Visible + + diff --git a/sfdx-source/apex-common-samplecode/test/classes/TestDataFactory.cls b/sfdx-source/apex-common-samplecode/test/classes/TestDataFactory.cls new file mode 100644 index 0000000..f404b89 --- /dev/null +++ b/sfdx-source/apex-common-samplecode/test/classes/TestDataFactory.cls @@ -0,0 +1,46 @@ +/** + * Shared test data factory. Creates a Standard User with ApexEnterprisePatternsSampleApp + * permission set for runAs tests that require field-level access (USER_MODE enforcement). + */ +@IsTest +public class TestDataFactory +{ + private static final String RUN_AS_USER_LASTNAME = 'SampleApp'; + + /** + * Creates a Standard User with ApexEnterprisePatternsSampleApp permission set. + * Call from @TestSetup. In test methods, use getRunAsUser() with System.runAs(). + * @return The created user + */ + public static User createUserWithSampleAppPermissions() + { + List salesProfiles = [SELECT Id FROM Profile WHERE Name = 'Sales User' AND UserLicense.Name = 'Salesforce' LIMIT 1]; + Profile p = salesProfiles.isEmpty() + ? [SELECT Id FROM Profile WHERE Name = 'Standard User' AND UserLicense.Name = 'Salesforce' LIMIT 1] + : salesProfiles[0]; + String uniqueName = 'sampleapp_' + DateTime.now().getTime() + '@test.org'; + User u = new User( + Alias = 'sampapp', + Email = 'sampleapp@test.org', + EmailEncodingKey = 'UTF-8', + LastName = RUN_AS_USER_LASTNAME, + LanguageLocaleKey = 'en_US', + LocaleSidKey = 'en_US', + ProfileId = p.Id, + TimeZoneSidKey = 'America/Los_Angeles', + UserName = uniqueName + ); + insert u; + + PermissionSet ps = [SELECT Id FROM PermissionSet WHERE Name = 'ApexEnterprisePatternsSampleApp' LIMIT 1]; + insert new PermissionSetAssignment(AssigneeId = u.Id, PermissionSetId = ps.Id); + + return u; + } + + /** Returns the runAs user created by createUserWithSampleAppPermissions(). Use with System.runAs(). */ + public static User getRunAsUser() + { + return [SELECT Id FROM User WHERE LastName = :RUN_AS_USER_LASTNAME LIMIT 1]; + } +} diff --git a/sfdx-source/apex-common-samplecode/test/classes/TestDataFactory.cls-meta.xml b/sfdx-source/apex-common-samplecode/test/classes/TestDataFactory.cls-meta.xml new file mode 100644 index 0000000..5f399c3 --- /dev/null +++ b/sfdx-source/apex-common-samplecode/test/classes/TestDataFactory.cls-meta.xml @@ -0,0 +1,5 @@ + + + 63.0 + Active + diff --git a/sfdx-source/apex-common-samplecode/test/classes/domains/DeveloperWorkItemsTest.cls b/sfdx-source/apex-common-samplecode/test/classes/domains/DeveloperWorkItemsTest.cls index 98c0a4c..d76f55c 100644 --- a/sfdx-source/apex-common-samplecode/test/classes/domains/DeveloperWorkItemsTest.cls +++ b/sfdx-source/apex-common-samplecode/test/classes/domains/DeveloperWorkItemsTest.cls @@ -24,25 +24,34 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **/ -@isTest -private class DeveloperWorkItemsTest { +@IsTest +private class DeveloperWorkItemsTest +{ + @TestSetup + static void setup() + { + TestDataFactory.createUserWithSampleAppPermissions(); + } - static testMethod void whenInsertingDeveloperWorkItemsThenCalcCost() { - - // Given - fflib_ISObjectUnitOfWOrk uow = Application.UnitOfWork.newInstance(); - WorkOrder__c wo = new WorkOrder__c(); - DeveloperWorkItem__c wi = new DeveloperWorkItem__c(); - wi.CodingHours__c = 20; - wi.CodeReviewingHours__c = 1; - wi.TechnicalDesignHours__c = 10; - uow.registerNew(wo); - uow.registerNew(wi, DeveloperWorkItem__c.WorkOrder__c, wo); - - // When - uow.commitWork(); - - // Then - System.assertEquals(3100, [select DeveloperCost__c from DeveloperWorkItem__c where Id = :wi.Id].DeveloperCost__c); - } + @IsTest + private static void whenInsertingDeveloperWorkItemsThenCalcCost() + { + // Given - data setup in system context, DML in runAs for USER_MODE + WorkOrder__c wo = new WorkOrder__c(); + DeveloperWorkItem__c wi = new DeveloperWorkItem__c(); + wi.CodingHours__c = 20; + wi.CodeReviewingHours__c = 1; + wi.TechnicalDesignHours__c = 10; + + System.runAs(TestDataFactory.getRunAsUser()) + { + fflib_ISObjectUnitOfWork uow = Application.UnitOfWork.newInstance(); + uow.registerNew(wo); + uow.registerNew(wi, DeveloperWorkItem__c.WorkOrder__c, wo); + uow.commitWork(); + } + + // Then + System.assertEquals(3100, [SELECT DeveloperCost__c FROM DeveloperWorkItem__c WHERE Id = :wi.Id].DeveloperCost__c); + } } \ No newline at end of file diff --git a/sfdx-source/apex-common-samplecode/test/classes/domains/OpportunitiesTest.cls b/sfdx-source/apex-common-samplecode/test/classes/domains/OpportunitiesTest.cls index f4cc1ec..d59223d 100644 --- a/sfdx-source/apex-common-samplecode/test/classes/domains/OpportunitiesTest.cls +++ b/sfdx-source/apex-common-samplecode/test/classes/domains/OpportunitiesTest.cls @@ -30,6 +30,12 @@ @IsTest private class OpportunitiesTest { + @TestSetup + static void setup() + { + TestDataFactory.createUserWithSampleAppPermissions(); + } + @IsTest private static void callingApplyDiscountShouldCalcDiscountAndRegisterDirty() { @@ -65,36 +71,46 @@ private class OpportunitiesTest @IsTest private static void testApplyDiscountWithoutOpportunityLines() { - Opportunity opp = new Opportunity ( - Name = 'Test', + Opportunity opp = new Opportunity( + Name = 'Test', Type = 'New Account', StageName = 'Open', - CloseDate = System.today().addMonths(1), - Amount = 100 ); - insert opp; - fflib_SObjectUnitOfWork uow = new fflib_SObjectUnitOfWork( new Schema.SObjectType[] { Opportunity.SObjectType }); - Opportunities opps = new Opportunities(new List { opp }); - opps.applyDiscount(10, uow); - uow.commitWork(); - Opportunity assertOpp = [select Amount from Opportunity where Id = :opp.Id]; - System.assertEquals(90, assertOpp.Amount); + CloseDate = System.today().addMonths(1), + Amount = 100 + ); + insert opp; + + System.runAs(TestDataFactory.getRunAsUser()) + { + fflib_ISObjectUnitOfWork uow = Application.UnitOfWork.newInstance(); + IOpportunities opps = Opportunities.newInstance(new List { opp }); + opps.applyDiscount(10, uow); + uow.commitWork(); + } + + Opportunity assertOpp = [SELECT Amount FROM Opportunity WHERE Id = :opp.Id]; + System.assertEquals(90, assertOpp.Amount); } @IsTest private static void testUpdateAccountOnInsertOfOpportunity() { - Account account = new Account( - Name = 'Test', - Description = null ); + Account account = new Account(Name = 'Test', Description = null); insert account; - Opportunity opp = new Opportunity ( - Name = 'Test', - Type = 'Existing Account', - StageName = 'Open', - CloseDate = System.today().addMonths(1), - AccountId = account.Id ); - insert opp; - Account assertAccount = [select Description from Account where Id = :account.Id]; - System.assertEquals('Last Opportunity Raised ' + System.today(), assertAccount.Description); + + System.runAs(TestDataFactory.getRunAsUser()) + { + Opportunity opp = new Opportunity( + Name = 'Test', + Type = 'Existing Account', + StageName = 'Open', + CloseDate = System.today().addMonths(1), + AccountId = account.Id + ); + insert opp; + } + + Account assertAccount = [SELECT Description FROM Account WHERE Id = :account.Id]; + System.assertEquals('Last Opportunity Raised ' + System.today(), assertAccount.Description); } } \ No newline at end of file diff --git a/sfdx-source/apex-common-samplecode/test/classes/selectors/ProductsSelectorTest.cls b/sfdx-source/apex-common-samplecode/test/classes/selectors/ProductsSelectorTest.cls index 5298527..fa859c5 100644 --- a/sfdx-source/apex-common-samplecode/test/classes/selectors/ProductsSelectorTest.cls +++ b/sfdx-source/apex-common-samplecode/test/classes/selectors/ProductsSelectorTest.cls @@ -27,49 +27,57 @@ @IsTest private class ProductsSelectorTest { + @TestSetup + static void setup() + { + TestDataFactory.createUserWithSampleAppPermissions(); + } + @IsTest private static void testSelectById() { - // Test data - Product2 product = new Product2(); - product.Description = 'Something cool'; - product.Name = 'CoolItem'; - product.IsActive = true; - product.SubscriberField__c = 'My Text Field'; + Product2 product = new Product2( + Description = 'Something cool', + Name = 'CoolItem', + IsActive = true, + SubscriberField__c = 'My Text Field' + ); insert product; - - // Query - List products = - new ProductsSelector(true).selectById(new Set { product.Id }); - - // Assert - System.assertEquals('Something cool', products[0].Description); - System.assertEquals('CoolItem', products[0].Name); - System.assertEquals(true, products[0].IsActive); - System.assertEquals('My Text Field', products[0].SubscriberField__c); + + System.runAs(TestDataFactory.getRunAsUser()) + { + List products = + new ProductsSelector(true).selectById(new Set { product.Id }); + + System.assertEquals('Something cool', products[0].Description); + System.assertEquals('CoolItem', products[0].Name); + System.assertEquals(true, products[0].IsActive); + System.assertEquals('My Text Field', products[0].SubscriberField__c); + } } @IsTest private static void testQueryLocatorById() { - // Test data - Product2 product = new Product2(); - product.Description = 'Something cool'; - product.Name = 'CoolItem'; - product.IsActive = true; - product.SubscriberField__c = 'My Text Field'; + Product2 product = new Product2( + Description = 'Something cool', + Name = 'CoolItem', + IsActive = true, + SubscriberField__c = 'My Text Field' + ); insert product; - - // Query - Database.QueryLocator queryLocator = - new ProductsSelector(true).queryLocatorById(new Set { product.Id }); - - // Assert - Database.QueryLocatorIterator productsIterator = queryLocator.iterator(); - Product2 queriedProduct = (Product2) productsIterator.next(); - System.assertEquals('Something cool', queriedProduct.Description); - System.assertEquals('CoolItem', queriedProduct.Name); - System.assertEquals(true, queriedProduct.IsActive); - System.assertEquals('My Text Field', queriedProduct.SubscriberField__c); + + System.runAs(TestDataFactory.getRunAsUser()) + { + Database.QueryLocator queryLocator = + new ProductsSelector(true).queryLocatorById(new Set { product.Id }); + Database.QueryLocatorIterator productsIterator = queryLocator.iterator(); + Product2 queriedProduct = (Product2) productsIterator.next(); + + System.assertEquals('Something cool', queriedProduct.Description); + System.assertEquals('CoolItem', queriedProduct.Name); + System.assertEquals(true, queriedProduct.IsActive); + System.assertEquals('My Text Field', queriedProduct.SubscriberField__c); + } } } \ No newline at end of file diff --git a/sfdx-source/apex-common-samplecode/test/classes/service/InvoicingServiceTest.cls b/sfdx-source/apex-common-samplecode/test/classes/service/InvoicingServiceTest.cls index fa0de4c..a7c15d3 100644 --- a/sfdx-source/apex-common-samplecode/test/classes/service/InvoicingServiceTest.cls +++ b/sfdx-source/apex-common-samplecode/test/classes/service/InvoicingServiceTest.cls @@ -27,27 +27,33 @@ @IsTest private class InvoicingServiceTest { + @TestSetup + static void setup() + { + TestDataFactory.createUserWithSampleAppPermissions(); + } + @IsTest private static void testService() { - // Create Test Data + // Given: create data in system context (admin runs setup; PricebookEntry insert works) fflib_ISObjectUnitOfWork uow = Application.UnitOfWork.newInstance(); Opportunity opp = new Opportunity(); opp.Name = 'Opportunity'; opp.StageName = 'Open'; opp.CloseDate = System.today(); - uow.registerNew(opp); - for(Integer i=0; i<5; i++) - { + uow.registerNew(opp); + for (Integer i = 0; i < 5; i++) + { Product2 product = new Product2(); product.Name = opp.Name + ' : Product : ' + i; - uow.registerNew(product); + uow.registerNew(product); PricebookEntry pbe = new PricebookEntry(); pbe.UnitPrice = 10; pbe.IsActive = true; pbe.UseStandardPrice = false; pbe.Pricebook2Id = Test.getStandardPricebookId(); - uow.registerNew(pbe, PricebookEntry.Product2Id, product); + uow.registerNew(pbe, PricebookEntry.Product2Id, product); OpportunityLineItem oppLineItem = new OpportunityLineItem(); oppLineItem.Quantity = 1; oppLineItem.TotalPrice = 10; @@ -56,10 +62,11 @@ private class InvoicingServiceTest } uow.commitWork(); - // Call Service - List invoiceIds = InvoicingService.generate(new List { opp.Id }); - - // Assert Invoices - System.assertEquals(1, invoiceIds.size()); + // When: run service as permission-set user (USER_MODE selectors/DML) + System.runAs(TestDataFactory.getRunAsUser()) + { + List invoiceIds = InvoicingService.generate(new List { opp.Id }); + System.assertEquals(1, invoiceIds.size(), 'Should generate one invoice'); + } } } \ No newline at end of file diff --git a/sfdx-source/apex-common-samplecode/test/classes/service/OpportunitiesServiceIntegrationTest.cls b/sfdx-source/apex-common-samplecode/test/classes/service/OpportunitiesServiceIntegrationTest.cls index e75a019..1ebec2b 100644 --- a/sfdx-source/apex-common-samplecode/test/classes/service/OpportunitiesServiceIntegrationTest.cls +++ b/sfdx-source/apex-common-samplecode/test/classes/service/OpportunitiesServiceIntegrationTest.cls @@ -27,10 +27,16 @@ @IsTest private class OpportunitiesServiceIntegrationTest { + @TestSetup + static void setup() + { + TestDataFactory.createUserWithSampleAppPermissions(); + } + @IsTest private static void testServiceClass() { - // Create Opportunity, Lines, Pricebooks and Products + // Create Opportunity, Lines, Pricebooks and Products (system context for inserts) List opps = new List(); List> productsByOpp = new List>(); List> pricebookEntriesByOpp = new List>(); @@ -94,12 +100,15 @@ private class OpportunitiesServiceIntegrationTest } insert allOppLineItems; - // Test - Test.startTest(); - OpportunitiesService.applyDiscounts(new Set { opp.Id }, 10); - Test.stopTest(); + // Test - applyDiscounts uses USER_MODE selectors/DML, must run as user with permission set + System.runAs(TestDataFactory.getRunAsUser()) + { + Test.startTest(); + OpportunitiesService.applyDiscounts(new Set { opp.Id }, 10); + Test.stopTest(); + } // Assert - System.assertEquals(90, [select Amount from Opportunity limit 1][0].Amount); + System.assertEquals(90, [SELECT Amount FROM Opportunity LIMIT 1][0].Amount); } } \ No newline at end of file From 46304550ab6475d04bbaed684261cb7fd0dd97b4 Mon Sep 17 00:00:00 2001 From: Andrew Fawcett Date: Mon, 13 Apr 2026 19:16:42 +0100 Subject: [PATCH 2/2] PR feedback --- README.md | 6 +++--- .../main/classes/selectors/AccountsSelector.cls | 3 +-- .../main/classes/selectors/OpportunitiesSelector.cls | 3 +-- .../main/classes/selectors/OpportunityLineItemsSelector.cls | 3 +-- .../main/classes/selectors/PricebookEntriesSelector.cls | 3 +-- .../main/classes/selectors/PricebooksSelector.cls | 3 +-- .../main/classes/selectors/ProductsSelector.cls | 6 ++---- .../main/classes/selectors/UsersSelector.cls | 3 +-- 8 files changed, 11 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 5119d98..f91bdae 100644 --- a/README.md +++ b/README.md @@ -27,11 +27,11 @@ This repository contains a sample application illustrating the Apex Enterprise P User Mode and CRUD/FLS ---------------------- -This sample enforces field-level security (FLS) by using fflib user mode throughout. Selectors use `setDataAccess(USER_MODE)` for FLS on queries; the UnitOfWork uses `UserModeDML()` via an inner `UserModeUnitOfWorkFactory` in `Application.cls` for FLS on DML. Tests that exercise USER_MODE code use `TestDataFactory` to create a Standard User with the `ApexEnterprisePatternsSampleApp` permission set, then run under `System.runAs(getRunAsUser())`; data setup requiring elevated permissions (e.g. PricebookEntry insert) runs in system context. +This sample enforces field-level security (FLS) by using fflib user mode throughout. Selectors pass `fflib_SObjectSelector.DataAccess.USER_MODE` into the `super(...)` constructor for FLS on queries; the UnitOfWork uses `UserModeDML()` via an inner `UserModeUnitOfWorkFactory` in `Application.cls` for FLS on DML. Tests that exercise USER_MODE code use `TestDataFactory` to create a Standard User with the `ApexEnterprisePatternsSampleApp` permission set, then run under `System.runAs(getRunAsUser())`; data setup requiring elevated permissions (e.g. PricebookEntry insert) runs in system context. | Area | Approach | |------|----------| -| **Selectors** | `super(false); setDataAccess(USER_MODE)` in all selector constructors | +| **Selectors** | `super(false, fflib_SObjectSelector.DataAccess.USER_MODE)` in selector constructors (and `includeFieldSetFields` overload where present) | | **UnitOfWork** | Inner `UserModeUnitOfWorkFactory` in Application.cls; uses `UserModeDML()` | | **Tests** | `TestDataFactory`; `@TestSetup` + `System.runAs(getRunAsUser())` for DML/selector tests | | **Permission set** | `ApexEnterprisePatternsSampleApp` grants field-level access for USER_MODE tests | @@ -46,7 +46,7 @@ More Information on Trailhead There are two Trailhead Modules for Apex Enterprise Patterns: +- [Apex Enterprise Patterns - Separation of Concerns](https://trailhead.salesforce.com/en/content/learn/modules/apex_patterns_sl/apex_patterns_sl_soc) - [Apex Enterprise Patterns - Service Layer](https://trailhead.salesforce.com/en/content/learn/modules/apex_patterns_sl) - - [Separation of Concerns](https://trailhead.salesforce.com/en/content/learn/modules/apex_patterns_sl/apex_patterns_sl_soc) - [Apex Enterprise Patterns - Domain and Selector Layer](https://trailhead.salesforce.com/en/content/learn/modules/apex_patterns_dsl) diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/AccountsSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/AccountsSelector.cls index 50985b5..1dd1876 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/AccountsSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/AccountsSelector.cls @@ -37,8 +37,7 @@ public class AccountsSelector extends fflib_SObjectSelector public AccountsSelector() { - super(false); - setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + super(false, fflib_SObjectSelector.DataAccess.USER_MODE); } public List getSObjectFieldList() diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunitiesSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunitiesSelector.cls index 11de9a2..f79980f 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunitiesSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunitiesSelector.cls @@ -34,8 +34,7 @@ public class OpportunitiesSelector extends fflib_SObjectSelector public OpportunitiesSelector() { - super(false); - setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + super(false, fflib_SObjectSelector.DataAccess.USER_MODE); } public List getSObjectFieldList() diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunityLineItemsSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunityLineItemsSelector.cls index c4f81e8..bd799a4 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunityLineItemsSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/OpportunityLineItemsSelector.cls @@ -34,8 +34,7 @@ public class OpportunityLineItemsSelector extends fflib_SObjectSelector public OpportunityLineItemsSelector() { - super(false); - setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + super(false, fflib_SObjectSelector.DataAccess.USER_MODE); } public List getSObjectFieldList() diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebookEntriesSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebookEntriesSelector.cls index ee0e210..c010aff 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebookEntriesSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebookEntriesSelector.cls @@ -34,8 +34,7 @@ public class PricebookEntriesSelector extends fflib_SObjectSelector public PricebookEntriesSelector() { - super(false); - setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + super(false, fflib_SObjectSelector.DataAccess.USER_MODE); } public List getSObjectFieldList() diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebooksSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebooksSelector.cls index 7aef90a..20594c2 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebooksSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/PricebooksSelector.cls @@ -34,8 +34,7 @@ public class PricebooksSelector extends fflib_SObjectSelector public PricebooksSelector() { - super(false); - setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + super(false, fflib_SObjectSelector.DataAccess.USER_MODE); } public List getSObjectFieldList() diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/ProductsSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/ProductsSelector.cls index 7a59aca..8d8b60a 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/ProductsSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/ProductsSelector.cls @@ -34,14 +34,12 @@ public class ProductsSelector extends fflib_SObjectSelector public ProductsSelector() { - super(false); - setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + super(false, fflib_SObjectSelector.DataAccess.USER_MODE); } public ProductsSelector(Boolean includeFieldSetFields) { - super(includeFieldSetFields); - setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + super(includeFieldSetFields, fflib_SObjectSelector.DataAccess.USER_MODE); } public List getSObjectFieldList() diff --git a/sfdx-source/apex-common-samplecode/main/classes/selectors/UsersSelector.cls b/sfdx-source/apex-common-samplecode/main/classes/selectors/UsersSelector.cls index db56816..36dd2c3 100644 --- a/sfdx-source/apex-common-samplecode/main/classes/selectors/UsersSelector.cls +++ b/sfdx-source/apex-common-samplecode/main/classes/selectors/UsersSelector.cls @@ -37,8 +37,7 @@ public class UsersSelector extends fflib_SObjectSelector public UsersSelector() { - super(false); - setDataAccess(fflib_SObjectSelector.DataAccess.USER_MODE); + super(false, fflib_SObjectSelector.DataAccess.USER_MODE); } public List getSObjectFieldList()