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
Javier EsquivelJavier Esquivel 

need help with a test class don get the coverage

hi, can you help me. im trying to get the coverage of a class but im only have 68% and i cant get more.

public without sharing class TTRelacionados {
    
    public List<Case> ttPadres{get;set;}
    public List<FieldWrap> campos{get;set;}
    public Case TTPadre{get;set;}
    public List<CasoRelacionado> casosRelacionados{get;set;}
    public List<CaseComment> comentarios{get;set;}
    public List<SectionWrap> secciones{get;set;}
    public String newCIDS{get;set;}
    public List<CIDWrap> agregarCIDSResultado{get;set;}
    public List<CaseUpdateWrap> actualizarResultado{get;set;}
    
    public String previousSortField {get; set;}
    
    public TTRelacionados(){
        
    }
    
    public TTRelacionados(ApexPages.StandardController controller){
        
    }
    
    
    public void initTTPadres(){
        
        this.ttPadres = new List<Case>();
        
        for(Case record:[select Id, CaseNumber, Subject, Status, Fecha_y_Hora_de_Inicio__c, Fecha_y_Hora_de_Fin__c, RecordTypeId, RecordType.Name from Case where TT_Padre__c = true and Status != 'Cerrado']){
            
            this.ttPadres.add(record);
            
        }
        
        //superSort.sortList(this.ttPadres,'CaseNumber','desc');
        
    }
    
    public void doSortByNumber(){
        String order = 'asc';
        
        /*This checks to see if the same header was click two times in a row, if so 
it switches the order.*/
        if(this.previousSortField == 'CaseNumber'){
            order = 'desc';
            this.previousSortField = null;
        }else{
            this.previousSortField = 'CaseNumber';
        }
         //To sort the table we simply need to use this one line, nice!
        superSort.sortList(this.ttPadres,'CaseNumber',order);
    }
    
    public void doSortByStatus(){
        String order = 'asc';
        
        /*This checks to see if the same header was click two times in a row, if so 
it switches the order.*/
        if(this.previousSortField == 'Status'){
            order = 'desc';
            this.previousSortField = null;
        }else{
            this.previousSortField = 'Status';
        }
        
        //To sort the table we simply need to use this one line, nice!
        superSort.sortList(this.ttPadres,'Status',order);
    } 
    
    public void initPageLayout(){
        
        String qid = ApexPages.currentPage().getParameters().get('id');
        //this.TTPadre = [select id, dany__c from Case where id= :qid];
        
        //Consultamos el tipo de registro del caso padre
        Case tiporegistrocaso = [select RecordTypeId, RecordType.Name from Case where Id = :qid];
        
        System.debug('tiporegistrocaso:'+tiporegistrocaso);
        
        this.campos = new List<FieldWrap>();
        
        this.secciones = new List<SectionWrap>();
        
        Map<String, Schema.SobjectField> fields = Schema.SobjectType.Case.fields.getMap();
        
        System.debug('fields:'+fields);
        
        String fieldstr = '';
        
        System.debug('tipo registro:'+tiporegistrocaso.RecordType.Name);
        
        
        //Validacion de existencia de secciones especificas para este tipo de registro, o en su defecto usar una default
        List<Seccion_TTRelacionados__c> seccionesdisponibles = new List<Seccion_TTRelacionados__c>();
        
        seccionesdisponibles = [select Id from Seccion_TTRelacionados__c where Tipo_de_registro__c = :tiporegistrocaso.RecordType.Name];
        
        String tiporegistrostr;
        
        if(seccionesdisponibles.size()>0){
            
            tiporegistrostr = tiporegistrocaso.RecordType.Name;
            
        }else{
            
            tiporegistrostr = 'Ventana de Mantenimiento';
            
        }
        
        
        //Aqui vamos a consultar los campos asignados para ese tipo de registro
        for(Seccion_TTRelacionados__c record:[select Id,Name,(select Nombre_API__c,Read_Only__c from Campos_TTRelacionados__r Order by Orden__c) from Seccion_TTRelacionados__c where Tipo_de_registro__c = :tiporegistrostr Order by Orden__c]){
            
            System.debug('seccion:'+record);
            
            System.debug('record.Campos_TTRelacionados__r:'+record.Campos_TTRelacionados__r);
            
            //Hacemos una instancia de SectionWrap
            SectionWrap section = new SectionWrap();
            section.sectionName = record.Name;
            
            this.secciones.add(section);
            
            for(Campo_TTRelacionados__c field:record.Campos_TTRelacionados__r){
                
                System.debug('field:'+field.Nombre_API__c);
                
                if(fields.containsKey(field.Nombre_API__c)){
                    
                    if (fields.get(field.Nombre_API__c).getDescribe().isAccessible() && field.Nombre_API__c != 'id'){
                        
                        fieldstr += field.Nombre_API__c + ',';
                        
                        System.debug('fieldstr:'+fieldstr);
                        
                        FieldWrap fw = new FieldWrap();
                        fw.campo = field.Nombre_API__c;
                        if(field.Read_Only__c){
                            fw.readonly = true;
                        }
                        this.campos.add(fw);
                        section.campos.add(fw);
                        
                    }
                    
                }
                
            }
            
        }
        
        
        fieldstr += 'Id';
        
        System.debug('query:'+'select ' + fieldstr + ' from Case where Id = \''+ qid + '\'');
        
        this.TTPadre = database.query('select ' + fieldstr + ' from Case where Id = \''+ qid+'\'');
        
        
        
        //Buscamos los comentarios relacionados con el caso
        this.comentarios = new List<CaseComment>();
        for(CaseComment record:[select CommentBody, IsPublished, CreatedDate from CaseComment where ParentId = :this.TTPadre.Id order by CreatedDate DESC]){
            
            this.comentarios.add(record);
            
        }
        
        try{
            
            System.debug('this.TTPadre.CaseNumber:'+this.TTPadre.CaseNumber);
            
            //return;
            
            //Buscamos los casos relacionados con este TTPAdre
            this.casosRelacionados = new List<CasoRelacionado>();
            for(Case record:[select Id, CaseNumber, Circuit_ID__c, AssetId, Status, Account.Name, Asset.Name from Case where Relacionado_con_el_TT__c = :this.TTPadre.CaseNumber and Status != 'Cerrado']){
                
                System.debug('casorel:'+record);
                
                CasoRelacionado casorel = new CasoRelacionado();
                casorel.caso = record;
                casorel.isSelected = true;
                this.casosRelacionados.add(casorel);
                
            }
            
        }catch(Exception e){
            
        }
        
    }
    
    public PageReference Actualizar(){
        
        this.actualizarResultado = new List<CaseUpdateWrap>();
        
        PageReference sigpag = null;
        
        //Inicializamos los campos por actualizar
        List<String> camposporactualizar = new List<String>();
        String camposporactualizarstr = 'Id';
        //Corremos por los campos seleccionados para actualizar
        for(FieldWrap record:campos){
            
            if(record.selected == true){
                
                camposporactualizar.add(record.campo);
                camposporactualizarstr += ',' + record.campo;
                System.debug('campo elegido:'+ record.campo + ' valor:' + TTPadre.get(record.campo));
                
            }
            
        }
        //Validams que existan campos seleccionados para actualizar
        if(camposporactualizar.size()<=0){
            
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.WARNING, 'No se selecciono ningun campo por actualizar, debe de selecionarlo usando las casillas junto a los campos que desea actualizar.');
            ApexPages.addMessage(myMsg);
            
            return sigpag;
            
        }
        
        //Inicializamos los casos por actualizar
        List<Case> casosporactualizar = new List<Case>();
        //Corremos por los casos seleccionados para actualizar
        for(CasoRelacionado record:this.casosRelacionados){
            
            if(record.isSelected == true){
                
                casosporactualizar.add(record.caso);
                
            }
            
        }
        //Validmos que existan casos relacionados por actulizar
        if(casosporactualizar.size()<=0){
            
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.WARNING, 'No se selecciono ningun caso relacionado por actualizar.');
            ApexPages.addMessage(myMsg);
            
            return sigpag;
            
        }
        
        //Cargamos una vez mas el caso padre pero solo con los campos elegidos para actualizar
        System.debug('queryTTPAdre:'+'select '+ camposporactualizarstr + ' from Case where Id = \'' + this.TTPadre.Id + '\'');
        Case ttpadreoriginal = database.query('select '+ camposporactualizarstr + ' from Case where Id = \'' + this.TTPadre.Id + '\'');
        //Agregamos el caso padre a los casos por actualizar
        casosporactualizar.add(ttpadreoriginal);
        
        //Corremos por los casos y por los campos asignando el nuevo valor
        for(Case record:casosporactualizar){
            
            for(String campo:camposporactualizar){
                
                record.put(campo,this.TTPadre.get(campo));
                
            }
            
        }
        
        //Hacemso la actualizacion
        try{
            
            List<Database.SaveResult> resultados = Database.update(casosporactualizar,false);
            
            
            //Iniciamos un contador
            Integer a = 0;
            
            //Corremos por los resultados
            for(Database.SaveResult result:resultados){
                
                Case caso = casosporactualizar[a];
                CaseUpdateWrap cuw = new CaseUpdateWrap();
                cuw.caso = caso;
                
                if(result.isSuccess()){
                    
                    cuw.isSuccess = true;
                    cuw.msg = 'El caso fue actualizado correctamente';
                    
                }else{
                    
                    cuw.isSuccess = false;
                    cuw.msg = 'El caso no pudo ser actualizado';
                    
                }
                
                this.actualizarResultado.add(cuw);
                
                a++;
            }
            
        }catch(Exception e){
            
        }
        
        sigpag = Page.TTRelacionados3;
        
        return sigpag;
        
    }
    
    public PageReference AgregarCIDS(){
        
        return Page.TTRelacionados4;
        
    }
    
    public PageReference Agregar(){
        
        /*
Por hacer

* Copiar los comentarios de caso original a todos los casos hijo
* Envio del email de notificacion, que el usaurio pueda seleccionar entre las plantillas disponibles para tal efecto

*/
        
        
        //Buscamos el recordtype correspondiente a ventana de mantenimiento
        RecordType vmrecordtype = [select Id from RecordType where SobjectType = 'Case' and Name = 'Ventana de Mantenimiento' limit 1];
        
        //Buscamos el recordtype correspondiente a problema operativo
        RecordType ttrecordtype = [select Id from RecordType where SobjectType = 'Case' and Name = 'Trouble ticket' limit 1];
        
        PageReference sigpag = null;
        
        if(this.newCIDS == null || this.newCIDS == ''){
            
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.WARNING, 'No se ingreso ninguna lista de CIDS.');
            ApexPages.addMessage(myMsg);
            
            return sigpag;
        }
        
        List<String> lines = this.newCIDS.split('\n');
        
        //Inicializamos una lista de CIDS
        Set<String> cids = new Set<String>(); 
        
        //Inicializamos un mapa para poder reportar sobre el exito de un particular CID
        Map<String,CIDWrap> cidsmap = new Map<String,CIDWrap>();
        
        for(String line:lines){
            
            System.debug('line:'+line);
            //Recopilamos los numeros de CID en una lista
            
            System.debug('cid:'+line.split('_')[0].trim());
            
            cids.add(line.split('_')[0].trim());
            
            CIDWrap cidw = new CIDWrap();
            cidw.CID = line.split('_')[0].trim();
            
            cidsmap.put(line.split('_')[0].trim(),cidw);
            
        }
        
        System.debug('cidsmap:'+cidsmap);
        
        System.debug('cids:'+cids);
        
        //Inicializamos una lista de assets encintrados por su cid
        Map<String,Asset> servicios = new Map<String,Asset>();
        
        //Traemos los CDIS que se estan buscando
        for(Asset record:[select Id, AccountId, ContactId, Name, Status, Circuit_ID__c from Asset where Circuit_ID__c IN :cids and ((Status = 'Activo' or Status = 'Backlog') or (Account.Segmento_de_Cuenta__c = 'PYMES Cablecom' and (Status = 'Activo' or Status = 'Backlog' or Status = 'Cancelado')))]){
            //for(Asset record:[select Id, AccountId, ContactId, Name, Status, Circuit_ID__c from Asset where Circuit_ID__c IN :cids and (Status = 'Activo' or Status = 'Backlog')]){
            System.debug('servicio:'+record);
            servicios.put(record.Circuit_ID__c,record);
        }
        
        //Primera validacion, debemos de tener al menos un servicio localizado
        if(servicios.size()<=0){
            
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.WARNING, 'No se localizo ningún servicio con los identificadores provistos.');
            ApexPages.addMessage(myMsg);
            
            return sigpag;
            
        }
