2

I have an error message for a test class that i try to create for 2 triggers. The error message is: "Invalid field subject for Sobject Lead" .

Can anyone look at this and tell me what i do wrong , please ?

The first trigger is here:

trigger leadRoundRobin on Lead (before insert, before update) {

 //Check if assignment owner has changed
 //
 Map<Integer,Id> queueIds = new Map<Integer,Id>();   //Trigger index --> Queue ID

Integer idx = 0;
for (Lead l : Trigger.new)
{
if(Trigger.isUpdate) {  
    if(l.OwnerId <> Trigger.oldMap.get(l.id).OwnerId) {
        if (l.TempOwnerId__c == 'SKIP') {
            Trigger.new[idx].TempOwnerId__c = '';
        } else {
            queueIds.put(idx, l.OwnerId);
        }
    }           
}else {
    queueIds.put(idx, l.OwnerId);
}   
idx++;
}
System.debug('>>>>>queueIds: '+queueIds);
if (queueIds.isEmpty()) return;

//
//Find active Assignment Group for Queue
//
Map<Integer,Id> asgnGroupNameIds = new Map<Integer,Id>();   //Trigger index --> Assignment_Group_Name ID
Map<Id,Assignment_Group_Queues__c> asgnGroupQueues = new Map<Id,Assignment_Group_Queues__c>(); //Queue ID --> Assignment Group Queues

for(Assignment_Group_Queues__c[] agq : [SELECT Assignment_Group_Name__c, QueueId__c
                                  FROM Assignment_Group_Queues__c 
                                  WHERE QueueId__c in :queueIds.values()
                                  AND Active__c = 'True'])
{
for (Integer i = 0; i < agq.size() ; i++) {
    asgnGroupQueues.put(agq[i].QueueId__c, agq[i]);
}                                           
}
System.debug('>>>>>asgnGroupQueues: '+asgnGroupQueues); 
if (asgnGroupQueues.isEmpty()) return;

for (Integer i : queueIds.keySet()) {
Assignment_Group_Queues__c agq = asgnGroupQueues.get(queueIds.get(i));

if (agq <> null) {
    asgnGroupNameIds.put(i, agq.Assignment_Group_Name__c);
}
//else no active assignment group queue error
}
System.debug('>>>>>asgnGroupNameIds: '+asgnGroupNameIds);
if (asgnGroupNameIds.isEmpty()) return;

//
//Determine next valid user in Queue/Assignment Group for round robin
//User with earliest last assignment date wins.
//
Map<Id,Assignment_Groups__c[]> asgnGroups = new Map<Id,Assignment_Groups__c[]>(); // Assignment Group Name ID --> User ID
for(Assignment_Groups__c[] ags : [SELECT Group_Name__c, User__c, Last_Assignment__c, Millisecond__c 
                           FROM Assignment_Groups__c 
                           WHERE Group_Name__c in :asgnGroupNameIds.values() 
                           AND Active__c = 'True' AND User_Active__c = 'True'
                           ORDER BY Last_Assignment__c, Millisecond__c])
{
if (ags.size()>0) {
    asgnGroups.put(ags[0].Group_Name__c, ags);
}
}
System.debug('>>>>>asgnGroups: '+asgnGroups);   
if (asgnGroups.isEmpty()) return;

Map<Id,Assignment_Groups__c> updateAssignmentGroups = new Map<Id,Assignment_Groups__c>();
Map<Id, datetime> latestAGDateTime = new Map<Id,datetime>();
idx = 0;    
for (Integer i : queueIds.keySet())
{
Assignment_Groups__c[] ags = asgnGroups.get(asgnGroupNameIds.get(i));
if (ags.size()>0)
{   
    //Choose next user in line if user ID has already been used but not committed in this trigger batch 
    Assignment_Groups__c ag = ags[math.mod(idx, ags.size())];

    //Assign User to Lead as the new owner
    System.debug('>>>>>Owner changed for Lead ' + Trigger.new[i].Id + ' from '+Trigger.new[i].OwnerId+' to '+ ag.User__c);
    Trigger.new[i].OwnerId = ag.User__c;    
    Trigger.new[i].TempOwnerId__c = '';  // don't assign back in an endless loop

    //Set last assignment datetime
    datetime now = datetime.now();
    ag.Last_Assignment__c = now;
    ag.Millisecond__c = now.millisecondGMT();

    //update only latest Assignment Groups per ID
    if (latestAGDateTime.containsKey(ag.id)) {
        if(latestAGDateTime.get(ag.id) < now) {
            updateAssignmentGroups.put(ag.id, ag);
            latestAGDateTime.put(ag.id, now);
        }
    } else {
        updateAssignmentGroups.put(ag.id, ag);
        latestAGDateTime.put(ag.id,now);
    }

    idx++;
}
 }
 //Map --> List/Array for DML update
  List<Assignment_Groups__c> updateAG = new List<Assignment_Groups__c>();
   for (Id agId : updateAssignmentGroups.keySet()) {
updateAG.add(updateAssignmentGroups.get(agId));
}

System.debug('>>>>>Update Assignment Groups: '+updateAG);   

//
//Update last assignment for Assignment Group in batch
//
if (updateAG.size()>0) {
try {
    update updateAG;
} catch (Exception e){
    for (Integer i : queueIds.keySet())
    {
        Trigger.new[i].addError('ERROR: Could not update Assignment Group records ' + '     DETAIL: '+e.getMessage());  
    }
}
}
}

