You need to sign in to do that
Don't have an account?
Ronnie Paton 8
Help writing Apex Test
Hi All,
I am trying to create test code for the Milestone Utilities Class, Trigger on Case Comment, Trigger on Email Message that has been published at
https://developer.salesforce.com/index.php?title=Auto-completion_of_Case_Milestones_with_Triggers&oldid=33636&language=en
The code I have found that I thought would complte this but could be totally wrong is
@istest
public class CompleteMilestone{
// test methods
static testMethod void testCompleteMilestoneCase(){
Contact oContact = [select id from Contact limit 1];
String contactId;
if (oContact != null)
contactId = oContact.Id;
Entitlement entl = [select id from Entitlement limit 1];
String entlId;
if (entl != null)
entlId = entl.Id;
List<Case> cases = new List<Case>{};
if (entlId != null){
Case c = new Case(Subject = 'Test Case with Entitlement ', EntitlementId = entlId, ContactId = contactId);
cases.add(c);
}
// Insert the Account records that cause the trigger to execute.
if (cases.isEmpty()==false){
insert cases;
List<Id> caseIds = new List<Id>();
for (Case cL : cases){
caseIds.add(cL.Id);
}
milestoneUtils.completeMilestone(caseIds, 'Response MAC', System.now());
}
}
static testMethod void testCompleteMilestoneViaCase(){
// Perform data preparation
Entitlement entl = [select id from Entitlement limit 1];
String entlId;
if (entl != null)
entlId = entl.Id;
List<Case> cases = new List<Case>{};
for(Integer i = 0; i < 1; i++){
Case c = new Case(Subject = 'Test Case ' + i);
cases.add(c);
if (entlId != null){
c = new Case(Subject = 'Test Case with Entitlement ' + i, EntitlementId = entlId);
cases.add(c);
}
}
// Insert the Account records that cause the trigger to execute.
insert cases;
List<CaseComment> ccs = new List<CaseComment>{};
for(Case c : cases){
CaseComment cc = new CaseComment(CommentBody='TestPublic', IsPublished=true, ParentId=c.Id);
ccs.add(cc);
cc = new CaseComment(CommentBody='TestPrivate', IsPublished=true, ParentId=c.Id);
ccs.add(cc);
}
if (ccs.isEmpty()==false)
insert ccs;
// Now create emailmessage objects for them.
List<EmailMessage> emails = new List<EmailMessage>();
for(Case c : cases){
emails.add(new EmailMessage(parentId = c.id));
}
if(emails.isEmpty()==false)
database.insert(emails);
for(Case c : cases){
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
String[] toAddr = new String[] {'mramsey@salesforce.com'};
mail.setToAddresses(toAddr);
mail.setSaveAsActivity(false);
mail.setTargetObjectId(c.ContactId);
mail.setWhatId(c.Id);
mail.setHtmlBody('TestHTMLBody');
mail.setPlainTextBody('TestTextBody');
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
for(Case c : cases){
c.Status = 'Closed';
}
update cases;
// Query the database for the newly inserted records.
List<Case> insertedCases = [SELECT Subject,
Description,
(SELECT IsPublished, CommentBody From CaseComments),
(SELECT TextBody, Subject, Incoming From EmailMessages)
FROM Case
WHERE Id IN :cases];
}
}
But when I run the test it fails on line 8 colum 1
Contact oContact = [select id from Contact limit 1];
and line 38 column 1
Entitlement entl = [select id from Entitlement limit 1];
both have the following error
System.QueryException; List has no rows for assigment to Sobject
Thanks in advance for any help/pointers you give me
I am trying to create test code for the Milestone Utilities Class, Trigger on Case Comment, Trigger on Email Message that has been published at
https://developer.salesforce.com/index.php?title=Auto-completion_of_Case_Milestones_with_Triggers&oldid=33636&language=en
The code I have found that I thought would complte this but could be totally wrong is
@istest
public class CompleteMilestone{
// test methods
static testMethod void testCompleteMilestoneCase(){
Contact oContact = [select id from Contact limit 1];
String contactId;
if (oContact != null)
contactId = oContact.Id;
Entitlement entl = [select id from Entitlement limit 1];
String entlId;
if (entl != null)
entlId = entl.Id;
List<Case> cases = new List<Case>{};
if (entlId != null){
Case c = new Case(Subject = 'Test Case with Entitlement ', EntitlementId = entlId, ContactId = contactId);
cases.add(c);
}
// Insert the Account records that cause the trigger to execute.
if (cases.isEmpty()==false){
insert cases;
List<Id> caseIds = new List<Id>();
for (Case cL : cases){
caseIds.add(cL.Id);
}
milestoneUtils.completeMilestone(caseIds, 'Response MAC', System.now());
}
}
static testMethod void testCompleteMilestoneViaCase(){
// Perform data preparation
Entitlement entl = [select id from Entitlement limit 1];
String entlId;
if (entl != null)
entlId = entl.Id;
List<Case> cases = new List<Case>{};
for(Integer i = 0; i < 1; i++){
Case c = new Case(Subject = 'Test Case ' + i);
cases.add(c);
if (entlId != null){
c = new Case(Subject = 'Test Case with Entitlement ' + i, EntitlementId = entlId);
cases.add(c);
}
}
// Insert the Account records that cause the trigger to execute.
insert cases;
List<CaseComment> ccs = new List<CaseComment>{};
for(Case c : cases){
CaseComment cc = new CaseComment(CommentBody='TestPublic', IsPublished=true, ParentId=c.Id);
ccs.add(cc);
cc = new CaseComment(CommentBody='TestPrivate', IsPublished=true, ParentId=c.Id);
ccs.add(cc);
}
if (ccs.isEmpty()==false)
insert ccs;
// Now create emailmessage objects for them.
List<EmailMessage> emails = new List<EmailMessage>();
for(Case c : cases){
emails.add(new EmailMessage(parentId = c.id));
}
if(emails.isEmpty()==false)
database.insert(emails);
for(Case c : cases){
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
String[] toAddr = new String[] {'mramsey@salesforce.com'};
mail.setToAddresses(toAddr);
mail.setSaveAsActivity(false);
mail.setTargetObjectId(c.ContactId);
mail.setWhatId(c.Id);
mail.setHtmlBody('TestHTMLBody');
mail.setPlainTextBody('TestTextBody');
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
for(Case c : cases){
c.Status = 'Closed';
}
update cases;
// Query the database for the newly inserted records.
List<Case> insertedCases = [SELECT Subject,
Description,
(SELECT IsPublished, CommentBody From CaseComments),
(SELECT TextBody, Subject, Incoming From EmailMessages)
FROM Case
WHERE Id IN :cases];
}
}
But when I run the test it fails on line 8 colum 1
Contact oContact = [select id from Contact limit 1];
and line 38 column 1
Entitlement entl = [select id from Entitlement limit 1];
both have the following error
System.QueryException; List has no rows for assigment to Sobject
Thanks in advance for any help/pointers you give me
@istest(SeeAllData=true)
public class CompleteMilestone{
All Answers
@istest(SeeAllData=true)
public class CompleteMilestone{
Thanks for all your help