Skip to content

Commit a7689f7

Browse files
Merge branch 'master' into FixTyposAndStyling
2 parents d007803 + 4c4ce5f commit a7689f7

File tree

11 files changed

+79
-32
lines changed

11 files changed

+79
-32
lines changed

.github/workflows/deploy.and.test.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: Create a Scratch Org, Push Source and Run Apex Tests
2+
3+
on:
4+
push:
5+
pull_request_target:
6+
7+
jobs:
8+
build:
9+
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- uses: actions/checkout@v2
14+
with:
15+
ref: ${{github.event.pull_request.head.ref}}
16+
repository: ${{github.event.pull_request.head.repo.full_name}}
17+
- name: Install SFDX CLI and authorize DevHub
18+
uses: apex-enterprise-patterns/setup-sfdx@v1 #We're using a fork of https://github.com/sfdx-actions/setup-sfdx for safety
19+
with:
20+
sfdx-auth-url: ${{ secrets.DEVHUB_SFDXURL }}
21+
- run: sfdx force:config:set defaultdevhubusername=SFDX-ENV -g #Even though the setup-sfdx action uses --setdefaultdevhubusername, it doesn't seem to stick since it uses --setdefaultusername so we brute force it here
22+
- run: echo y | sfdx plugins:install shane-sfdx-plugins
23+
- run: sfdx force:org:create -f config/project-scratch-def.json --setdefaultusername -d 1
24+
- run: sfdx shane:github:src:install -c -g apex-enterprise-patterns -r fflib-apex-mocks -p sfdx-source/apex-mocks
25+
- run: sfdx shane:github:src:install -c -g apex-enterprise-patterns -r fflib-apex-common -p sfdx-source/apex-common
26+
- run: sfdx force:source:push
27+
- run: sfdx force:apex:test:run -w 5
28+
- name: Destroy scratch org
29+
run: sfdx force:org:delete -p
30+
if: always()
31+

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ Referenced Packages/
3030
.vscode/
3131
.history/
3232

33+
# IntelliJ IDE Related
34+
.idea/
35+
*.iml
36+
*.iws
37+
IlluminatedCloud/
38+
.project.license
39+
3340
# SFDX Related
3441
.sfdx/
3542

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
FFLib Apex Common Sample
22
========================
3+
![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)
34

45
**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
56

sfdx-source/apex-common-samplecode/main/classes/Application.cls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public class Application
5252
public static final fflib_Application.SelectorFactory Selector =
5353
new fflib_Application.SelectorFactory(
5454
new Map<SObjectType, Type> {
55+
Account.SObjectType => AccountsSelector.class,
5556
Opportunity.SObjectType => OpportunitiesSelector.class,
5657
OpportunityLineItem.SObjectType => OpportunityLineItemsSelector.class,
5758
PricebookEntry.SObjectType => PricebookEntriesSelector.class,

sfdx-source/apex-common-samplecode/main/classes/domains/AbstractChargeable.cls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public with sharing abstract class AbstractChargeable extends fflib_SObjectDomai
5454

5555
Integer hoursWorkedRecordIdx = 0;
5656

57-
for(SObject record : Records)
57+
for(SObject record : this.records)
5858
{
5959
record.put(costOfHoursWorkedField, hoursWorked[hoursWorkedRecordIdx++] * 100);
6060
}

sfdx-source/apex-common-samplecode/main/classes/domains/Accounts.cls

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,20 @@ public with sharing class Accounts extends fflib_SObjectDomain
4242
super(sObjectList);
4343
}
4444

45-
public void updateOpportunityActivity(fflib_SObjectUnitOfWork uow)
45+
public void updateOpportunityActivity(fflib_ISObjectUnitOfWork uow)
4646
{
47-
for(Account account : (List<Account>) Records)
47+
for(Account account : (List<Account>) this.records)
4848
{
4949
account.Description = 'Last Opportunity Raised ' + System.today();
5050
uow.registerDirty(account);
5151
}
5252
}
53+
54+
public class Constructor implements fflib_SObjectDomain.IConstructable
55+
{
56+
public fflib_SObjectDomain construct(List<SObject> sObjectList)
57+
{
58+
return new Accounts(sObjectList);
59+
}
60+
}
5361
}

