You need to sign in to do that
Don't have an account?
Doondi
custom Settings: To Avoid hard coding Id : Trigger : Test Class
Hi below is my Simple Trigger and Test classes.
I am not able to Cover the code for Custom settings, can anyone help me
My test class:
The problem - not able to Pass the values into if conditions
I am not able to Cover the code for Custom settings, can anyone help me
trigger CreateRecord on Deals__c (after insert, after update) { set<id> triggerIds = trigger.newMap.keyset(); List <Project__c> Project = [select id, Name from Project__c where id in :triggerIds]; List <Project__c> newProject = new List<Project__c>() ; for(Deals__c Deal : [Select id,Name,Property__r.Region__c,Type__c,Status__c,Manager__c,Property__r.Site__c from LMS_Deal__c where id IN :triggerIds]) { if(Deal.Type__c == 'New') { string Name = Deal.Name + ' - ' + Deal.Property__r.Site__c; List <Project__c> ProjectList = [select id,Name,OwnerId,Property__r.Site__c from Project__c where Name =: Name]; Region__c customSettings = Region__c.getInstance(Userinfo.getUserId()); if (ProjectList.size() == 0) { if(deal.Manager__c == Null && Deal.Property__r.Region__c == 'Delhi') { Deal.Manager__c = customSettings.Delhi__c; } newProject.add(new Project__c ( Name = Deal.Name + ' - ' + Deal.Property__r.Site__c, OwnerId = Deal.Manager__c insert newProject; }//if else if (ProjectList.size() >> 0) { if(Deal.Manager__c == Null && Deal.Property__r.Region__c == 'Delhi') { Deal.Manager__c = customSettings.Delhi__c; } Project__c NewProjectList = [select id,Name,OwnerId,Property__r.Site__c,Property__r.Region__c from Project__c where Name =: Name]; NewProjectList.OwnerId = Deal.Manager__c; update NewProjectList; } } } }
My test class:
@isTest(SeeAllData=true) private class CreateRecordTest { static testmethod void CreateRecord(){ // creating property Property__c prop = new Property__c(Name = 'Test property', Site_c = 'New Site', Region__c = 'Delhi'); insert prop; // creating Units Unit__c units = new Unit__c(Name = 'Test Unit', Property_Unit__c = prop.Id); insert units; // creating a user Profile objProfile = [SELECT Id, Name FROM Profile WHERE Name='System Administrator']; User objUser = new User(Alias = 'Swill', Email='swill@mymail.com', EmailEncodingKey='UTF-8', LastName='Will', LanguageLocaleKey='en_US', LocaleSidKey='en_US', ProfileId = objProfile.Id, TimeZoneSidKey='America/Los_Angeles', UserName='will@gmail.com'); insert objUser; // creating another user for assigning custom setting Profile objProfile1 = [SELECT Id, Name FROM Profile WHERE Name='System Administrator']; User objUser1 = new User(Alias = 'Kaka', Email='kaka@kakamail.com', EmailEncodingKey='UTF-8', LastName='Mkaka', LanguageLocaleKey='en_US', LocaleSidKey='en_US', ProfileId = objProfile1.Id, TimeZoneSidKey='America/Los_Angeles', UserName='kaka_M@gmail.com'); insert objUser1; // creating custom settings Region__c CustomSettings = new Region__c ( Name = 'test custom setting', Delhi__c = objUser1.Id); insert CustomSettings; // creating deal Deal__c deal = new Deal__c(Name = 'Test Deal', Manager__c = objUser1.Id, Type__c = 'New'); insert LMSdeal1; // creating property Project__c TP = new Project__c( Name = deal.Name + ' - ' + deal.Property__r.Site__c, OwnerId = deal.Manager__c); insert TP; } }
The problem - not able to Pass the values into if conditions
if(deal.Manager__c == Null && Deal.Property__r.Region__c == 'Delhi') { Deal.Manager__c = customSettings.Delhi__c; }
also with (SeeAllData=true) do you even need to create the custom settings in the test class?
You have not set Deal.Property__c field value when inserting Deal record.
Change the sequence of insertion. First Property then Deal like:
// creating property
Project__c TP = new Project__c( Name = deal.Name + ' - ' + deal.Property__r.Site__c,
OwnerId = deal.Manager__c);
insert TP;
// creating deal
Deal__c deal = new Deal__c(Name = 'Test Deal',
Manager__c = objUser1.Id,
Type__c = 'New',
Property__c = TP );
insert LMSdeal1;
I am not able to insert deal
it's throwing this error : CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY
I am not getting any errors, but code coverage lines were not creasing.