Skip to content
This repository has been archived by the owner on Jun 3, 2024. It is now read-only.

Commit

Permalink
Changed DML.cls method names & eliminated the return types
Browse files Browse the repository at this point in the history
The naming convention wasn't my favorite and I think returning sobject(s) unnecessarily will just encourage people to write code to cast the return values & update their variables, which is unnecessary
  • Loading branch information
jongpie committed Jun 3, 2017
1 parent 3588cfc commit 24fbf29
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 80 deletions.
55 changes: 31 additions & 24 deletions src/classes/DML.cls
Original file line number Diff line number Diff line change
Expand Up @@ -4,52 +4,59 @@
*************************************************************************************************/
public virtual class DML extends NebulaCore implements IDML {

public virtual SObject doInsert(SObject record) { return this.doInsert(new List<SObject>{record})[0];}
public virtual List<SObject> doInsert(List<SObject> records) {
public virtual void insertRecords(SObject record) {
this.insertRecords(new List<SObject>{record});
}

public virtual void insertRecords(List<SObject> records) {
Database.insert(records);
return records;
}

public virtual SObject doUpdate(SObject record) { return this.doUpdate(new List<SObject>{record})[0]; }
public virtual List<SObject> doUpdate(List<SObject> records) {
public virtual void updateRecords(SObject record) {
this.updateRecords(new List<SObject>{record});
}

public virtual void updateRecords(List<SObject> records) {
Database.update(records);
return records;
}

public virtual SObject doUpsert(SObject record) {
public virtual void upsertRecords(SObject record) {
// Salesforce will only allow upsert calls for SObjects if a declared-type list is passed in.
// This is fine for the bulk method, where we can assume the caller is passing in an explicit list, but for a single record,
// the only way to successfully perform the upsert is to dynamically spin up a list of the SObject's type
String listType = 'List<' + record.getSObjectType() + '>';
List<SObject> castRecords = (List<SObject>)Type.forName(listType).newInstance();
castRecords.add(record);
return this.doUpsert(castRecords)[0];
this.upsertRecords(castRecords);
}

public virtual List<SObject> doUpsert(List<SObject> records) {
public virtual void upsertRecords(List<SObject> records) {
Database.upsert(records);
return records;
}

public virtual SObject doUndelete(SObject record) { return this.doUnDelete(new List<SObject>{record})[0]; }
public virtual List<SObject> doUndelete(List<SObject> records) {
public virtual void undeleteRecords(SObject record) {
this.undeleteRecords(new List<SObject>{record});
}

public virtual void undeleteRecords(List<SObject> records) {
Database.undelete(records);
return records;
}

public virtual void doDelete(SObject record) { this.doDelete(new List<SObject>{record}); }
public virtual void doDelete(List<SObject> records) {
if(!records.isEmpty()) {
Database.delete(records);
}
public virtual void deleteRecords(SObject record) {
this.deleteRecords(new List<SObject>{record});
}

public virtual void deleteRecords(List<SObject> records) {
Database.delete(records);
}

public virtual void hardDeleteRecords(SObject record) {
this.hardDeleteRecords(new List<SObject>{record});
}

public virtual void doHardDelete(SObject record) { this.doHardDelete(new List<SObject>{record}); }
public virtual void doHardDelete(List<SObject> records) {
this.doDelete(records);
if(!records.isEmpty()) {
Database.emptyRecycleBin(records);
}
public virtual void hardDeleteRecords(List<SObject> records) {
this.deleteRecords(records);
if(!records.isEmpty()) Database.emptyRecycleBin(records);
}

}
48 changes: 32 additions & 16 deletions src/classes/DMLMock.cls
Original file line number Diff line number Diff line change
Expand Up @@ -8,38 +8,54 @@ public virtual class DMLMock implements IDML {
if(!Test.isRunningTest()) throw new Exceptions.InvalidOperationException('DMLMock can only be called during tests!');
}

public SObject doInsert(SObject record) { return this.doInsert(new List<SObject>{record})[0]; }
public List<SObject> doInsert(List<SObject> recordList) {
public void insertRecords(SObject record) {
this.insertRecords(new List<SObject>{record});
}

public void insertRecords(List<SObject> recordList) {
TestingUtils.generateIds(recordList);
TestingUtils.insertedRecords.addAll(recordList);
return recordList;
}

public SObject doUpdate(SObject record) { return this.doUpdate(new List<SObject>{record})[0]; }
public List<SObject> doUpdate(List<SObject> recordList) {
public void updateRecords(SObject record) {
this.updateRecords(new List<SObject>{record});
}

public void updateRecords(List<SObject> recordList) {
TestingUtils.updatedRecords.addAll(recordList);
return recordList;
}

public SObject doUpsert(SObject record) { return this.doUpsert(new List<SObject>{record})[0]; }
public List<SObject> doUpsert(List<SObject> recordList) {
public void upsertRecords(SObject record) {
this.upsertRecords(new List<SObject>{record});
}

public void upsertRecords(List<SObject> recordList) {
TestingUtils.generateIds(recordList);
TestingUtils.upsertedRecords.addAll(recordList);
return recordList;
}

public SObject doUndelete(SObject record) { return this.doUndelete(new List<SObject>{record})[0]; }
public List<SObject> doUndelete(List<SObject> recordList) {
public void undeleteRecords(SObject record) {
this.undeleteRecords(new List<SObject>{record});
}

public void undeleteRecords(List<SObject> recordList) {
TestingUtils.undeletedRecords.addAll(recordList);
return recordList;
}

public void doDelete(SObject record) { this.doDelete(new List<SObject>{record}); }
public void doDelete(List<SObject> recordList) {
public void deleteRecords(SObject record) {
this.deleteRecords(new List<SObject>{record});
}

public void deleteRecords(List<SObject> recordList) {
if(recordList != null) TestingUtils.deletedRecords.addAll(recordList);
}

public void doHardDelete(SObject record) { this.doHardDelete(new List<SObject>{record}); }
public void doHardDelete(List<SObject> recordList) { this.doDelete(recordList); }
public void hardDeleteRecords(SObject record) {
this.hardDeleteRecords(new List<SObject>{record});
}

public void hardDeleteRecords(List<SObject> recordList) {
this.deleteRecords(recordList);
}

}
14 changes: 7 additions & 7 deletions src/classes/DMLMock_Tests.cls
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ private class DMLMock_Tests {
@isTest
static void it_should_fake_dml_insert() {
Test.startTest();
dmlRepo.doInsert(con);
dmlRepo.insertRecords(con);
Test.stopTest();

System.assert(TestingUtils.insertedRecords.size() > 0);
Expand All @@ -20,7 +20,7 @@ private class DMLMock_Tests {
@isTest
static void it_should_fake_dml_update() {
Test.startTest();
dmlRepo.doUpdate(con);
dmlRepo.updateRecords(con);
Test.stopTest();

System.assert(!TestingUtils.updatedRecords.isEmpty());
Expand All @@ -29,7 +29,7 @@ private class DMLMock_Tests {
@isTest
static void it_should_fake_dml_upsert() {
Test.startTest();
dmlRepo.doUpsert(con);
dmlRepo.upsertRecords(con);
Test.stopTest();

System.assert(!TestingUtils.upsertedRecords.isEmpty());
Expand All @@ -38,7 +38,7 @@ private class DMLMock_Tests {
@isTest
static void it_should_fake_dml_delete() {
Test.startTest();
dmlRepo.doDelete(con);
dmlRepo.deleteRecords(con);
Test.stopTest();

System.assert(!TestingUtils.deletedRecords.isEmpty());
Expand All @@ -47,7 +47,7 @@ private class DMLMock_Tests {
@isTest
static void it_should_fake_dml_hard_delete() {
Test.startTest();
dmlRepo.doHardDelete(con);
dmlRepo.hardDeleteRecords(con);
Test.stopTest();

System.assert(!TestingUtils.deletedRecords.isEmpty());
Expand All @@ -56,7 +56,7 @@ private class DMLMock_Tests {
@isTest
static void it_should_fake_dml_undelete() {
Test.startTest();
dmlRepo.doUndelete(con);
dmlRepo.undeleteRecords(con);
Test.stopTest();

System.assert(!TestingUtils.undeletedRecords.isEmpty());
Expand All @@ -68,7 +68,7 @@ private class DMLMock_Tests {
l = (Lead)TestingUtils.setReadOnlyField(l, Schema.Lead.IsConverted, true);

Test.startTest();
dmlRepo.doUpdate(l);
dmlRepo.updateRecords(l);
Test.stoptest();

SObject record = TestingUtils.updatedRecords[0];
Expand Down
14 changes: 7 additions & 7 deletions src/classes/DML_Tests.cls
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ private class DML_Tests {
static void it_should_do_dml_insert() {

Test.startTest();
dml.doInsert(contact);
dml.insertRecords(contact);
Test.stopTest();

System.assert(contact.Id != null);
Expand All @@ -25,7 +25,7 @@ private class DML_Tests {
contact.FirstName = 'Harry';

Test.startTest();
dml.doUpdate(contact);
dml.updateRecords(contact);
Test.stopTest();

System.assert(contact.FirstName == 'Harry');
Expand All @@ -38,7 +38,7 @@ private class DML_Tests {
contact.FirstName = 'Harry';

Test.startTest();
dml.doUpsert(contact);
dml.upsertRecords(contact);
Test.stopTest();

System.assert(contact.FirstName == 'Harry');
Expand All @@ -49,7 +49,7 @@ private class DML_Tests {
insert contact;

Test.startTest();
dml.doDelete(contact);
dml.deleteRecords(contact);
List<Contact> deletedContacts = [SELECT Id, IsDeleted FROM Contact ALL ROWS];
Test.stopTest();

Expand All @@ -61,7 +61,7 @@ private class DML_Tests {
insert contact;

Test.startTest();
dml.doHardDelete(contact);
dml.hardDeleteRecords(contact);
List<Contact> deletedContacts = [SELECT Id, IsDeleted FROM Contact ALL ROWS];
Test.stopTest();

Expand All @@ -73,8 +73,8 @@ private class DML_Tests {
insert contact;

Test.startTest();
dml.doDelete(contact);
dml.doUndelete(contact);
dml.deleteRecords(contact);
dml.undeleteRecords(contact);
Test.stopTest();

List<Contact> notDeletedContacts = [SELECT Id FROM Contact];
Expand Down
25 changes: 12 additions & 13 deletions src/classes/IDML.cls
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,17 @@
*************************************************************************************************/
public interface IDML {

SObject doInsert(SObject record);
List<SObject> doInsert(List<SObject> recordList);
SObject doUpdate(SObject record);
List<SObject> doUpdate(List<SObject> recordList);
SObject doUpsert(SObject record);
List<SObject> doUpsert(List<SObject> recordList);
SObject doUndelete(SObject record);
List<SObject> doUndelete(List<SObject> recordList);

void doDelete(SObject record);
void doDelete(List<SObject> recordList);
void doHardDelete(SObject record);
void doHardDelete(List<SObject> recordList);
void insertRecords(SObject record);
void insertRecords(List<SObject> recordList);
void updateRecords(SObject record);
void updateRecords(List<SObject> recordList);
void upsertRecords(SObject record);
void upsertRecords(List<SObject> recordList);
void undeleteRecords(SObject record);
void undeleteRecords(List<SObject> recordList);
void deleteRecords(SObject record);
void deleteRecords(List<SObject> recordList);
void hardDeleteRecords(SObject record);
void hardDeleteRecords(List<SObject> recordList);

}
21 changes: 8 additions & 13 deletions src/classes/SObjectRepository_Tests.cls
Original file line number Diff line number Diff line change
Expand Up @@ -33,23 +33,18 @@ private class SObjectRepository_Tests {
.getFirstQueryResult();
}

public override SObject doUpsert(SObject record) {
public override void upsertRecords(SObject record) {
Account account = (Account)record;
upsert account;

return account;
}

public override List<SObject> doUpsert(List<SObject> recordList) {
public override void upsertRecords(List<SObject> recordList) {
List<Account> accountList = (List<Account>)recordList;
upsert accountList;

return accountList;
}

public override SObject doUpdate(SObject record) {
public override void updateRecords(SObject record) {
TestingUtils.updatedRecords.add(record);
return record;
}
}

Expand Down Expand Up @@ -244,7 +239,7 @@ private class SObjectRepository_Tests {
System.assertEquals(null, account.Id);

Test.startTest();
new SObjectRepository_Tests.AccountRepository().doInsert(account);
new SObjectRepository_Tests.AccountRepository().insertRecords(account);
Test.stopTest();

System.assertNotEquals(null, account.Id);
Expand All @@ -260,7 +255,7 @@ private class SObjectRepository_Tests {
Datetime originalLastModifiedDate = existingAccount.LastModifiedDate;

Test.startTest();
new SObjectRepository_Tests.AccountRepository().doUpdate(existingAccount);
new SObjectRepository_Tests.AccountRepository().updateRecords(existingAccount);
Test.stopTest();

System.assert((Account)TestingUtils.updatedRecords[0] == existingAccount);
Expand All @@ -272,7 +267,7 @@ private class SObjectRepository_Tests {
System.assertEquals(false, existingAccount.IsDeleted);

Test.startTest();
new SObjectRepository_Tests.AccountRepository().doDelete(existingAccount);
new SObjectRepository_Tests.AccountRepository().deleteRecords(existingAccount);
Test.stopTest();

existingAccount = [SELECT Id, IsDeleted FROM Account WHERE Id = :existingAccount.Id ALL ROWS];
Expand All @@ -285,7 +280,7 @@ private class SObjectRepository_Tests {
System.assertEquals(false, existingAccount.IsDeleted);

Test.startTest();
new SObjectRepository_Tests.AccountRepository().doHardDelete(existingAccount);
new SObjectRepository_Tests.AccountRepository().hardDeleteRecords(existingAccount);
Test.stopTest();

List<Account> existingAccountList = [SELECT Id, IsDeleted FROM Account WHERE Id = :existingAccount.Id ALL ROWS];
Expand All @@ -303,7 +298,7 @@ private class SObjectRepository_Tests {
System.assertEquals(true, existingAccount.IsDeleted);

Test.startTest();
new SObjectRepository_Tests.AccountRepository().doUndelete(existingAccount);
new SObjectRepository_Tests.AccountRepository().undeleteRecords(existingAccount);
Test.stopTest();

existingAccount = [SELECT Id, IsDeleted FROM Account WHERE Id = :existingAccount.Id ALL ROWS];
Expand Down

0 comments on commit 24fbf29

Please sign in to comment.