You need to sign in to do that
Don't have an account?
AUCTUS Administrator
Apex Code is working but I dont get Code Coverage by testing
Hallo,
since I am new to Apex and specially this forum please dont be so hard on me.
I am trying to get this to work:
(Short explenation of the porpuse: When sending out a Mail with a specific Subject, the contact field "Recruiting_Status__c" should be updated on the contact related to the task (WhoId).
Note: I tried to do include the contact to my list and update on two different ways as you may notice (last one is different), but code coverage keeps telling me somethings wrong..
Trigger:
Back to the Issue:
Apex Test Execution tells me that the Test passes the test but I only have 50% code coverage because it wont take all the lines with the contactsToUpdate List.
As you can see in:
Many many thanks in advance!! I really hope someone can help me with that!
Best
Sam
since I am new to Apex and specially this forum please dont be so hard on me.
I am trying to get this to work:
(Short explenation of the porpuse: When sending out a Mail with a specific Subject, the contact field "Recruiting_Status__c" should be updated on the contact related to the task (WhoId).
Note: I tried to do include the contact to my list and update on two different ways as you may notice (last one is different), but code coverage keeps telling me somethings wrong..
Trigger:
trigger RecEmailTrigger on Task (after insert) { List<Contact> contactsToUpdate = new List<Contact>(); for(Task t : Trigger.new) { if (t.WhoId != null){ List<Contact> Con = [SELECT Id, Name, Recruiting_Status__c FROM Contact WHERE Id = :t.WhoID]; if(t.subject.equals('Email: Anfrage auf vollständige Bewerbungsunterlagen')) { contactsToUpdate.add(new Contact(Id = t.WhoId, Recruiting_Status__c = 'Requested complete set of documents'));} else if(t.subject.equals('Email: Das AUCTUS Recruiting Erlebnis: selbständige Terminkoordination für ein erstes Vorabgespräch')) { contactsToUpdate.add(new Contact(Id = t.WhoId, Recruiting_Status__c = 'In scheduling process for initial conversation'));} else if(t.subject.equals('Email: Das AUCTUS Recruiting Erlebnis: selbständige Terminkoordination für die CaseStudy@Home')) { contactsToUpdate.add(new Contact(Id = t.WhoId, Recruiting_Status__c = 'In scheduling process for case study'));} else if((t.subject.equals('Email: Vielen Dank für Ihre Bewerbung') || t.subject.equals('Email: Vielen Dank für Ihre Kontaktaufnahme')) && (Con[0].Recruiting_Status__c.contains('preselected') || Con[0].Recruiting_Status__c.contains('Requested complete') )) { contactsToUpdate.add(new Contact(Id = t.WhoId, Recruiting_Status__c = 'Declined after preselection'));} else if((t.subject.equals('Email: Vielen Dank für Ihre Bewerbung') || t.subject.equals('Email: Vielen Dank für Ihre Kontaktaufnahme')) && Con[0].Recruiting_Status__c.contains('initial conversation')) { contactsToUpdate.add(new Contact(Id = t.WhoId, Recruiting_Status__c = 'Declined after initial conversation'));} else if((t.subject.equals('Email: Vielen Dank für Ihre Bewerbung') || t.subject.equals('Email: Vielen Dank für Ihre Kontaktaufnahme')) && Con[0].Recruiting_Status__c.contains('case study')) { contactsToUpdate.add(new Contact(Id = t.WhoId, Recruiting_Status__c = 'Declined after case study'));} else if((t.subject.equals('Email: Vielen Dank für Ihre Bewerbung') || t.subject.equals('Email: Vielen Dank für Ihre Kontaktaufnahme')) && Con[0].Recruiting_Status__c.contains('IM-interview')) { contactsToUpdate.add(new Contact(Id = t.WhoId, Recruiting_Status__c = 'Declined after IM-interview'));} else if((t.subject.equals('Email: Vielen Dank für Ihre Bewerbung') || t.subject.equals('Email: Vielen Dank für Ihre Kontaktaufnahme')) && Con[0].Recruiting_Status__c.contains('partner/MD interview')) { Con[0].Recruiting_Status__c = 'Declined after partner interview'; contactsToUpdate.addAll(Con);} } } update contactsToUpdate; }Test Class:
@IsTest public class TestRecEmailTrigger { static testmethod void insertTask() { User us = new User(); us.FirstName = 'Test'; us.LastName = 'User'; us.Alias = 'UserTest'; us.Email = 'samuel.schoessel@gmx.de'; us.Username = 'samuel.schoessel@gmx.de'; us.CommunityNickname = 'Sammy'; us.TimeZoneSidKey = 'Europe/Berlin'; us.LocaleSidKey = 'de_DE'; us.EmailEncodingKey = 'UTF-8'; us.LanguageLocaleKey = 'en_US'; us.ProfileId = '00e24000000Mca5'; insert us; Account acc = new Account(); acc.Name = 'Test Account'; acc.RecordTypeId = '012240000004qdf'; acc.OwnerId = us.Id; insert acc; Contact con = new Contact(); con.LastName = 'The Sam'; con.FirstName = 'Sammy'; con.OwnerId = us.Id; con.RecordTypeId = '012240000006HOl'; con.Recruiting_Status__C = 'Scheduled for initial conversation'; insert con; Task t = New Task(); t.Subject = 'vollständige Bewerbungsunterlagen'; t.Priority = 'Normal'; t.Status = 'Geschlossen'; t.OwnerId = us.Id; t.WhoId = con.Id; insert t; } }
Back to the Issue:
Apex Test Execution tells me that the Test passes the test but I only have 50% code coverage because it wont take all the lines with the contactsToUpdate List.
As you can see in:
Many many thanks in advance!! I really hope someone can help me with that!
Best
Sam
Please ensure all the else conditions are tested in the test class.
You test class covers only for the email subject condition: vollständige Bewerbungsunterlagen only repeat that for all the subjects.
You need to insert tasks for all the email subject contions in your apex class.
Add the following code to your test class and you could see your code coverage increasing. Please let me know if the helps.
As a common practice, if your question is answered, please choose 1 best answer.
Additionaly you can give every answer a thumb up if that answer is helpful to you.
Regards,
Anto Nirmal
All Answers
But since its only getting 50% code coverage I am not sure if I should take it to production yet. Besides that, I am sure the code I wrote is total crap if it comes to efficiancy
Please ensure all the else conditions are tested in the test class.
You test class covers only for the email subject condition: vollständige Bewerbungsunterlagen only repeat that for all the subjects.
You need to insert tasks for all the email subject contions in your apex class.
Add the following code to your test class and you could see your code coverage increasing. Please let me know if the helps.
As a common practice, if your question is answered, please choose 1 best answer.
Additionaly you can give every answer a thumb up if that answer is helpful to you.
Regards,
Anto Nirmal
From now on I will be more active in this forum.
PS: Thanks to adding every kind of option to my class got me 100% code coverage so I think it should be fine to take it to production!