/**
* Create the test data, ideally run 1 by 1 to prevent govenor limits
* Run accounts and contacts first. Cases and opportunities require both
*/
upsertAccounts(0,10);
upsertContacts(0,10,0,10);
upsertCases(0,10,0,10);
upsertOpportunities(0,10,0,10);
/**
* @description Method to create Basic Test Contacts
*/
public void upsertAccounts(Integer accountOffset, Integer numberOfAccounts){
// List to store the new cases
Account[] accounts = new Account[]{};
// Loop for to create all top level accounts
for (Integer i = accountOffset; i < numberOfAccounts; i++) {
// A postfix to keep track of what item we're dealing with
String postfix = String.valueOf(i+1).leftPad(4,'0');
// Create a new account
accounts.add(new Account(
Name = 'LWT - Test - Account - ' + postfix,
UUID__c = UUID.randomUUID().toString(),
External_Id__c = 'ACC - ' + postfix
));
}
upsert accounts External_Id__c;
}
/**
* @description Method to create Basic Test Contacts
*/
public void upsertContacts(Integer accountOffset, Integer numberOfAccounts, Integer contactOffset,Integer numberOfContacts){
// Get the account and contact data
Account[] accounts = [SELECT Id FROM Account WHERE Name LIKE 'LWT - Test - %' ORDER BY Name ASC LIMIT :numberOfAccounts];
// Basic error handling
if(numberOfAccounts != accounts.size()){throw new StringException('Number of accounts does not match number returned by the query');}
// List to store the new contacts
Contact[] contacts = new Contact[]{};
// Iterate the top level accounts
for(Integer i=accountOffset; i<numberOfAccounts; i++){
// Create a number of contacts for each account
for(Integer j=contactOffset; j < numberOfContacts; j++){
// Postfix to keep track of where we are
String postfix = String.valueOf(i+1).leftPad(4,'0') + ' - ' + String.valueOf(j+1).leftPad(4,'0');
// Add a new contact to the list
contacts.add(new Contact(
AccountId = accounts[i].Id,
FirstName = 'LWT - Test - ' + postfix,
LastName = 'Contact - ' + postfix,
UUID__c = UUID.randomUUID().toString(),
External_Id__c = 'CON - ' + postfix
));
}
}
upsert contacts External_Id__c;
}
/**
* @description Method to create Basic Test Cases
*/
public void upsertCases(Integer offset, Integer numberOfAccounts, Integer contactOffset, Integer numberOfContacts){
// Get the account and contact data
Account[] accounts = [SELECT Id FROM Account WHERE Name LIKE 'LWT - Test - %' ORDER BY Name ASC LIMIT :numberOfAccounts];
Contact[] contacts = [SELECT Id FROM Contact WHERE Name LIKE 'LWT - Test - %' ORDER BY Name ASC LIMIT :numberOfContacts];
// Basic error handling
if(numberOfAccounts != accounts.size()){throw new StringException('Number of accounts does not match number returned by the query');}
if(numberOfContacts != contacts.size()){throw new StringException('Number of contacts does not match number returned by the query');}
// List to store the new cases
Case[] cases = new Case[]{};
// Iterate the top level accounts
for(Integer i=offset; i<numberOfAccounts; i++){
// Create a case for each contact in the account
for(Integer j=offset; j<numberOfContacts; j++){
// Postfix to keep track of where we are
String postfix = String.valueOf(i+1).leftPad(4,'0') + ' - ' + String.valueOf(j+1).leftPad(4,'0');
// Add a new case
cases.add(new Case(
AccountId = accounts[i].Id,
ContactId = contacts[j].Id,
Subject = 'LWT - Test - Case - ' + postfix,
UUID__c = UUID.randomUUID().toString(),
External_Id__c = 'CSE - ' + postfix
));
}
}
upsert cases External_Id__c;
}
/**
* @description Method to create Basic Test Opportunities
*/
public void upsertOpportunities(Integer offset, Integer numberOfAccounts, Integer contactOffset, Integer numberOfContacts){
// Get the account and contact data
Account[] accounts = [SELECT Id FROM Account WHERE Name LIKE 'LWT - Test - %' ORDER BY Name ASC LIMIT :numberOfAccounts];
Contact[] contacts = [SELECT Id FROM Contact WHERE Name LIKE 'LWT - Test - %' ORDER BY Name ASC LIMIT :numberOfContacts];
// Basic error handling
if(numberOfAccounts != accounts.size()){throw new StringException('Number of accounts does not match number returned by the query');}
if(numberOfContacts != contacts.size()){throw new StringException('Number of contacts does not match number returned by the query');}
// List to store the new cases
Opportunity[] opportunities = new Opportunity[]{};
// Iterate the top level accounts
for(Integer i=offset; i<numberOfAccounts; i++){
// Create an opportunity for each contact in the account
for(Integer j=offset; j<numberOfContacts; j++){
// Postfix to keep track of where we are
String postfix = String.valueOf(i+1).leftPad(4,'0') + ' - ' + String.valueOf(j+1).leftPad(4,'0');
// Add a new opportunity to the list
opportunities.add(new Opportunity(
AccountId = accounts[i].Id,
ContactId = contacts[j].Id,
Name = 'LWT - Test - Opportunity - ' + postfix,
StageName = (Math.mod(j,2) == 0) ? 'New' : 'Closed/Won',
CloseDate = Date.today().addDays(j),
UUID__c = UUID.randomUUID().toString(),
External_Id__c = 'OPP - ' + postfix
));
}
}
upsert opportunities External_Id__c;
}