You need to sign in to do that
Don't have an account?
Roopa S 1
i have written test class but im only getting 74%code coverage , plese help me to get more than 80% code coverage
this is the test class i have written
@isTest
public class WorkOredrTriggerHelperTest {
@isTest static void helperMethod(){
SVMXC__Service_Order__c serviceOrderObj = new SVMXC__Service_Order__c();
serviceOrderObj.closure_status__c= 'test';
serviceOrderObj.SVMXC__Order_Status__c = 'Closed';
insert serviceOrderObj;
SVMXC__Service_Order__c serviceOrderObj2 = new SVMXC__Service_Order__c();
serviceOrderObj2.closure_status__c= 'test';
serviceOrderObj2.SVMXC__Order_Status__c = 'Closed';
insert serviceOrderObj2;
SVMXC__Service_Order_Line__c lineObj = new SVMXC__Service_Order_Line__c();
lineObj.Status__c = 'closed';
lineObj.SVMXC__Service_Order__c = serviceOrderObj.ID ;
insert lineObj;
SVMXC__Service_Order_Line__c lineObj1 = new SVMXC__Service_Order_Line__c();
lineObj1.Status__c = 'closed';
lineObj1.SVMXC__Line_Type__c = 'Parts';
lineObj1.Work_order_status__c = 'closed';
lineObj1.SVMXC__Service_Order__c = serviceOrderObj.ID ;
insert lineObj1;
Test.startTest();
Database.SaveResult result = Database.update(serviceOrderObj, false);
System.assertEquals('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.',result.getErrors()[0].getMessage());
Database.SaveResult result1 = Database.update(serviceOrderObj2, false);
System.assertEquals('No line items',result1.getErrors()[0].getMessage());
serviceOrderObj.SVMXC__Order_Status__c = 'new';
update serviceOrderObj;
//update serviceOrderObj;
System.assertEquals('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.', serviceOrderObj.SVMXC__Order_Status__c);
Test.stopTest();
}
Handler class
public class WorkOredrTriggerHelper {
public static void helperMethod(list<SVMXC__Service_Order__c> WorkOrders){
Map<Id,List<SVMXC__Service_Order_Line__c>> mapLine = new Map<Id,List<SVMXC__Service_Order_Line__c>>();
List<SVMXC__Service_Order_Line__c> lineItems = new List<SVMXC__Service_Order_Line__c>();
List<SVMXC__Service_Order_Line__c> lineItemsToUpdate = new List<SVMXC__Service_Order_Line__c>();
lineItems = [select id, Status__c, SVMXC__Service_Order__c from SVMXC__Service_Order_Line__c where SVMXC__Service_Order__c in :WorkOrders];
for(SVMXC__Service_Order_Line__c asd : lineItems) {
if(mapLine.containsKey(asd.SVMXC__Service_Order__c)){
mapLine.get(asd.SVMXC__Service_Order__c).add(asd);
continue;
}
mapLine.put(asd.SVMXC__Service_Order__c,new List<SVMXC__Service_Order_Line__c>{asd});
}
for(SVMXC__Service_Order__c wo : WorkOrders){
if(wo.SVMXC__Order_Status__c == 'Closed' || wo.SVMXC__Order_Status__c == 'Completed'){
if(mapLine.get(wo.Id) != null) {
boolean flag = false;
for(SVMXC__Service_Order_Line__c wd : mapLine.get(wo.Id)){
if(wd.Status__c=='open'){
flag = true;
}
}
if(flag == true) {
System.debug('222The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.');
wo.addError('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.');
}
}
else {
System.debug('No items');
wo.addError('No line items');
}
}
}
}
public static void updateRelatedLines(list<SVMXC__Service_Order__c> WorkOrdersNew, Map<Id,SVMXC__Service_Order__c> WorkOrdersOld) {
Map<Id,List<SVMXC__Service_Order_Line__c>> mapLine = new Map<Id,List<SVMXC__Service_Order_Line__c>>();
List<SVMXC__Service_Order_Line__c> lineItems = new List<SVMXC__Service_Order_Line__c>();
List<SVMXC__Service_Order_Line__c> lineItemsToUpdate = new List<SVMXC__Service_Order_Line__c>();
List<SVMXC__Service_Order__c> workOrdersToUpdate = new List<SVMXC__Service_Order__c>();
String closureStatus = '';
Integer countLineItems;
Map<Id,String> closureStatusMap = new Map<Id,String>();
lineItems = [select id, Status__c, SVMXC__Service_Order__c, Work_order_status__c, SVMXC__Start_Date_and_Time__c, SVMXC__End_Date_and_Time__c from SVMXC__Service_Order_Line__c where SVMXC__Service_Order__c in :WorkOrdersNew];
for(SVMXC__Service_Order_Line__c asd : lineItems) {
if(mapLine.containsKey(asd.SVMXC__Service_Order__c)){
mapLine.get(asd.SVMXC__Service_Order__c).add(asd);
continue;
}
mapLine.put(asd.SVMXC__Service_Order__c,new List<SVMXC__Service_Order_Line__c>{asd});
}
for(SVMXC__Service_Order__c wo : WorkOrdersNew){
closureStatus = '';
countLineItems = 0;
if(wo.SVMXC__Order_Status__c != WorkOrdersOld.get(wo.Id).SVMXC__Order_Status__c && wo.SVMXC__Order_Status__c == 'Closed'){
for(SVMXC__Service_Order_Line__c wd : mapLine.get(wo.Id)){
countLineItems = countLineItems + 1;
SVMXC__Service_Order_Line__c newLineItem = new SVMXC__Service_Order_Line__c();
newLineItem.Id = wd.Id;
newLineItem.Work_order_status__c = 'Work Order is Closed';
lineItemsToUpdate.add(newLineItem);
closureStatus += 'Start time of WDL'+ countLineItems + ' : ' + wd.SVMXC__Start_Date_and_Time__c+'\n';
closureStatus += 'End Date time of WDL'+ countLineItems + ' : ' + wd.SVMXC__End_Date_and_Time__c+'\n'+'\n';
}
closureStatusMap.put(wo.Id, closureStatus);
}
}
List<SVMXC__Service_Order__c> workOrders = [SELECT Id, closure_status__c from SVMXC__Service_Order__c where Id in :WorkOrdersNew];
for(SVMXC__Service_Order__c workOrder : workOrders){
workOrder.closure_status__c = closureStatusMap.get(workorder.Id);
workOrdersToUpdate.add(workOrder);
}
if(lineItemsToUpdate != null && lineItemsToUpdate.size() > 0){
update lineItemsToUpdate;
}
if(lineItemsToUpdate != null && lineItemsToUpdate.size() > 0){
update workOrdersToUpdate;
}
}
}
trigger
trigger woTriggerrr on SVMXC__Service_Order__c (before insert, before update, after update, after insert) {
if(trigger.isBefore && trigger.isupdate){
system.debug('Inside new trigger'+ Trigger.new);
WorkOredrTriggerHelper.helperMethod(trigger.new);
}
if(trigger.isAfter && trigger.isupdate){
system.debug('Inside new trigger after update'+ Trigger.new);
WorkOredrTriggerHelper.updateRelatedLines(trigger.new, trigger.oldMap);
}
}
@isTest
public class WorkOredrTriggerHelperTest {
@isTest static void helperMethod(){
SVMXC__Service_Order__c serviceOrderObj = new SVMXC__Service_Order__c();
serviceOrderObj.closure_status__c= 'test';
serviceOrderObj.SVMXC__Order_Status__c = 'Closed';
insert serviceOrderObj;
SVMXC__Service_Order__c serviceOrderObj2 = new SVMXC__Service_Order__c();
serviceOrderObj2.closure_status__c= 'test';
serviceOrderObj2.SVMXC__Order_Status__c = 'Closed';
insert serviceOrderObj2;
SVMXC__Service_Order_Line__c lineObj = new SVMXC__Service_Order_Line__c();
lineObj.Status__c = 'closed';
lineObj.SVMXC__Service_Order__c = serviceOrderObj.ID ;
insert lineObj;
SVMXC__Service_Order_Line__c lineObj1 = new SVMXC__Service_Order_Line__c();
lineObj1.Status__c = 'closed';
lineObj1.SVMXC__Line_Type__c = 'Parts';
lineObj1.Work_order_status__c = 'closed';
lineObj1.SVMXC__Service_Order__c = serviceOrderObj.ID ;
insert lineObj1;
Test.startTest();
Database.SaveResult result = Database.update(serviceOrderObj, false);
System.assertEquals('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.',result.getErrors()[0].getMessage());
Database.SaveResult result1 = Database.update(serviceOrderObj2, false);
System.assertEquals('No line items',result1.getErrors()[0].getMessage());
serviceOrderObj.SVMXC__Order_Status__c = 'new';
update serviceOrderObj;
//update serviceOrderObj;
System.assertEquals('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.', serviceOrderObj.SVMXC__Order_Status__c);
Test.stopTest();
}
Handler class
public class WorkOredrTriggerHelper {
public static void helperMethod(list<SVMXC__Service_Order__c> WorkOrders){
Map<Id,List<SVMXC__Service_Order_Line__c>> mapLine = new Map<Id,List<SVMXC__Service_Order_Line__c>>();
List<SVMXC__Service_Order_Line__c> lineItems = new List<SVMXC__Service_Order_Line__c>();
List<SVMXC__Service_Order_Line__c> lineItemsToUpdate = new List<SVMXC__Service_Order_Line__c>();
lineItems = [select id, Status__c, SVMXC__Service_Order__c from SVMXC__Service_Order_Line__c where SVMXC__Service_Order__c in :WorkOrders];
for(SVMXC__Service_Order_Line__c asd : lineItems) {
if(mapLine.containsKey(asd.SVMXC__Service_Order__c)){
mapLine.get(asd.SVMXC__Service_Order__c).add(asd);
continue;
}
mapLine.put(asd.SVMXC__Service_Order__c,new List<SVMXC__Service_Order_Line__c>{asd});
}
for(SVMXC__Service_Order__c wo : WorkOrders){
if(wo.SVMXC__Order_Status__c == 'Closed' || wo.SVMXC__Order_Status__c == 'Completed'){
if(mapLine.get(wo.Id) != null) {
boolean flag = false;
for(SVMXC__Service_Order_Line__c wd : mapLine.get(wo.Id)){
if(wd.Status__c=='open'){
flag = true;
}
}
if(flag == true) {
System.debug('222The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.');
wo.addError('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.');
}
}
else {
System.debug('No items');
wo.addError('No line items');
}
}
}
}
public static void updateRelatedLines(list<SVMXC__Service_Order__c> WorkOrdersNew, Map<Id,SVMXC__Service_Order__c> WorkOrdersOld) {
Map<Id,List<SVMXC__Service_Order_Line__c>> mapLine = new Map<Id,List<SVMXC__Service_Order_Line__c>>();
List<SVMXC__Service_Order_Line__c> lineItems = new List<SVMXC__Service_Order_Line__c>();
List<SVMXC__Service_Order_Line__c> lineItemsToUpdate = new List<SVMXC__Service_Order_Line__c>();
List<SVMXC__Service_Order__c> workOrdersToUpdate = new List<SVMXC__Service_Order__c>();
String closureStatus = '';
Integer countLineItems;
Map<Id,String> closureStatusMap = new Map<Id,String>();
lineItems = [select id, Status__c, SVMXC__Service_Order__c, Work_order_status__c, SVMXC__Start_Date_and_Time__c, SVMXC__End_Date_and_Time__c from SVMXC__Service_Order_Line__c where SVMXC__Service_Order__c in :WorkOrdersNew];
for(SVMXC__Service_Order_Line__c asd : lineItems) {
if(mapLine.containsKey(asd.SVMXC__Service_Order__c)){
mapLine.get(asd.SVMXC__Service_Order__c).add(asd);
continue;
}
mapLine.put(asd.SVMXC__Service_Order__c,new List<SVMXC__Service_Order_Line__c>{asd});
}
for(SVMXC__Service_Order__c wo : WorkOrdersNew){
closureStatus = '';
countLineItems = 0;
if(wo.SVMXC__Order_Status__c != WorkOrdersOld.get(wo.Id).SVMXC__Order_Status__c && wo.SVMXC__Order_Status__c == 'Closed'){
for(SVMXC__Service_Order_Line__c wd : mapLine.get(wo.Id)){
countLineItems = countLineItems + 1;
SVMXC__Service_Order_Line__c newLineItem = new SVMXC__Service_Order_Line__c();
newLineItem.Id = wd.Id;
newLineItem.Work_order_status__c = 'Work Order is Closed';
lineItemsToUpdate.add(newLineItem);
closureStatus += 'Start time of WDL'+ countLineItems + ' : ' + wd.SVMXC__Start_Date_and_Time__c+'\n';
closureStatus += 'End Date time of WDL'+ countLineItems + ' : ' + wd.SVMXC__End_Date_and_Time__c+'\n'+'\n';
}
closureStatusMap.put(wo.Id, closureStatus);
}
}
List<SVMXC__Service_Order__c> workOrders = [SELECT Id, closure_status__c from SVMXC__Service_Order__c where Id in :WorkOrdersNew];
for(SVMXC__Service_Order__c workOrder : workOrders){
workOrder.closure_status__c = closureStatusMap.get(workorder.Id);
workOrdersToUpdate.add(workOrder);
}
if(lineItemsToUpdate != null && lineItemsToUpdate.size() > 0){
update lineItemsToUpdate;
}
if(lineItemsToUpdate != null && lineItemsToUpdate.size() > 0){
update workOrdersToUpdate;
}
}
}
trigger
trigger woTriggerrr on SVMXC__Service_Order__c (before insert, before update, after update, after insert) {
if(trigger.isBefore && trigger.isupdate){
system.debug('Inside new trigger'+ Trigger.new);
WorkOredrTriggerHelper.helperMethod(trigger.new);
}
if(trigger.isAfter && trigger.isupdate){
system.debug('Inside new trigger after update'+ Trigger.new);
WorkOredrTriggerHelper.updateRelatedLines(trigger.new, trigger.oldMap);
}
}
Can you try the below test class. It is giving 100% coverage now. As earlier replace the object API names and field name as per you org.
If this solution helps, Please mark it as best answer.
Thanks,