1

I'm creating a visualforce page for a Dashboard component. In the controller I have a wrapper class and in one of the methods I return a map of a list of the wrapper records. Example trimmed down:

public static Map<String, List<dashData>> makeDashMap(List<CampaignMember> memberList, List<Idea_Dashboard_Campaign__mdt> campList)
{
    Map<String, List<dashData>> dashMap = new Map<String, List<dashData>>();
    for(CampaignMember cm : memberList)
    {
        dashData d = new dashData();
        d.paName = cm.Contact.Idea_Practice__c;
        d.campaign1 = 0;
        d.campaign2 = 0;

        if(!dashMap.containsKey(d.paName))
        {
            dashMap.put(d.paName, new List<dashData>{d});
        } else {
            dashMap.get(d.paName).add(d);
        }
    }
    return dashMap;
}

// Wrapper class
@testVisible public class dashData 
{
    public String paName {get; set;}
    public Integer campaign1 {get; set;}
    public Integer campaign2 {get; set;}
    public Integer variance {get; set;} 
}   

I can't compile my test method because I can't figure out the correct syntax to reference the wrapper but a list of the wrapper records. Example:

@IsTest
static void testMakeDashMap()
{
    List<CampaignMember> memberList = [       
        SELECT  Id,
                CampaignId,
                Contact.Idea_Practice__c
        FROM    CampaignMember];

    List<Idea_Dashboard_Campaign__mdt> campList = [
        SELECT  MasterLabel,
                Campaign_Id__c,
                Campaign_Order__c
        FROM    Idea_Dashboard_Campaign__mdt
        ORDER BY Campaign_Order__c ASC];

    Test.startTest();
        NPD_IdeaDashboardController.dashData dashData = new NPD_IdeaDashboardController.dashData();
        Map<String, List<dashData>> results = NPD_IdeaDashboardController.makeDashMap(memberList, campList);
    Test.stopTest();

    System.debug('results are:: ' + results);
}

I get the error on the result line:

Invalid type: dashData

How can I get the results of the map so I can try and assert that it comes back as expected?

2
  • is the outer class named NPD_IdeaDashboardController ? Commented Jul 12, 2019 at 16:45
  • Yes. That's the main class name. Commented Jul 12, 2019 at 16:51

1 Answer 1

6

It looks like the issue is on this line

 Map<String, List<dashData>> results = NPD_IdeaDashboardController.makeDashMap(memberList, campList);

There is no dashDatain local namespace, its innerclash so you have to refer it as

Map<String, List<NPD_IdeaDashboardController.dashData>> results = NPD_IdeaDashboardController.makeDashMap(memberList, campList);
2
  • Do I still need the line above it then? The NPD_IdeaDashboardController.dashData dashData = new NPD_IdeaDashboardController.dashData(); Commented Jul 12, 2019 at 17:25
  • @DanWooding yes you have to. There is no import statements in apex that will ensure the dataDash you are referring is the correct one Commented Jul 12, 2019 at 17:51

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .