• Javier Esquivel
  • NEWBIE
  • 10 Points
  • Member since 2021

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 2
    Questions
  • 3
    Replies
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;
            
        }
im trying to do the test class for this code

public class Claseprogramadausuario {
    
public static void obtenerinfo(){

List<User> nlist = [SELECT Id, Username, FirstName, LastName, EmployeeNumber, UserRole.Name, Profile.Name, CreatedDate, LastModifiedDate, LastLoginDate, isActive FROM User WHERE Profile.Name != 'SelfService'];
string header = 'Id, Username , FirstName, LastName, EmployeeNumber, UserRole.Name,  Profile.Name, Created Date, LastModifiedDate, LastLoginDate, isActive \n';
string finalstr = header ;
for(User u: nlist)
{

       string recordString = u.id+','+u.Username +',' + u.FirstName +','+ u.LastName +','+ u.EmployeeNumber+','+ u.UserRole.name +','+ u.profile.name +','+ u.CreatedDate +','+ u.LastModifiedDate +','+ u.LastLoginDate +','+ u.IsActive +'\n';

       finalstr = finalstr +recordString;
}

Messaging.EmailFileAttachment csvAttc = new Messaging.EmailFileAttachment();
blob csvBlob = Blob.valueOf(finalstr);
string csvname= 'Userinfo.csv';
csvAttc.setFileName(csvname);
csvAttc.setBody(csvBlob);
Messaging.SingleEmailMessage correo = new Messaging.SingleEmailMessage();
correo.toAddresses = new String[] {'javierandoni@gmail.com', 'dlramirez@izzi.mx'};
correo.subject = 'Clase programada test';
correo.plainTextBody = 'Clase programada test';
Messaging.SingleEmailMessage[] correos =   new List<Messaging.SingleEmailMessage> {correo};
correo.setPlainTextBody('Account CSV ');
correo.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttc});
Messaging.SendEmailResult[] results = Messaging.sendEmail(correos);

if (results[0].success) 
{
System.debug('The email was sent successfully.');
} else 
{
System.debug('The email failed to send: ' + results[0].errors[0].message);
}
}
}

And the test class im trying to do is this

// Test Class
@IsTest
Public class ClaseprogramadausuarioTest {
    @isTest static void testenviomail(){
        string pri= Claseprogramadausuario.obtenerinfo();
        System.assertEquals('The email was sent successfully.', pri);
    }
}

but i get this message: Illegal assignment from void to String.
 
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;
            
        }
im trying to do the test class for this code

public class Claseprogramadausuario {
    
public static void obtenerinfo(){

List<User> nlist = [SELECT Id, Username, FirstName, LastName, EmployeeNumber, UserRole.Name, Profile.Name, CreatedDate, LastModifiedDate, LastLoginDate, isActive FROM User WHERE Profile.Name != 'SelfService'];
string header = 'Id, Username , FirstName, LastName, EmployeeNumber, UserRole.Name,  Profile.Name, Created Date, LastModifiedDate, LastLoginDate, isActive \n';
string finalstr = header ;
for(User u: nlist)
{

       string recordString = u.id+','+u.Username +',' + u.FirstName +','+ u.LastName +','+ u.EmployeeNumber+','+ u.UserRole.name +','+ u.profile.name +','+ u.CreatedDate +','+ u.LastModifiedDate +','+ u.LastLoginDate +','+ u.IsActive +'\n';

       finalstr = finalstr +recordString;
}

Messaging.EmailFileAttachment csvAttc = new Messaging.EmailFileAttachment();
blob csvBlob = Blob.valueOf(finalstr);
string csvname= 'Userinfo.csv';
csvAttc.setFileName(csvname);
csvAttc.setBody(csvBlob);
Messaging.SingleEmailMessage correo = new Messaging.SingleEmailMessage();
correo.toAddresses = new String[] {'javierandoni@gmail.com', 'dlramirez@izzi.mx'};
correo.subject = 'Clase programada test';
correo.plainTextBody = 'Clase programada test';
Messaging.SingleEmailMessage[] correos =   new List<Messaging.SingleEmailMessage> {correo};
correo.setPlainTextBody('Account CSV ');
correo.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttc});
Messaging.SendEmailResult[] results = Messaging.sendEmail(correos);

if (results[0].success) 
{
System.debug('The email was sent successfully.');
} else 
{
System.debug('The email failed to send: ' + results[0].errors[0].message);
}
}
}

And the test class im trying to do is this

// Test Class
@IsTest
Public class ClaseprogramadausuarioTest {
    @isTest static void testenviomail(){
        string pri= Claseprogramadausuario.obtenerinfo();
        System.assertEquals('The email was sent successfully.', pri);
    }
}

but i get this message: Illegal assignment from void to String.