sfdx-source/apex-common-samplecode/main/classes/domains/DeveloperWorkItems.cls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public with sharing class DeveloperWorkItems extends AbstractChargeable
5252
{
5353
// Calculate the hours worked for each record
5454
List<Integer> hoursWorked = new List<Integer>();
55-
for(DeveloperWorkItem__c workItem : (List<DeveloperWorkItem__c>) Records)
55+
for(DeveloperWorkItem__c workItem : (List<DeveloperWorkItem__c>) this.records)
5656
{
5757
// This calculation is intentionally simplistic for illustration purposes
5858
hoursWorked.add((Integer)

sfdx-source/apex-common-samplecode/main/classes/domains/IAccounts.cls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,5 @@
2626

2727
public interface IAccounts extends fflib_ISObjectDomain
2828
{
29-
void updateOpportunityActivity(fflib_SObjectUnitOfWork uow);
29+
void updateOpportunityActivity(fflib_ISObjectUnitOfWork uow);
3030
}

sfdx-source/apex-common-samplecode/main/classes/domains/Opportunities.cls

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public class Opportunities extends fflib_SObjectDomain
4646
public void generate(InvoicingService.InvoiceFactory invoiceFactory)
4747
{
4848
// Utilise InvoiceFactory to create invoices from Opportunity details
49-
for(Opportunity opportunity : (List<Opportunity>) Records)
49+
for(Opportunity opportunity : (List<Opportunity>) this.records)
5050
{
5151
InvoicingService.Invoice invoice = new InvoicingService.Invoice();
5252
invoice.Account = opportunity.AccountId;
@@ -69,7 +69,7 @@ public class Opportunities extends fflib_SObjectDomain
6969
public override void onApplyDefaults()
7070
{
7171
// Apply defaults to Opportunities
72-
for(Opportunity opportunity : (List<Opportunity>) Records)
72+
for(Opportunity opportunity : (List<Opportunity>) this.records)
7373
{
7474
opportunity.DiscountType__c = OpportunitySettings__c.getInstance().DiscountType__c;
7575
}
@@ -78,7 +78,7 @@ public class Opportunities extends fflib_SObjectDomain
7878
public override void onValidate()
7979
{
8080
// Validate Opportunities
81-
for(Opportunity opp : (List<Opportunity>) Records)
81+
for(Opportunity opp : (List<Opportunity>) this.records)
8282
{
8383
if(opp.Type!=null && opp.Type.startsWith('Existing') && opp.AccountId == null)
8484
{
@@ -90,7 +90,7 @@ public class Opportunities extends fflib_SObjectDomain
9090
public override void onValidate(Map<Id,SObject> existingRecords)
9191
{
9292
// Validate changes to Opportunities
93-
for(Opportunity opp : (List<Opportunity>) Records)
93+
for(Opportunity opp : (List<Opportunity>) this.records)
9494
{
9595
Opportunity existingOpp = (Opportunity) existingRecords.get(opp.Id);
9696
if(opp.Type != existingOpp.Type)
@@ -103,20 +103,26 @@ public class Opportunities extends fflib_SObjectDomain
103103
public override void onAfterInsert()
104104
{
105105
// Related Accounts
106-
List<Id> accountIds = new List<Id>();
107-
for (Opportunity opp : (List<Opportunity>) getRecords())
106+
Set<Id> accountIds = new Set<Id>();
107+
for(Opportunity opp : (List<Opportunity>) this.records)
108108
{
109-
if (opp.AccountId != null)
109+
if( opp.AccountId != null)
110110
{
111111
accountIds.add(opp.AccountId);
112112
}
113113
}
114-
115-
// Update last Opportunity activity on the related Accounts (via the Accounts domain class)
116-
fflib_SObjectUnitOfWork uow = new fflib_SObjectUnitOfWork(new Schema.SObjectType[] { Account.SObjectType });
117-
Accounts accounts = new Accounts([SELECT Id, Name FROM Account WHERE Id IN :accountIds]);
118-
accounts.updateOpportunityActivity(uow);
119-
uow.commitWork();
114+
115+
if ( ! accountIds.isEmpty() )
116+
{
117+
// Update last Opportunity activity on the related Accounts (via the Accounts domain class)
118+
fflib_ISObjectUnitOfWork uow = new fflib_SObjectUnitOfWork(new Schema.SObjectType[] { Account.SObjectType });
119+
120+
IAccounts accounts = (IAccounts)Application.Domain.newInstance( accountIds );
121+
122+
accounts.updateOpportunityActivity(uow);
123+
124+
uow.commitWork();
125+
}
120126
}
121127

122128
public void applyDiscount(Decimal discountPercentage, fflib_ISObjectUnitOfWork uow)
@@ -128,11 +134,11 @@ public class Opportunities extends fflib_SObjectDomain
128134
List<OpportunityLineItem> linesToApplyDiscount = new List<OpportunityLineItem>();
129135

130136
// Apply discount
131-
for(Opportunity opportunity : (List<Opportunity>) Records)
137+
for(Opportunity opportunity : (List<Opportunity>) this.records)
132138
{
133139
// Apply to the Opportunity Amount?
134-
if(opportunity.OpportunityLineItems == null ||
135-
opportunity.OpportunityLineItems.size()==0)
140+
if(opportunity.OpportunityLineItems == null
141+
|| opportunity.OpportunityLineItems.isEmpty())
136142
{
137143
// Adjust the Amount on the Opportunity if no lines
138144
opportunity.Amount = opportunity.Amount * factor;
@@ -146,8 +152,8 @@ public class Opportunities extends fflib_SObjectDomain
146152
}
147153

148154
// Apply discount to lines
149-
IOpportunityLineItems lineItems =
150-
(IOpportunityLineItems) Application.Domain.newInstance(linesToApplyDiscount);
155+
IOpportunityLineItems lineItems = (IOpportunityLineItems) Application.Domain.newInstance(linesToApplyDiscount);
156+
151157
lineItems.applyDiscount(this, discountPercentage, uow);
152158
}
153159

sfdx-source/apex-common-samplecode/main/classes/domains/OpportunityLineItems.cls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public with sharing class OpportunityLineItems extends fflib_SObjectDomain
5252
Decimal factor = Opportunities.calculateDiscountFactor(discountPercentage);
5353

5454
// Adjust UnitPrice of each line according to Discount Type of Opportunity
55-
for(OpportunityLineItem line : (List<OpportunityLineItem>) Records)
55+
for(OpportunityLineItem line : (List<OpportunityLineItem>) this.records)
5656
{
5757
// Skip products that have not been approved for discounting
5858
Opportunity opportunity = opportunitiesById.get(line.OpportunityId);

0 commit comments

Comments
 (0)