You need to sign in to do that
Don't have an account?
Next Activity Apex Test Help
I am working on an apex trigger/class to display the next activity subject & date on the account object. The code works fine, and a manual test will work, but when I run my apex tests, it says something isn't working. Have I written my test code wrong?
Here is the method:
public static void updateAcCountsAndActivities(Set<ID> accountIds){
//Query all records and related activities
List<Account> Accounts = [SELECT
Id,
TP_NextActivityDate__c,
TP_NextActivitySubject__c,
(SELECT Id, Subject, ActivityDate FROM OpenActivities WHERE ActivityDate >= TODAY AND ActivityDate <> NULL order by ActivityDate Desc LIMIT 1)
FROM Account WHERE ID IN :AccountIds];
List<Account> updateAccounts = new List<Account>();
for (Account a : Accounts) {
//Prepare comparison variables
String NextActivitySubject = a.TP_NextActivitySubject__c;
Date NextActivityDate = a.TP_NextActivityDate__c;
//Compare variables with record
if (a.OpenActivities.size() > 0) {
for (OpenActivity act : a.OpenActivities) {
NextActivityDate = act.ActivityDate;
NextActivitySubject = act.Subject;
}
} else {
NextActivityDate = null;
NextActivitySubject = null;
}
//Update fields to match variables
if ( a.TP_NextActivityDate__c != NextActivityDate || a.TP_NextActivitySubject__c != NextActivitySubject){
a.TP_NextActivityDate__c = NextActivityDate;
a.TP_NextActivitySubject__c = NextActivitySubject;
updateAccounts.add(a);
}
}
//Commit the changes
if(updateAccounts.size()>0) {
try{
update updateAccounts;
}
catch (Exception e) {
}
}
}
//Query all records and related activities
List<Account> Accounts = [SELECT
Id,
TP_NextActivityDate__c,
TP_NextActivitySubject__c,
(SELECT Id, Subject, ActivityDate FROM OpenActivities WHERE ActivityDate >= TODAY AND ActivityDate <> NULL order by ActivityDate Desc LIMIT 1)
FROM Account WHERE ID IN :AccountIds];
List<Account> updateAccounts = new List<Account>();
for (Account a : Accounts) {
//Prepare comparison variables
String NextActivitySubject = a.TP_NextActivitySubject__c;
Date NextActivityDate = a.TP_NextActivityDate__c;
//Compare variables with record
if (a.OpenActivities.size() > 0) {
for (OpenActivity act : a.OpenActivities) {
NextActivityDate = act.ActivityDate;
NextActivitySubject = act.Subject;
}
} else {
NextActivityDate = null;
NextActivitySubject = null;
}
//Update fields to match variables
if ( a.TP_NextActivityDate__c != NextActivityDate || a.TP_NextActivitySubject__c != NextActivitySubject){
a.TP_NextActivityDate__c = NextActivityDate;
a.TP_NextActivitySubject__c = NextActivitySubject;
updateAccounts.add(a);
}
}
//Commit the changes
if(updateAccounts.size()>0) {
try{
update updateAccounts;
}
catch (Exception e) {
}
}
}
Here is a failing test:
public static testMethod void validateAccountCountsAndActivities() {
//Create Account
Account ac = new Account(
Name='Test Account',
Initial_Lead_Source__c='Cold Call',
Initial_Lead_Source_Detail__c='Cold Call',
Account_Type__c='Prospect',
Account_Status__c='Not Contacted'
);
insert ac;
//Create Contact
Contact ct = new Contact(
LastName='Test Contact',
Email='testcontact@email.com',
Account= ac
);
insert ct;
// Verify
ac = [SELECT ID, TP_NextActivityDate__c FROM Account Where ID = :ac.id];
System.assertEquals(null,ac.TP_NextActivityDate__c);
//Insert E1
Event e1 = new Event(
subject='Event One',
whoId = ct.id,
whatId = ac.id,
startDateTime = Datetime.now().adddays(2),
endDateTime = Datetime.now().adddays(2)
);
insert e1;
// Verify
ac = [SELECT ID, TP_NextActivityDate__c FROM Account Where ID = :ac.id];
System.assertEquals(date.newinstance(e1.EndDateTime.year(),e1.EndDateTime.month(),e1.EndDateTime.day()),ac.TP_NextActivityDate__c);
}
Error Message:
System.AssertException: Assertion Failed: Expected: 2014-01-24 00:00:00, Actual: null
Here is the method:
public static void updateAcCountsAndActivities(Set<ID> accountIds){
//Query all records and related activities
List<Account> Accounts = [SELECT
Id,
TP_NextActivityDate__c,
TP_NextActivitySubject__c,
(SELECT Id, Subject, ActivityDate FROM OpenActivities WHERE ActivityDate >= TODAY AND ActivityDate <> NULL order by ActivityDate Desc LIMIT 1)
FROM Account WHERE ID IN :AccountIds];
List<Account> updateAccounts = new List<Account>();
for (Account a : Accounts) {
//Prepare comparison variables
String NextActivitySubject = a.TP_NextActivitySubject__c;
Date NextActivityDate = a.TP_NextActivityDate__c;
//Compare variables with record
if (a.OpenActivities.size() > 0) {
for (OpenActivity act : a.OpenActivities) {
NextActivityDate = act.ActivityDate;
NextActivitySubject = act.Subject;
}
} else {
NextActivityDate = null;
NextActivitySubject = null;
}
//Update fields to match variables
if ( a.TP_NextActivityDate__c != NextActivityDate || a.TP_NextActivitySubject__c != NextActivitySubject){
a.TP_NextActivityDate__c = NextActivityDate;
a.TP_NextActivitySubject__c = NextActivitySubject;
updateAccounts.add(a);
}
}
//Commit the changes
if(updateAccounts.size()>0) {
try{
update updateAccounts;
}
catch (Exception e) {
}
}
}
And here is the test:
public static testMethod void validateAccountCountsAndActivities() {
//Create Account
Account ac = new Account(
Name='Test Account',
Initial_Lead_Source__c='Cold Call',
Initial_Lead_Source_Detail__c='Cold Call',
Account_Type__c='Prospect',
Account_Status__c='Not Contacted'
);
insert ac;
//Create Contact
Contact ct = new Contact(
LastName='Test Contact',
Email='testcontact@email.com',
Account= ac
);
insert ct;
// Verify
ac = [SELECT ID, TP_NextActivityDate__c FROM Account Where ID = :ac.id];
System.assertEquals(null,ac.TP_NextActivityDate__c);
//Insert E1
Event e1 = new Event(
subject='Event One',
whoId = ct.id,
whatId = ac.id,
startDateTime = Datetime.now().adddays(2),
endDateTime = Datetime.now().adddays(2)
);
insert e1;
// Verify
ac = [SELECT ID, TP_NextActivityDate__c FROM Account Where ID = :ac.id];
System.assertEquals(date.newinstance(e1.EndDateTime.year(),e1.EndDateTime.month(),e1.EndDateTime.day()),ac.TP_NextActivityDate__c);
//Insert T1
Task t1 = new Task(
subject='Task One',
whoId = ct.id,
whatId = ac.id,
status='Completed',
Priority='Normal',
activitydate=Date.today().adddays(1));
insert t1;
// Verify
ac = [SELECT ID, TP_NextActivityDate__c FROM Account Where ID = :ac.id];
System.assertEquals(date.newinstance(e1.EndDateTime.year(),e1.EndDateTime.month(),e1.EndDateTime.day()),ac.TP_NextActivityDate__c);
//Insert T2
Task t2 = new Task(
subject='Task Two',
whoId = ct.id,
whatId = ac.id,
status='Not Started',
Priority='Normal',
activitydate=Date.today().adddays(3));
insert t2;
// Verify
ac = [SELECT ID, TP_NextActivityDate__c FROM Account Where ID = :ac.id];
System.assertEquals(t2.activitydate,ac.TP_NextActivityDate__c);
//Remove T2
t2.whoId = null;
t2.whatId = null;
update t2;
// Verify
ac = [SELECT ID, TP_NextActivityDate__c FROM Account Where ID = :ac.id];
System.assertEquals(date.newinstance(e1.EndDateTime.year(),e1.EndDateTime.month(),e1.EndDateTime.day()),ac.TP_NextActivityDate__c);
//Attach T2
t2.whoId = ct.id;
t2.whatId = ac.id;
update t2;
// Verify
ac = [SELECT ID, TP_NextActivityDate__c FROM Account Where ID = :ac.id];
System.assertEquals(t2.activitydate,ac.TP_NextActivityDate__c);
//Delete E1
delete e1;
//Verify
ac = [SELECT ID, TP_NextActivityDate__c FROM Account Where ID = :ac.id];
System.assertEquals(t2.activitydate,ac.TP_NextActivityDate__c);
//Insert E2
Event e2 = new Event(
subject='Event Two',
whoId = ct.id,
whatId = ac.id,
startDateTime = Datetime.now().adddays(66),
endDateTime = Datetime.now().adddays(66));
insert e2;
//Verify
ac = [SELECT ID, TP_NextActivityDate__c FROM Account Where ID = :ac.id];
System.assertEquals(date.newinstance(e2.EndDateTime.year(),e2.EndDateTime.month(),e2.EndDateTime.day()),ac.TP_NextActivityDate__c);
//Delete All
delete e2;
delete t2;
//Verify
ac = [SELECT ID, TP_NextActivityDate__c FROM Account Where ID = :ac.id];
System.assertEquals(null,ac.TP_NextActivityDate__c);
}