I'm testing a class as a community user. Here is the issue. my debugs show that running user is set. My User query returns a user with a contactid but for some strange reason the contact query is empty. The if statement is executed but no contact is returned. I'm sure I'm missing something very simple.
public class myClass{
public myClass(){
Id runningUserId = UserInfo.getUserId();
User user = [SELECT Id, ContactId FROM User WHERE Id =: runningUserId AND IsActive =:true][0];
if(user != null && user.ContactId != null){
Contact userContact = [select id from Contact where id=:user.ContactId][0];
}
}
}
Test Class
@isTest
private class myClass_Test {
static testMethod void myTestClass(){
Id p = [select id from profile where name='Community Profile'].id;
Account ac = new Account(name =' Community Account') ;
insert ac;
Contact con = new Contact(LastName ='testCon',AccountId = ac.Id);
insert con;
User user = new User(alias = 'test123', email='test123@test.com',
emailencodingkey='UTF-8', lastname='Testing', languagelocalekey='en_US',
localesidkey='en_US', profileid = p, country='United States',IsActive =true,
ContactId = con.Id,
timezonesidkey='America/Los_Angeles', username='tester@test.com');
insert user;
system.runAs(user) {
Test.startTest();
myClass controller = new myClass();
Test.stopTest();
}
}
}