function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
salesforceesalesforcee 

trigger apex test - Auto create record

How do we write a test apex for a trigger that creates a child record when a parent record is created? 

 

 

trigger AutoCreateInterviewer on Position__c (after insert) {
    List<Interviewer__c> interviewers = new List<Interviewer__c>();

    //For each position processed by the trigger, add a new  
    //interviewer record for the specified hiring manager.  
    //Note that Trigger.New is a list of all the new positions  
    //that are being created.  
    
    for (Position__c newPosition: Trigger.New) {
        if (newPosition.Hiring_Manager__c != null) {
            interviewers.add(new Interviewer__c(
                        Name = '1',
                        Position__c = newPosition.Id,
                        Employee__c = newPosition.Hiring_Manager__c,
                        Role__c = 'Managerial'));
        }
    }
    insert interviewers;
}
@anilbathula@@anilbathula@

Hi 

 

Try this code:-

@isTest
private class MYTestClass {
 static testMethod void AutoCreateInterviewer() {
   Interviewer__c i=new Interviewer__c();
   i.Name='123';
//put all your mandatory fields.
   Insert i;
 }
}

 

salesforceesalesforcee

thank you but unfortunately running the test fails. 

salesforceesalesforcee

The test coverage does not include this part 

 

interviewers.add(new Interviewer__c(

 

 

 

How can I test it? 

 

klekle

try this:

 

@isTest
private class MYTestClass {
static testMethod void AutoCreateInterviewer() {

//Set up the test data

Profile p = [SELECT Id FROM Profile WHERE Name='Standard User'];
User u = new User(Alias = 'standt', Email='standarduser@testorg.com',
EmailEncodingKey='UTF-8', LastName='Testing', LanguageLocaleKey='en_US',
LocaleSidKey='en_US', ProfileId = p.Id,
TimeZoneSidKey='America/Los_Angeles', UserName='noonespecial@testorg.com');
insert u;

//create a new position with a hiring manager
System.Debug('Create new position - validate single insert');

Position__c newposition = new Position__c();
newposition.Name = 'Position1';
newposition.Hiring_Manager__c=u.Id;
//call the trigger
insert newposition;

System.Debug('New Position Hiring Manager is ' + u.id);

Interviewer__c i =[SELECT Position__c, Employee__c, Role__c FROM Interviewer__c
WHERE CreatedDate = TODAY and Role__c !=NULL
LIMIT 1];

//Validate positive test case
System.debug('Role is ' + i.Role__c);
System.assert(i.Role__c=='Managerial');

}
}

@anilbathula@@anilbathula@

Hi

 

@isTest
private class MYTestClass {
static testMethod void AutoCreateInterviewer() {

 


Position__c newposition = new Position__c();
newposition.Name = 'Position1';
newposition.Hiring_Manager__c='rest';
insert newposition;


list<Interviewer__c >ld =new list<Interviewer__c>{

      Interviewer__c i=new Interviewer__c();

      i.Name='123';

      //put all your mandatory fields.  

     ld.add(i);

     }

insert ld;

}
}

salesforceesalesforcee

Thank you guys.

 

I will see if this works

salesforceesalesforcee

I was using the initial trigger to create this one : 

 

trigger AutoCreateReview on Phases__c (before insert, before update)  {

 

List< File__c > F=new List< File__c >();

 

List< Review__c > R =new List< Review__c >();

 

for (Phases__c newP: Trigger.New) {

 

        if (newP.Phase_Number__c == 'I' && newP.State_Review__c == 'In progress' ) {

 

            R.add(new Review__c(

 

                     

 

                        Phases__c = newP.Id,

                        File__c = newP. File__c,

                        Review_Title__c = 'BP',

                        Description__c = 'BPD',

                        Validation__c = 'BP Approved.'));

               

                       

        }

        

        if (newP.Phase_Number__c == 'I'&& newP.State_Review__c == 'In progress') {

 

             R.add(new Review__c(

            

                       Phases__c = newP.Id,

                        File__c = newP. File__c,

                        Review_Title__c = 'Diagnosis',

                        Description__c = 'DiagnosisD',

                        Validation__c = 'Diagnosis Approved'));

                        

         }

        if (newP.Phase_Number__c == 'I'&& newP.State_Review__c == 'In progress'&& (newP File__r.Capital__c<100000)) {

 

          R.add(new Review__c(

 

                     

 

                         Phases__c = newP.Id,

                        File__c = newP. File__c,

                        Review_Title__c = 'Certificate',

                        Description__c = 'Document sent',

                        Validation__c = 'Certificate approved'));

        }

                        

               

 

    }

 

    insert R;

 

 

}

 

The goal is to create a number of reviews depending on which phase we are in. Reviews and Phases are linked by a master-detail relationship, Phases being the parent. These two are both children to the master grandfather object File__c. 

 

My test is at 66% coverage. I used the same test you guys provided. It still does not cover the adding part. What do you recommend? 

 

Thank you for your help.  

klekle

Hey salesforcee, your trigger looks like it is inserting two records here:  your first two if statements are the same.  Is that what you are meaning to do?

salesforceesalesforcee

There are four phases and for each phase there is a number of records to create. Would that be a problem?