+ Start a Discussion
Glen.ax1034Glen.ax1034 

Activity to Chatter Test Code - CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY

I cannot figure out for the life of me why I am getting the CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, Glen_Task_Chatter: execution AfterInsert error

 

test code:

public with sharing class test_Glen_Task_Chatter {

    /*
    *    Test the ChatterActivity trigger which inserts chatter feed posts whenever a task is inserted on the parent object
    */
    public static testMethod void testChatterActivity() {
        //create the test account
        
        User u1 = [select id from User where alias='gbrad'];
        
//Run As U1  
    
        System.RunAs(u1){
        
        Account a = new Account(name='Test Account', Type='Law Firm', Industry='Agriculture', BillingCity='Indianapolis', BillingCountry='USA');
        insert a;
        
        Contact c = new Contact(LastName='Test Account', AccountId=a.id, Title='test', Email='g@g.com', LeadSource='Adwords');
        insert c;

        //create a task on that account
        Task t = new Task(Subject='Subject', Contact_Outreach__c='Log A Phone Meeting',WhoId=c.Id,WhatId=a.id,Ownerid=u1.id);
        insert t;
        
        //Event e = new Event (Subject='Subject', Related_Services__c='Consulting', DurationInMinutes=30, ActivityDateTime=datetime.now());
        //insert e;
        
        }
    }
}

 

Actual Trigger:

trigger Glen_Task_Chatter on Task (after insert, after update) {

    if(UserInfo.getName()!='Eloqua Marketing'){
    
        List<FeedItem> feedItems = new List<FeedItem>();
    //We want to show the User name as assignedTo. The only way to get to that is by querying the user table.
        Set<ID> ownerIds = new Set<ID>();
        
        for (Task t : Trigger.new) {
            ownerIds.add(t.ownerId);
        }
        Map<ID,User> userMap = new Map<ID,User>([SELECT ID, Name FROM User WHERE ID IN :ownerIds]); //This is our user map
    
    
    
        for (Task c: Trigger.new) {
                
                    FeedItem fitem = new FeedItem();
                    fitem.type = 'LinkPost';
            		if (c.Accountid != null)
                    	fitem.ParentId = c.Accountid;
                    fitem.LinkUrl = '/' + c.id; //This is the url to take the user to the activity
                    fitem.Title = 'View';  //This is the title that displays for the LinkUrl
        
                    //Get the user by checking the userMap we created earlier
                    User assignedTo = userMap.get(c.ownerId);
        
                    fitem.Body = ((Trigger.isInsert) ? 'New' : 'Updated') + ' Task - ' + c.Subject +': ' + c.Contact_Outreach__c + '\n  ' + c.Description.substring(0,50); //+ c.Who.Name;
                    
                    if (c.AccountId !=null)
                        feedItems.add(fitem);
                
        //}
    
    
        //Save the FeedItems all at once.
        if (feedItems.size() > 0) {
            Database.insert(feedItems,false); //notice the false value. This will allow some to fail if Chatter isn't available on that object
        }
    
    
        
    
        }
        
        
        
        
        
    }

    
    
    
}

 

KaminiKamini

In the test class, when you are inserting the task record, Please also put the value in the 'Description' field for the Task record. In the Trigger, you have not used any null check. Please put the null checks before the following line

 

fitem.Body = ((Trigger.isInsert) ? 'New' : 'Updated') + ' Task - ' + c.Subject +': ' + c.Contact_Outreach__c + '\n  ' + c.Description.substring(0,50); //+ c.Who.Name;

 

When running the test case, Description field is null and it is giving the null Pointer Exception.