Javier EsquivelJavier Esquivel
this is the continue of the class...

        //inicializamos un set de ids de cuentas
        Set<Id> accids = new Set<Id>();
        
        //Corremos por los servicios localizados coleccionado el id de la cuenta a la que pertenecen
        for(Asset record:servicios.values()){
            
            accids.add(record.AccountId);
            
        }
        
        //Inicializamos un mapa de cuentas
        //Consultamos los contactos de todas las cuentas
        Map<Id,Account> mapaccounts = new Map<Id,Account>([select Id,(select Id, FirstName, LastName, Email, Problema_operativo__c, Ventana_mantenimiento__c, Nivel_de_Escalamiento__c, Name from Contacts) from Account where Id IN :accids]);
        
        //Inicializamos una lista de casos por crear
        List<Case> casosporcrear = new List<Case>();
        
        System.debug('cidsmap.keySet:'+cidsmap.keySet());
        
        System.debug('servicios:'+servicios);
        
        //Corremos por los servicos enviados originalmente
        for(String record:cidsmap.keySet()){
            
            //Buscamos el servisio en el mapa de servicios
            if(!servicios.containsKey(record)){
                
                cidsmap.get(record).msg = 'No se localizo nigun servicio con ese identificador.';
                continue;
                
            }
            
            //Obtenemos el servicio
            Asset servicio = servicios.get(record);
            
            //Verificamos si no esta activo o en backlog
            /*if(servicio.Status != 'Activo' && servicio.Status != 'Backlog'){

cidsmap.get(record).msg = 'El servicio no esta activo o en backlog.';
continue;

}*/
            
            cidsmap.get(record).servicio = servicio;
            
            //Obtenemos la cuenta y los contactos asociados a este servicio
            Account cuenta = mapaccounts.get(servicio.AccountId);
            
            if(cuenta.Contacts.size()<=0){
                
                cidsmap.get(record).msg = 'No se localizo ningun contacto relacionado con la cuenta, el caso no fue creado.';
                continue;
                
            }
            
            //Inicializamos la variable del contacto adecuado
            Contact contactoadecuado;
            
            //Aqui la logica para localizar al conatcto adecuado
            
            //Si es ventana de mantenimiento
            if(this.TTPadre.RecordTypeId == vmrecordtype.Id){
                
                //Buscamos en primera instancia al contacto de ventanas de mantenimiento
                //Loopeamos por los contactos de la cuenta
                for(Contact cont:cuenta.Contacts){
                    if(cont.Ventana_mantenimiento__c == true){
                        contactoadecuado = cont;
                        break;
                    }    
                }
                
                //Si aun no encontramos al contacto adecuado buscamos al de primer nivel de escalamiento
                for(Contact cont:cuenta.Contacts){
                    if(cont.Nivel_de_Escalamiento__c == '1er Nivel Escalamiento'){
                        contactoadecuado = cont;
                        break;
                    }
                }
                
                //Si es problema operativo
            }else if(this.TTPadre.RecordTypeId == ttrecordtype.Id){
                
                //Buscamos en primera instancia al contacto de problemas operativos
                for(Contact cont:cuenta.Contacts){
                    if(cont.Problema_operativo__c == true){
                        contactoadecuado = cont;
                        break;
                    }    
                }
                //Si aun no tenemos al contacto adecuado buscamos al de primer nivel de escalamiento
                for(Contact cont:cuenta.Contacts){
                    if(cont.Nivel_de_Escalamiento__c == '1er Nivel Escalamiento'){
                        contactoadecuado = cont;
                        break;
                    }    
                }
                //Si no es ventana de mantenimiento ni problea operativo buscamos al contacto de primer nivel de escalamiento
            }else{
                
                for(Contact cont:cuenta.Contacts){
                    if(cont.Nivel_de_Escalamiento__c == '1er Nivel Escalamiento'){
                        contactoadecuado = cont;
                        break;
                    }    
                }
                
            }
            
            
            //Si no tenemos contacto adecuado
            if(contactoadecuado == null){
                
                cidsmap.get(record).msg = 'No se localizo ningun contacto adecuado para este servicio, el caso no fue creado.';
                continue;
                
            }
            
            cidsmap.get(record).contacto = contactoadecuado;
            
            //Clonamos el caso original
            Case tthijo = this.TTPadre.clone(false,true,false,false);
            
            //Cambiamos las referencias de contacto, asset y CID
            tthijo.ContactId = contactoadecuado.Id;
            tthijo.AssetId = servicio.Id;
            tthijo.Circuit_ID__c = servicio.Circuit_ID__c;
            tthijo.Relacionado_con_el_TT__c = this.TTPadre.CaseNumber;
            
            //Agregsmos el caso clonado a una lista de casos por crear
            casosporcrear.add(tthijo);
            
            
        }
        
        if(casosporcrear.size()<=0){
            
            this.agregarCIDSResultado = cidsmap.values();
            sigpag = Page.TTRelacionados5;
            
            return sigpag;
            
        }
        
        //Creamos los casos
        List<Database.Saveresult> resultados = Database.insert(casosporcrear,false);
        
        //Iniciamos un contador para saber en que posicion del array de casos por crear localizar el objeto que se estaba tratando de crear
        Integer a = 0;
        
        //Corremos por los resultados
        for(Database.Saveresult resultado:resultados){
            
            Case tthijo = casosporcrear[a];
            
            if(resultado.isSuccess()){
                
                cidsmap.get(tthijo.Circuit_ID__c).msg = 'El caso fue creado con exito.';
                cidsmap.get(tthijo.Circuit_ID__c).isSucces = true;
                cidsmap.get(tthijo.Circuit_ID__c).caso = tthijo;
                
            }else{
                
                
                String errormsg = '';
                
                for(Database.Error error:resultado.getErrors()){
                    
                    errormsg += error.getMessage();
                    
                }
                
                cidsmap.get(tthijo.Circuit_ID__c).msg = 'El caso no pudo ser creado. ' + errormsg;
                
            }
            
            a++;
            
        }
        
        System.debug('cidsmap:'+cidsmap);
        
        this.agregarCIDSResultado = cidsmap.values();
        
        sigpag = Page.TTRelacionados5;
        
        return sigpag;
        
    }
    
    
    public PageReference RegresarTTPadre(){
        
        PageReference sigpag = Page.TTRelacionados2;
        sigpag.getParameters().put('id',this.TTPadre.Id);
        
        return sigpag;
        
    }
    
    public class FieldWrap{
        
        //public Schema.SobjectField campo;
        public String campo{get;set;}
        public Boolean selected{get;set;}
        public Boolean readonly{get;set;}
        
        public FieldWrap(){
            
            this.readonly = false;
            
        }
        
    }
    
    public class SectionWrap{
        
        public String sectionName{get;set;}
        public List<FieldWrap> campos{get;set;}
        
        public SectionWrap(){
            
            this.campos = new List<FieldWrap>();
            
        }
        
    }
    
    public class CasoRelacionado{
        
        public Case caso{get;set;}
        public Boolean isSelected{get;set;}
        
    }
    
    public class CIDWrap{
        
        public String CID{get;set;}
        public Boolean isSucces{get;set;}
        public Asset servicio{get;set;}
        public Contact contacto{get;set;}
        public String msg{get;set;}
        public Case caso{get;set;}
        
        public CIDWrap(){
            
            this.isSucces = false;
            
        }
        
    }
    
    public class CaseUpdateWrap{
        
        public Case caso{get;set;}
        public Boolean isSuccess{get;set;}
        public String msg{get;set;}
        
    }
  
