Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
6.2 kB
3
Indexable
Never
@istest
public with sharing class MaintenanceRequestHelperTest {
    
    @istest
    private static void testMaintenanceRequestPositive(){
        
        //Creo il veicolo su cui farò la maintenance
        Vehicle__c Vehicle = new Vehicle__C(name = 'SuperTruck');
        insert vehicle;
        id vehicleId = vehicle.Id;
        
        //Creo il pezzo del veicolo su cui si farà la maintenance
        product2 equipment = new product2(name = 'SuperEquipment', lifespan_months__C = 10, maintenance_cycle__C = 10, replacement_part__c = true);
        insert equipment;
        id equipmentId = equipment.Id;
        
        //Creo la maintenance legandola al veicolo e all'equipment di cui sopra
        case somethingToUpdate = new case(Type='Repair', Status='New', Origin='Web', Subject='Testing subject', Equipment__c=equipmentId, Vehicle__c=vehicleId);
        insert somethingToUpdate;
        
        //Lego l'equipment e la maintenance tramite l'oggetto Equipment maintenance item 
        Equipment_Maintenance_Item__c workP = new Equipment_Maintenance_Item__c(Equipment__c = equipmentId, Maintenance_Request__c = somethingToUpdate.id);
        insert workP;
        
        //Faccio l'update che fa scattare il trigger mettendo il case a 'Closed'
        test.startTest();
        somethingToUpdate.status = 'Closed';
        update somethingToUpdate;
        test.stopTest();
        
        //Mi prendo il case che ha generato il trigger sapendo che è l'unico con status = 'new'
        Case newReq = [Select id, subject, type, Equipment__c, Date_Reported__c, Vehicle__c, Date_Due__c from case where status = 'new'];
        
        //Mi prendo l'oggetto Equipment maintenance item legato al nuovo case generato
        Equipment_Maintenance_Item__c workPart = [select id from Equipment_Maintenance_Item__c where Maintenance_Request__c =:newReq.Id];
        
        //Faccio tutti i vari test per vedere se il trigger ha creato i dati nel modo giusto
        system.assert(workPart != null);
        system.assert(newReq.Subject != null);
        system.assertEquals(newReq.Type, 'Routine Maintenance');
        SYSTEM.assertEquals(newReq.Equipment__c, equipmentId);
        SYSTEM.assertEquals(newReq.Vehicle__c, vehicleId);
        SYSTEM.assertEquals(newReq.Date_Reported__c, system.today());
        SYSTEM.assertEquals(newReq.Date_Due__c, system.today()+10);
    }
    
    @istest
    private static void testMaintenanceRequestNegative(){
        
        //Creo il veicolo su cui farò la maintenance
        Vehicle__c Vehicle = new Vehicle__C(name = 'SuperTruck');
        insert vehicle;
        id vehicleId = vehicle.Id;
        
        //Creo il pezzo del veicolo su cui si farà la maintenance
        product2 equipment = new product2(name = 'SuperEquipment', lifespan_months__C = 10, maintenance_cycle__C = 10, replacement_part__c = true);
        insert equipment;
        id equipmentId = equipment.Id;
        
        //Creo la maintenance legandola al veicolo e all'equipment di cui sopra
        case emptyReq = new case(Type='Repair', Status='New', Origin='Web', Subject='Testing subject', Equipment__c=equipmentId, Vehicle__c=vehicleId);
        insert emptyReq;
        
        //Lego l'equipment e la maintenance tramite l'oggetto Equipment maintenance item 
        Equipment_Maintenance_Item__c workP = new Equipment_Maintenance_Item__c(Equipment__c = equipmentId, Maintenance_Request__c = emptyReq.Id);
        insert workP;
        
        //Faccio un update che NON fa scattare il trigger mettendo il case a 'Working'
        test.startTest();
        emptyReq.Status = 'Working';
        update emptyReq;
        test.stopTest();
        
        //Mi prendo tutti i case dal Database fittizio
        list<case> allRequest = [select id  from case];
        
        //Controllo che non siano stati creati altri case dal trigger
        system.assert(allRequest.size() == 1);
    }
    
    @istest
    private static void testMaintenanceRequestBulk(){
        
        //Creo delle liste di appoggio per inserire più oggetti contemporaneamente
        list<Vehicle__C> vehicleList = new list<Vehicle__C>();
        list<Product2> equipmentList = new list<Product2>();
        list<Equipment_Maintenance_Item__c> workPartList = new list<Equipment_Maintenance_Item__c>();
        list<case> requestList = new list<case>();
        list<id> oldRequestIds = new list<id>();
        
        //Inserisco 300 veicoli e 300 pezzi
        for(integer i = 0; i < 300; i++){
            vehicleList.add(new Vehicle__C(name = 'SuperTruck'));
            equipmentList.add(new product2(name = 'SuperEquipment', lifespan_months__C = 10, maintenance_cycle__C = 10, replacement_part__c = true));
        }
        insert vehicleList;
        insert equipmentList;
        
        //Inserisco 300 maintenance legando i vari veicoli e pezzi delle liste sopra
        for(integer i = 0; i < 300; i++){
            requestList.add(new case(Type='Repair', Status='New', Origin='Web', Subject='Testing subject', Equipment__c=equipmentList.get(i).id, Vehicle__c=vehicleList.get(i).id));
        }
        insert requestList;
        
        //Inserisco 300 oggetti Equipment Maintenance Item per legare le Maintenance agli equipment
        for(integer i = 0; i < 300; i++){
            workPartList.add(new Equipment_Maintenance_Item__c(Equipment__c = equipmentList.get(i).id, Maintenance_Request__c = requestList.get(i).id));
        }
        insert workPartList;
        
        //Aggiorno 300 oggetti case mettendo lo status closed per far partire il trigger 
        test.startTest();
        for(case req : requestList){
            req.Status = 'Closed';
            oldRequestIds.add(req.Id); //Mi salvo tutti i vecchi ID dei case che sto chiudendo
        }
        update requestList;
        test.stopTest();
        
        //Prendo tutti i case con status='new' che il trigger dovrebbe aver creato
        list<case> allRequests = [select id from case where status = 'new'];
        
        system.assert(allRequests.size() == 300);
    }
}