You need to sign in to do that
Don't have an account?

unit test code - missing line coverage on save method
I'm working on some unit test coverage code and currently have 77% of the controller covered. I'm trying to get the remaining lines covered before adding my assert statements.
The lines missing code coverage are in my save() method (see the screenshot below).
In my test method, I've initialized the controller and passed in a new instance of the StandardSetController with a list of the sObject being used. I have called all the properties and methods in the controller.
Can anyone provide some help on how I can get the missing lines in my save method covered? I need to create a new task to use in the save method that is being attached to multiple records.
Here is my controller code:
public class MassAddActivityController { private List<Service_Delivery__c> sds; private Task assignedTo = new Task(); private Task status = new Task(); private Task activityDate = new Task(); private Task clientAttendees = new Task(); private Task hsgAttendees = new Task(); private Task presenter = new Task(); private Task purpose = new Task(); private Task dynamics = new Task(); private Task outcomes = new Task(); private Task description = new Task(); private Task sendContactReport = new Task(); private Boolean render; private Integer count; public Task task {get; set;} public Task getAssignedTo() { return assignedTo; } public Task getStatus() { return status; } public String subject { get; set; } public Task getActivityDate() { return activityDate; } public Task getClientAttendees() { return clientAttendees; } public Task getHsgAttendees() { return hsgAttendees; } public Task getPresenter() { return presenter; } public Task getPurpose() { return purpose; } public Task getDynamics() { return dynamics; } public Task getOutcomes() { return outcomes; } public Task getDescription() { return description; } public Task getSendContactReport() { return sendContactReport; } public MassAddActivityController(ApexPages.StandardSetController stdSetController) { init((List<Service_Delivery__c>) stdSetController.getSelected()); status.status = 'Completed'; subject = 'Presentation/Meeting'; assignedTo.OwnerId = UserInfo.getUserId(); DateTime dt = System.now(); Date currentDate = date.newinstance(dt.year(), dt.month(), dt.day()); activityDate.activityDate = currentDate; render = false; } public void init(List<Service_Delivery__c> sds) { List<Id> ids = new List<Id>(); for (Service_Delivery__c sd : sds) { ids.add(sd.id); } this.sds = [Select Id, Name From Service_Delivery__c Where Id in :ids]; count = [Select Count() From Service_Delivery__c Where Id in :ids]; } public Id getRecordTypeId() { RecordType rt = [Select Id From RecordType WHERE Name = 'Contact Reports Entry']; Id recordTypeId = rt.Id; return recordTypeId; } public List<Service_Delivery__c> getServiceDeliveries() { return sds; } public List<SelectOption> getItems() { Schema.DescribeFieldResult pklst = Schema.Task.Subject.getDescribe(); List<Schema.PicklistEntry> ple = pklst.getPicklistValues(); List<SelectOption> options = new List<SelectOption>(); for(Schema.PicklistEntry f : ple) { options.add(new SelectOption(f.getLabel(), f.getLabel())); } return options; } public PageReference save() { try { for (Service_Delivery__c sd : sds) { Task t = new Task(); t.recordTypeId = getRecordTypeId(); t.ownerId = assignedTo.OwnerId; t.status = 'Completed'; t.subject = subject; t.activityDate = activityDate.activityDate; t.whatId = sd.Id; t.Client_Company_Attendees__c = clientAttendees.Client_Company_Attendees__c; t.Health_Strategies_Group_Attendees__c = hsgAttendees.Health_Strategies_Group_Attendees__c; t.Meeting_Presenter__c = presenter.Meeting_Presenter__c; t.Purpose__c = purpose.Purpose__c; t.Dynamics__c = dynamics.Dynamics__c; t.Outcomes__c = outcomes.Outcomes__c; t.description = description.description; t.Send_Contact_Report__c = sendContactReport.Send_Contact_Report__c; t.Mass_Added_Date__c = Date.today(); insert t; } ApexPages.Message msg = new ApexPages.message(ApexPages.Severity.INFO, 'Activities added successfully.'); ApexPages.addMessage(msg); render = true; return null; } catch (Exception ex) { ApexPages.Message errMsg = new ApexPages.Message(ApexPages.Severity.ERROR, ex.getMessage()); ApexPages.addMessage(errMsg); return null; } } public boolean getRendered() { return render; } public Integer getCount() { return count; } static testMethod void test() { List<Service_Delivery__c> sds = [Select id, name From Service_Delivery__c LIMIT 5]; MassAddActivityController ctrl = new MassAddActivityController(new ApexPages.StandardSetController(sds)); ctrl.getAssignedTo(); ctrl.getStatus(); ctrl.getActivityDate(); ctrl.getClientAttendees(); ctrl.getHsgAttendees(); ctrl.getPresenter(); ctrl.getPurpose(); ctrl.getDynamics(); ctrl.getOutcomes(); ctrl.getDescription(); ctrl.getSendContactReport(); ctrl.getCount(); ctrl.getRendered(); ctrl.getRecordTypeId(); ctrl.getServiceDeliveries(); ctrl.getItems(); ctrl.save(); } }
All Answers
I think list returned in bold line is empty because no record is slected from list of records:
public MassAddActivityController(ApexPages.StandardSetController stdSetController) { init((List<Service_Delivery__c>) stdSetController.getSelected()); status.status = 'Completed'; subject = 'Presentation/Meeting'; assignedTo.OwnerId = UserInfo.getUserId(); DateTime dt = System.now(); Date currentDate = date.newinstance(dt.year(), dt.month(), dt.day()); activityDate.activityDate = currentDate; render = false; }
One of the possibility is no data in the object (Service_Delivery__C )
I would suggest you to create new Service_Delivery__c
Service_Delivery__c sd = new Service_Delivery__c('ServiceDelivery');
sds.add (sd);
it should work.
I created a service delivery record and added to the list as you indicated. when I ran the test, the lines are still not getting covered.
Here is the updated test method. What am I missing?
static testMethod void test() { //get an account Account a = [Select Id From Account LIMIT 1]; //create an empty list List<Service_Delivery__c> sds = new List<Service_Delivery__c>(); //create one record Service_Delivery__c sd = new Service_Delivery__c(Name='Test1',Account__c=a.Id); //add the record to the list sds.add(sd); //pass the list into the controller MassAddActivityController ctrl = new MassAddActivityController(new ApexPages.StandardSetController(sds)); //call all the properties and methods ctrl.getAssignedTo(); ctrl.getStatus(); ctrl.getActivityDate(); ctrl.getClientAttendees(); ctrl.getHsgAttendees(); ctrl.getPresenter(); ctrl.getPurpose(); ctrl.getDynamics(); ctrl.getOutcomes(); ctrl.getDescription(); ctrl.getSendContactReport(); ctrl.getCount(); ctrl.getRendered(); ctrl.getRecordTypeId(); ctrl.getServiceDeliveries(); ctrl.getItems(); ctrl.save(); }
I see exactly what you mean now. I have a list populated with 5 records, but nothing is selected. Got it.
Now, to the question you posed. How can you mark the records as selected?
Here is how I solved the issue:
List<Service_Delivery__c> sds = [Select id, name From Service_Delivery__c LIMIT 5]; ApexPages.StandardSetController setSds = new ApexPages.StandardSetController(sds); setSds.setSelected(sds); MassAddActivityController ctrl = new MassAddActivityController(setSds);
Hope this helps.