The second trigger is:

     // leadOwnerUpdate.trigger:

trigger leadOwnerUpdate on Lead (after update) {
List<Lead> updateLeads = new List<Lead>();
Map<Id,Lead> leads = new Map<Id,Lead>();
for (Lead l : Trigger.new)
{
if(Trigger.isUpdate) {
System.debug('>>>>> Owner ID: '+l.ownerId+' Temp Owner ID: '+ l.TempOwnerId__c);
if(l.TempOwnerId__c <> null && l.TempOwnerId__c <> '') {
if(l.OwnerId <> l.TempOwnerId__c) {
leads.put(l.id,l);
}
}
}
}
if (leads.isEmpty()) return;
 for (Lead l : [SELECT OwnerId,TempOwnerId__c FROM Lead WHERE id in :leads.keySet()]) {
l.OwnerId = leads.get(l.Id).TempOwnerId__c;
l.TempOwnerId__c = 'SKIP'; //flag to stop infinite loop upon update
updateLeads.add(l);
}
System.debug('>>>>>Update Leads: '+updateLeads);
//
//Update last assignment for Assignment Group in batch
//
if (updateLeads.size() > 0) {
try {
update updateLeads;
} catch (Exception e){

}
}
}

And the test class is here :

@isTest
private class TestMethodLead{

static testMethod void myTest11() {

    // This code runs as the system user

    User u1;

    try{
      u1 = [select Id from User WHERE IsActive=True AND Profile.Name = 'System Administrator'  LIMIT 1];
    } catch (QueryException qe){

    List<User> users = [SELECT Id, Profile.PermissionsModifyAllData FROM User WHERE IsActive = true LIMIT 1000];

    for(User u : users){
        if(u.Profile.PermissionsModifyAllData = true){
          u1 = u;
          break;
    }
    }

    }

    System.debug(u1);

   //*****Create Queue 

   Group testGroup = new Group ();
   testGroup.Name = 'TestQueue';
   testGroup.Type = 'Queue';
   insert testGroup;

   QueueSObject testQueue = new QueueSObject();
   testQueue.QueueId = testGroup.id;
   testQueue.SObjectType = 'Lead';
   insert testQueue;

   // Second Queue       
   Group testGroup2 = new Group ();
   testGroup2.Name = 'TestQueue2';
   testGroup2.Type = 'Queue';
   insert testGroup2;

   QueueSObject testQueue2 = new QueueSObject();
   testQueue2.QueueId = testGroup2.id;
   testQueue2.SObjectType = 'Lead';
   insert testQueue2;


   test.starttest();

    //Run test

    //Assign Case with out any Assignment Groups
   Lead c1 = new Lead (subject='testlead',TempOwnerID__c=testGroup2.id, OwnerID=u1.id); //tempOwnerID__c=testGroup2.id,  
    insert c1;
    update c1;


    //Create Assignment Group
    Assignment_Group_Name__c ag1 = new Assignment_Group_Name__c (Name='TestAG', Type__c = 'Lead');
    insert ag1;


    //Add bad queue name
    Assignment_Group_Queues__c agqBad = new Assignment_Group_Queues__c(name='Bad Queue',Assignment_Group_Name__c = ag1.id );

    try {
        insert agqBad; 
    } catch (DmlException e){
         System.assert(e.getMessage().contains('CUSTOM_VALIDATION_EXCEPTION'), e.getMessage()); 

    } //catch

    test.stoptest();

}

static testMethod void myTest2() {

    // This code runs as the system user

    User u1;

    try{
      u1 = [select Id from User WHERE IsActive=True AND Profile.Name = 'System Administrator'  LIMIT 1];
    } catch (QueryException qe){

    List<User> users = [SELECT Id, Profile.PermissionsModifyAllData FROM User WHERE IsActive = true LIMIT 1000];

    for(User u : users){
        if(u.Profile.PermissionsModifyAllData = true){
          u1 = u;
          break;
    }
    }

    }

    System.debug(u1);

   //*****Create Queue 

   Group testGroup = new Group ();
   testGroup.Name = 'TestQueue';
   testGroup.Type = 'Queue';
   insert testGroup;

   QueueSObject testQueue = new QueueSObject();
   testQueue.QueueId = testGroup.id;
   testQueue.SObjectType = 'Lead';
   insert testQueue;

   // Second Queue       
   Group testGroup2 = new Group ();
   testGroup2.Name = 'TestQueue2';
   testGroup2.Type = 'Queue';
   insert testGroup2;

   QueueSObject testQueue2 = new QueueSObject();
   testQueue2.QueueId = testGroup2.id;
   testQueue2.SObjectType = 'Lead';
   insert testQueue2;


   test.starttest();

    //Run test


    //Create Assignment Group
    Assignment_Group_Name__c ag1 = new Assignment_Group_Name__c (Name='TestAG', Type__c = 'Lead');
    insert ag1;        

    //Add Good Queue to Assignment Group
    Assignment_Group_Queues__c agq1 = new Assignment_Group_Queues__c(name=testGroup.Name ,Assignment_Group_Name__c = ag1.id );
    insert agq1;


    //Add User to Assignment Groups Users
    Assignment_Groups__c agu1 = new Assignment_Groups__c (User__c = u1.id, Active__c='True', Group_Name__c = ag1.id, Last_Assignment__c = datetime.valueOf('2009-01-01 21:13:24') );
    insert agu1;

    Lead c2 = new Lead (subject='testcase', tempOwnerID__c=testGroup2.id , OwnerID=testGroup.id); //Set owner ID to Queue
    insert c2;
    update c2;        

    test.stoptest();

}

static testMethod void myTest3() {

    // This code runs as the system user

    User u1;

    try{
      u1 = [select Id from User WHERE IsActive=True AND Profile.Name = 'System Administrator'  LIMIT 1];
    } catch (QueryException qe){

    List<User> users = [SELECT Id, Profile.PermissionsModifyAllData FROM User WHERE IsActive = true LIMIT 1000];

    for(User u : users){
        if(u.Profile.PermissionsModifyAllData = true){
          u1 = u;
          break;
    }
    }

    }

    System.debug(u1);

   //*****Create Queue 

   Group testGroup = new Group ();
   testGroup.Name = 'TestQueue';
   testGroup.Type = 'Queue';
   insert testGroup;

   QueueSObject testQueue = new QueueSObject();
   testQueue.QueueId = testGroup.id;
   testQueue.SObjectType = 'Lead';
   insert testQueue;

   test.starttest();

    //Run test        

    //Create Assignment Group
    Assignment_Group_Name__c ag1 = new Assignment_Group_Name__c (Name='TestAG', Type__c = 'Lead');
    insert ag1;        

    //Add Good Queue to Assignment Group
    Assignment_Group_Queues__c agq1 = new Assignment_Group_Queues__c(name=testGroup.Name ,Assignment_Group_Name__c = ag1.id );
    insert agq1;


    //Add User to Assignment Groups Users
    Assignment_Groups__c agu1 = new Assignment_Groups__c (User__c = u1.id, Active__c='True', Group_Name__c = ag1.id, Last_Assignment__c = datetime.valueOf('2009-01-01 21:13:24') );
    insert agu1;      

    Lead c3 = new Lead (subject='testcase', OwnerID=testGroup.id); //Set owner ID to Queue
    insert c3;
    update c3;

    test.stoptest();

}

static testMethod void myTest4() {

    // This code runs as the system user

    User u1;

    try{
      u1 = [select Id from User WHERE IsActive=True AND Profile.Name = 'System Administrator'  LIMIT 1];
    } catch (QueryException qe){

    List<User> users = [SELECT Id, Profile.PermissionsModifyAllData FROM User WHERE IsActive = true LIMIT 1000];

    for(User u : users){
        if(u.Profile.PermissionsModifyAllData = true){
          u1 = u;
          break;
    }
    }

    }

    System.debug(u1);

   //*****Create Queue 

   Group testGroup = new Group ();
   testGroup.Name = 'TestQueue';
   testGroup.Type = 'Queue';
   insert testGroup;

   QueueSObject testQueue = new QueueSObject();
   testQueue.QueueId = testGroup.id;
   testQueue.SObjectType = 'Lead';
   insert testQueue;


   test.starttest();

    //Run test

    //Create Assignment Group
    Assignment_Group_Name__c ag1 = new Assignment_Group_Name__c (Name='TestAG', Type__c = 'Lead');
    insert ag1;        

    //Add Good Queue to Assignment Group
    Assignment_Group_Queues__c agq1 = new Assignment_Group_Queues__c(name=testGroup.Name ,Assignment_Group_Name__c = ag1.id );
    insert agq1;

      //Test for AG-Queues already assigned to another Assignment Group
    Assignment_Group_Queues__c agq2 = new Assignment_Group_Queues__c(name=testGroup.Name,Assignment_Group_Name__c = ag1.id );
    try {
        insert agq2;
    } catch (DmlException e){
         System.assert(e.getMessage().contains('CUSTOM_VALIDATION_EXCEPTION'), e.getMessage()); 
    } //catch

    test.stoptest();

}
}
2

Here's the source of your problem with your test class:

Lead c3 = new Lead (subject='testcase', OwnerID=testGroup.id); //Set owner ID to Queue

Look up the valid field names for Lead and you'll see that subject is not one of them.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.