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
nandananandana 

Hi... how can i post a big coding??? here it showing allow only 255 characters.

Abhilash Mishra 13Abhilash Mishra 13
why you need to put big code, you can simply share the issue. and relevent lines of the code. where you are getting error.
nandananandana
Hi Abhilash,

Definitly i agree this. But i have a problem to write test class. That's why i asked to post my apex class. 
Thank you. 



Regards,
Nandana
Abhilash Mishra 13Abhilash Mishra 13
Post the Method or lines, that you have not  been able to cover  or you need help with?
Abhilash Mishra 13Abhilash Mishra 13
Hi Nandana, did you try using code sample format, It will allow you.
see this.
trigger updateLicense on User (Before Insert, After Insert, Before Update, After Update) 
{
    User cfU = trigger.new[0];
    IF (cfU.UserType != 'CsnOnly')       
    {
    Integer lGroups = [SELECT count() FROM License__c];
            
        ID gID = License__c.SObjectType.getDescribe().getRecordTypeInfosByName().get('License Group').getRecordTypeId();
                
        IF (Trigger.isBefore)
        {
            ID orgId = UserInfo.getOrganizationId();
            IF ((orgId != Label.PROD_ORG_ID) && (lGroups == 0))
                LicenseUser.createLicenseGroups();    
            IF ((Test.isRunningTest()) && (lGroups == 0))
                TestLicenseUser.createTestGroups();

            MAP<String,ID> nuMap = new MAP<String,ID>();
            MAP<ID,Decimal> usedMap = new MAP<ID,Decimal>();
            MAP<ID,Decimal> ownedMap = new MAP<ID,Decimal>(); 
            List<String> inActiveUser = new List<String>();

            for (License__c l : [SELECT ID,Owner_Group_Name__c, Licenses_Used__c, Licenses_Owned__c from License__c where RecordTypeId = :gID]) 
            {
               nuMap.put(l.Owner_Group_Name__c,l.ID);   
               usedMap.put(l.ID,l.Licenses_Used__c);
               ownedMap.put(l.ID,l.Licenses_Owned__c);
            }
            
            system.debug('nuMap------------'+nuMap);
            integer uCount = 0;
            for(User u: Trigger.New)
            {                                
                ID ownerId = nuMap.get(u.SF_License_Owner_Type__c);
                system.debug('ownerId------------'+ownerId);
                system.debug('usedMap------------'+usedMap);
                Decimal usedCnt = usedMap.get(ownerId);
                
                system.debug('usedCnt------------'+usedCnt);
                          
                IF (u.SF_License_Owner_Type__c == null)
                    u.SF_License_Owner_Type__c.addError('The SF License Owner/Type field must be populated.');
            
                IF (u.UserType == 'CsnOnly')
                {
                    uCount++;
                    continue;
                }            

                Boolean noLicense = (usedCnt >= ownedMap.get(ownerId)),
                        deActivate = false,
                        updActive = false,
                        updOwner = false;
                        
                IF (Trigger.isInsert)
                { 
                    IF (noLicense) {deActivate = true;}
                }
            
                IF (Trigger.isUpdate)
                {
                    updActive = (u.IsActive != trigger.old[uCount].IsActive);
                    updOwner = (u.SF_License_Owner_Type__c != trigger.old[uCount].SF_License_Owner_Type__c);
                
                    IF (updActive)        //IF isActive flag changed on user record
                    {
                        IF (u.isActive)    //IF user was activated
                        {
                            IF (noLicense) {deActivate = true;}        //IF no license(s) then de-activate user
                        }
                        ELSE {deActivate = true;}        //User de-activated, flag to update license counts
                    }
                
                    IF (updOwner)        //IF SF_License_Owner_Type__c changed
                    {
                        IF ((u.SF_License_Owner_Type__c != null) && (u.isActive))        //IF License Owner populated and user is active
                        {
                            IF (noLicense) {deActivate = true;}        //IF no license(s) then de-activate user
                        }
                    }
                }
            
                IF (deActivate)
                {                               
                    IF ((!Trigger.isInsert) && (trigger.old[uCount].SF_License_Owner_Type__c != null))    //IF de-activating a user while
                    {                                                                             //License Owner populated or changed
                        ID ownerId2 = nuMap.get(trigger.old[uCount].SF_License_Owner_Type__c);                  
                        Decimal usedCnt2 = usedMap.get(ownerId2);

                        usedMap.remove(ownerId2);
                        usedCnt2--;        //decrement license used count by 1
                        usedMap.put(ownerId2,usedCnt2);  
                    }
                        
                    IF (u.isActive)        //De-Activating user
                    {
                        Trigger.New[uCount].isActive = FALSE;
                        inActiveUser.add(u.firstname + ' ' + u.lastname + ' using License from Group: ' + u.SF_License_Owner_Type__c);                  
                    }
                }
                ELSE        //Activating user
                {
                    system.debug('usedMap before remove------------'+usedMap);
                    usedMap.remove(ownerId);
                    system.debug('usedMap after remove------------'+usedMap);
                    system.debug('usedCnt-----------'+usedCnt);
                    usedCnt++;        //increment license used count by 1
                    usedMap.put(ownerId,usedCnt);            
                }        
                uCount++; 
          
                IF (InActiveUser.size() > 0)        //Notify the user triggering invocation via chatter and email    
                {                                   //that user(s) was/were de-activated due to insufficient licenses
                    Messaging.reserveSingleEmailCapacity(2);  
                    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();

                    User u2=[Select email from User where id=:UserInfo.getUserId()];
                    List<String> UserEmail = new List<String>();
                    UserEmail.add(u2.email);
            
                    mail.setToAddresses(UserEmail);
                    mail.setSenderDisplayName('Salesforce Support');
                    mail.setSubject('IMPORTANT: Insufficient Licenses available to Activate users!');

                    String body = 'The following users were de-activated due to insufficient licenses being available: \n';
                    for(Integer i = 0; i < InActiveUser.size(); i++)
                    {
                        body = body + InActiveUser.get(i) + '\n';
                    }
                
                    mail.setPlainTextBody(body);
            
                    postChatterFeedToUser.postToUser(UserInfo.getUserId(),body);
                    Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });        
                }
            }
        }

        IF (Trigger.isAfter)
        {        
            List<ID> delUsers = new List<ID>();
            MAP<ID,String> addUsers = new MAP<ID,String>();

            integer userCount = 0;        
            for(User u2 : Trigger.New) 
            {                       
                IF (u2.UserType == 'CsnOnly')
                {
                    userCount++;
                    continue;
                }

                Boolean updActive = false,
                        updOwner = false,
                        isAdd = false,
                        isDel = false;            
                         
                IF (Trigger.isInsert)
                {
                    IF(u2.IsActive) {isAdd = true;}          //IF user is being activated, add to License table      
                }
            
                IF (Trigger.isUpdate)
                {
                    updActive = (u2.IsActive != trigger.old[userCount].IsActive);
                    updOwner = (u2.SF_License_Owner_Type__c != trigger.old[userCount].SF_License_Owner_Type__c);
                
                    IF (updActive)        //IF isActive flag changed on user record
                    {
                        IF (u2.isActive) {isAdd = true;}        //IF user is being activated, add to License table
                        ELSE{isDel = true;}                     //ELSE delete it from License table
                    }
                
                    IF ((updOwner) && (u2.isActive))        //IF updating License Owner on active user
                    {
                        isDel = true;        //Delete from previous group (SF_License_Owner_Type__c before) on License table if needed
                    
                        IF (u2.SF_License_Owner_Type__c != null)
                        {
                            isAdd = true;        //Add to the current group (SF_License_Owner_Type__c after) on License
                        }
                    }
                }
            
                IF (isAdd)
                {
                    addUsers.put(u2.ID,u2.SF_License_Owner_Type__c);        //Add user to license addition list
                }
        
                IF (isDel)
                {
                    IF (trigger.old[userCount].SF_License_Owner_Type__c != null)        //Only delete if prior value existed
                    {
                        delUsers.add(trigger.old[userCount].Id);        //Add user to license removal list
                    }
                }
                                           
                UserCount++;
            }  
    
            IF (delUsers.size() > 0)
            {
                LicenseUser.delLicenseUser(delUsers);        
            }
    
            IF (addUsers.size() > 0)
            {
                LicenseUser.addLicenseUser(addUsers);
            }
        }
    }    
}