Search code examples
salesforceapex-codeapexsoql

First error: INVALID_CROSS_REFERENCE_KEY, Assigned To ID: owner cannot be blank: [OwnerId]


I am writing a test for my controller. For that I have to insert an event in the test database.

My test method is:

static TestMethod void Test1_TestInsertWithValue()
{
    Meeting_Master__c master = new Meeting_Master__c();
    Event event = new Event();
    Profile p = [SELECT Id From Profile WHERE Name='Standard User'];
    User u2 = new User(Alias = 'newUser', Email = '[email protected]', EmailEncodingKey = 'UTF-8', LastName = 'Testing',
    LanguageLocaleKey = 'en_US', LocaleSidKey='America/Los_Angeles', UserName='[email protected]', ProfileId=p.Id);

    event.OwnerId = u2.Id;
    event.StartDateTime = datetime.newInstance(2008, 12, 1);
    event.EndDateTime = datetime.newInstance(2008, 12, 30);
    event.subject = 'call';
    event.WhatId = master.Id;
    insert master;
    insert event;
    ...........
}

When the insert event occurs, I am facing this error:

System.DmlException: Insert failed. First exception on row 0; first error: INVALID_CROSS_REFERENCE_KEY, Assigned To ID: owner cannot be blank: [OwnerId]

How do I rectify this error?


Solution

  • As the first option you can insert test user:

     @isTest
     private class test{
    
         static TestMethod void Test1_TestInsertWithValue() {
             Meeting_Master__c master=new Meeting_Master__c();
             Event event =new Event();
             Profile p=[SELECT Id From Profile WHERE Name='Standard User'];
             User u2 =new User( Alias = 'newUser1' ,
                                Email ='[email protected]',
                                EmailEncodingKey = 'UTF-8',
                                LastName = 'Testing',
                                LanguageLocaleKey='en_US',
                                LocaleSidKey='en_US', // changed for to avoid: INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST, Locale: bad value for restricted picklist field: America/Los_Angeles
                                UserName='[email protected]',
                                ProfileId=p.Id,
                                TimeZoneSidKey    = 'America/Los_Angeles');
             insert u2;
    
             event.OwnerId = u2.Id;
             event.StartDateTime = datetime.newInstance(2008, 12, 1);
             event.EndDateTime = datetime.newInstance(2008,12,10); // changed to 10-12-2008 for to avoid: FIELD_INTEGRITY_EXCEPTION, Event duration can not be longer than 14 days
             event.subject='call';
             event.WhatId=master.Id;
             Insert master;
             insert event;
         }
    
     }
    

    The second option is a trying to use System.runAs() http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_testing_tools_runas.htm

     @isTest
     private class test{
    
         static TestMethod void Test1_TestInsertWithValue() {
             Meeting_Master__c master=new Meeting_Master__c();
             Event event =new Event();
             Profile p=[SELECT Id From Profile WHERE Name='Standard User'];
             User u2 =new User( Alias = 'newUser1' ,
                                Email ='[email protected]',
                                EmailEncodingKey = 'UTF-8',
                                LastName = 'Testing',
                                LanguageLocaleKey='en_US',
                                LocaleSidKey='en_US', 
                                UserName='[email protected]',
                                ProfileId=p.Id,
                                TimeZoneSidKey    = 'America/Los_Angeles');
    
             Insert master;
    
             System.runAs(u2) {
                event.StartDateTime = datetime.newInstance(2008, 12, 1);
                event.EndDateTime = datetime.newInstance(2008,12,10);
                event.subject='call';
                event.WhatId=master.Id;
    
                insert event;
             }
         }
    
     }