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
SS KarthickSS Karthick 

Test code

Hi folks,
   Can anyone give me the test code for My apex Trigger;
Trigger:
     trigger Test_Share on Test__c (after insert) {
    Id UserId=UserInfo.getUserId();
    Boolean bln=false;
    List<Id> ParentUserId = new List<Id>();
    User u = new User();
    while(bln == false){
       
      u = [select id,ManagerId from user where id = :UserId];
       if(u.ManagerId == null){
           
          bln = true;
      }
       else{
          ParentUserId.add(u.ManagerId);
          UserId = u.ManagerId;
      }
  
  }
  
    //ID groupId = [select id from Group where Type = 'Organization'].id;
    Id parent;
        if(trigger.isInsert){
   
    List<Test__Share> testShare= new List<Test__Share>();
         for(Test__c t : trigger.new){
            
           parent=t.Id;
          
           for(Integer j=0;j<ParentUserId.size();j++)
           {
               
                //string ob='ts'+coun;
                Test__Share ob= new Test__Share();
                ob.ParentId = parent;
                ob.UserOrGroupId =ParentUserId[j];
               
                system.debug('Id='+ParentUserId[j]);


       
                ob.AccessLevel = 'edit';

                ob.RowCause = Schema.Test__Share.RowCause.Test_Access__c;
                testShare.add(ob);
                //coun++;
                              
           }
        }
       
            if(!testShare.isEmpty())
                insert testShare;
           
           
    }
}



My test scenario :
If user1 creates record on test object then it is visible to all 49 users and If user50 creates record then it is visble to all user
Hierarchy is
user1-->user2-->user3-->.....user50
user1's manager is user2 and user2's manager is usr3 and etc



My test code is:
@isTest
private class TestUserCreate {
     static testMethod void testShares() {
       
        List<Test__c> deleteTestData= [select id from Test__c limit 50000];
        if(deleteTestData.size()>0)
            delete deleteTestData;
       
        Set<ID> ids = new Set<ID>();
        List<User> users = new List<User>();
        List<User> updatedusers = new List<User>();
        String pid = [Select id from Profile where Name='Test Reps'].Id;
        for(integer i=1; i<=50; i++){
           
  
            User tuser = new User(  firstname = 'test',
                            lastName = 'Name'+i,
                            email = 'testname'+i+'@email.com',
                            Username = 'testname'+i+'@email.com',
                            EmailEncodingKey = 'ISO-8859-1',
                            Alias = 'test',
                            TimeZoneSidKey = 'America/Los_Angeles',
                            LocaleSidKey = 'en_US',
                            LanguageLocaleKey = 'en_US',
                            ProfileId = pid);
            users.add(tuser);
                           
        }
        insert users;
        for(Integer i=0;i<users.size();i++){
                             
            if(i!=49){
                users[i].ManagerId=users[i+1].Id;
                             
            }
           
        }
       update users;
        for(user u:users){
            System.debug('LastName='+u.LastName);
            System.debug('UserId='+u.Id);
            System.debug('UserManager Id='+u.ManagerId);
        }
        Test__c t=new Test__c();
        t.Email__c='test@gmail.com';
        t.Mobile__c='12345678';
        t.OwnerId=users[0].id;
       
        insert t;
        system.debug('Test t='+t);
       
        List<Test__Share> testsha = [select id from Test__Share where AccessLevel = 'edit' ];
        System.debug('TestShares='+testsha.size());
System.assertEquals( testsha.size(),49);
    }
}



The above test code covers only 62%
Please Help!

Best Answer chosen by SS Karthick
SaketJoshiSaketJoshi
First of all,
while(bln == false){
       
      u = [select id,ManagerId from user where id = :UserId];
       if(u.ManagerId == null){
           
          bln = true;
      }
       else{
          ParentUserId.add(u.ManagerId);
          UserId = u.ManagerId;
      }
Remove the SOQL from within the loop. You should never do that coz of the governer limits.

All Answers

SaketJoshiSaketJoshi
First of all,
while(bln == false){
       
      u = [select id,ManagerId from user where id = :UserId];
       if(u.ManagerId == null){
           
          bln = true;
      }
       else{
          ParentUserId.add(u.ManagerId);
          UserId = u.ManagerId;
      }
Remove the SOQL from within the loop. You should never do that coz of the governer limits.
This was selected as the best answer
Sagar PareekSagar Pareek
Hi Karthick,

I am afraid you will too many soql (101) error. As you have SOQL query being fired in for loop.

SS KarthickSS Karthick
Hy Saket Joshi,
Thanks for your reply....
I know that it hits governor limit.. but i only create 50 user 


Please Help!