Javier EsquivelJavier Esquivel
and my test class

  static testMethod void TTRelacionadosTest(){
    
        RecordType recordtyperec = [select Id,Name from RecordType where SobjectType = 'Case' and Name = 'Ventana de Mantenimiento' limit 1];
        RecordType recordtyperec1 = [select Id,Name from RecordType where SobjectType = 'Case' limit 1];
        Seccion_TTRelacionados__c section = new Seccion_TTRelacionados__c();
        section.Tipo_de_registro__c = recordtyperec.Name;
        section.Name = 'Test';
        
        insert section;
        
        Campo_TTRelacionados__c campo = new Campo_TTRelacionados__c();
        campo.Seccion__c = section.Id;
        campo.Name = 'Test';
        campo.Nombre_API__c = 'Subject1';
        
        insert campo;
        
        Account acc = new Account();
        acc.Name = 'TestAcc';
        acc.Ejecutivo_Backup__c = 'Jesus Portilla';
        acc.Ejecutivo_de_Servicio_a_Cliente__c = 'Jesus Portilla';
        
        insert acc;
        
        Contact cont = new Contact();
        cont.AccountId = acc.Id;
        cont.Ventana_mantenimiento__c = true;
        cont.FirstName = 'test';
        cont.LastName = 'test';
        
        insert cont;
       
        Asset asset = new Asset();
        asset.AccountId = acc.Id;
        asset.Circuit_ID__c = 'TEST-123';
        asset.Name = 'Internet Test';
        asset.Status = 'Activo';
        
        insert asset;
        
        Case caso = new Case();
        caso.Subject = 'Test';
        caso.AccountId = acc.Id;
        caso.RecordTypeId = recordtyperec.Id;
        caso.TT_Padre__c = true;
        caso.Reason= 'SR MOV';
        caso.Circuit_ID__c= '8626-ETH-039';
        
        insert caso;
        
        CaseComment comentario = new CaseComment();
        comentario.CommentBody = 'test';
        comentario.ParentId = caso.Id;
        
        insert comentario;
        
        Case casorel = new Case();
        casorel.Subject = 'Test';
        casorel.AccountId = acc.Id;
        casorel.RecordTypeId = recordtyperec.Id;
        casorel.Relacionado_con_el_TT__c = caso.CaseNumber;
        
        insert casorel;
        
        casorel.status= 'closed';
        update casorel;
        
        
        TTRelacionados TTR = new TTRelacionados();
        
        TTR.initTTPadres();
        
        PageReference pageRef = Page.TTRelacionados2;
        
        Test.setCurrentPage(pageRef);
        
        ApexPages.currentPage().getParameters().put('id',caso.Id);
        
        TTR.initPageLayout();
        
        PageReference pag = TTR.Actualizar();
        
        PageReference pag2 = TTR.AgregarCIDS();
        
        TTR.newCIDS = 'TEST-123_Prueba';
        
        PageReference pag3 = TTR.Agregar();
        
        PageReference pag4 = TTR.RegresarTTPadre();
       
        ttr.doSortByNumber();        
        ttr.doSortByStatus();
        ttr.initTTPadres();
            
        TTRelacionados TTR1 = new TTRelacionados();
        
        TTR1.initTTPadres();
       PageReference pageRef1 = Page.TTRelacionados2;
       Test.setCurrentPage(pageRef1);
       ApexPages.currentPage().getParameters().put('id',caso.Id);
       TTR1.initPageLayout();
       PageReference pag1 = TTR1.Actualizar();
       PageReference pag5 = TTR1.AgregarCIDS();
       TTR.newCIDS = null;
       PageReference pag6 = TTR1.Agregar();
       PageReference pag7 = TTR1.RegresarTTPadre();
           }
}