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
Siddhesh ChavanSiddhesh Chavan 

Work Order before insert trigger test class coverage not working

Test class not covering work order before insert trigger.

Trigger:
trigger assignTechnician on Work_Order__c (before insert) {
    
    List<User> userList = new List<User>();
    
    for(Work_Order__c wo : Trigger.New)
    {
     if(wo.Auto_assign_technician__c == TRUE)
     {
      
           userList = [select id from User where City = :wo.City__c AND UserRole.Name = :wo.Order_Type__c];
        
        for(User u : userList)
        {
            wo.OwnerId = u.Id;
        }
    }
    
     }         
}

Test Class:
@isTest
private class assignTechnicianTest {
        static testMethod void validateassignTechnician() {

        Test.startTest();
       
       Work_Order__c wo = new Work_Order__c();
        
        wo.City__c = 'Mumbai';
        wo.Order_Type__c = 'Field Service';
       
        insert wo;
        
        wo.Auto_assign_technician__c = true;
	update wo;
        
        System.assertEquals(wo.Auto_assign_technician__c, true);
        
        List<User> userList = new List<User>();
        UserRole r = new UserRole(name = 'Field Service');
        insert r;
        
        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', ProfileId = p.Id,
            LocaleSidKey='en_US', TimeZoneSidKey='America/Los_Angeles', UserName='testservicepro@testorg.com');
            
            u.City = 'Mumbai';
            u.UserRoleId = r.id;
        insert u;
        
       
        Test.stopTest(); 
        
        }
       
}

 
Best Answer chosen by Siddhesh Chavan
Arunkumar RArunkumar R
Hi Siddesh,

You can try out the below code,
@isTest
private class TestWorkOrder
{
    static testMethod void insertWorkOrder()
    {
        Profile p = [SELECT Id FROM Profile WHERE Name='Standard User'];
        
        UserRole r = new UserRole(Name = 'Field Service');
        insert r;
        
        User u = new User(Alias = 'standt', Email='standasdfsdfsdrduser@testorg.com', 
        EmailEncodingKey='UTF-8', LastName='Testing', LanguageLocaleKey='en_US', 
        LocaleSidKey='en_US', ProfileId = p.Id, Userroleid=r.id, City = 'Chennai',
        TimeZoneSidKey='America/Los_Angeles', UserName='standsdfsdfsdarduser@testorg.com');
        insert u;
        
        System.runAs(u)
        {
            Work_Order__c wo = new Work_Order__c();
            wo.City__c = 'Chennai';
            wo.Order_Type__c = 'Field Service';
            wo.Auto_assign_technician__c = true;
            insert wo;
        }
    }

}

1. Inserted UserRole
2. Inserted User.
3. To avoid Mixed DML used System.runAs
4. Insert your custom object record.

Hope this will solve your problem..!

All Answers

Arunkumar RArunkumar R
Hi Siddesh,

You can try out the below code,
@isTest
private class TestWorkOrder
{
    static testMethod void insertWorkOrder()
    {
        Profile p = [SELECT Id FROM Profile WHERE Name='Standard User'];
        
        UserRole r = new UserRole(Name = 'Field Service');
        insert r;
        
        User u = new User(Alias = 'standt', Email='standasdfsdfsdrduser@testorg.com', 
        EmailEncodingKey='UTF-8', LastName='Testing', LanguageLocaleKey='en_US', 
        LocaleSidKey='en_US', ProfileId = p.Id, Userroleid=r.id, City = 'Chennai',
        TimeZoneSidKey='America/Los_Angeles', UserName='standsdfsdfsdarduser@testorg.com');
        insert u;
        
        System.runAs(u)
        {
            Work_Order__c wo = new Work_Order__c();
            wo.City__c = 'Chennai';
            wo.Order_Type__c = 'Field Service';
            wo.Auto_assign_technician__c = true;
            insert wo;
        }
    }

}

1. Inserted UserRole
2. Inserted User.
3. To avoid Mixed DML used System.runAs
4. Insert your custom object record.

Hope this will solve your problem..!
This was selected as the best answer
Siddhesh ChavanSiddhesh Chavan
Thank you Arunkumar for your reply, i have tried with your code it's not giving any error but its covering 0% trigger.
Arunkumar RArunkumar R
Hi Siddhesh,

1. Let ensure your trigger is active.
2. Ensure give all mandatory field values in your test class for the Work order object.
3. Run the test class and check if there any excption found in DEBUG LOG.

Let me know if you still have problem..!
Siddhesh ChavanSiddhesh Chavan
Thank you Arunkumar, My trigger was inactive, now it's working fine.