Создание фиктивных пользовательских метаданных с запросом дочерних отношений

У меня есть класс контроллера, на котором я выполняю запрос SOQL к записям пользовательского типа метаданных. Запрос SOQL также содержит запрос дочерней связи (отношение Master-Detail). Мне нужно написать тест с имитацией пользовательских записей метаданных

@AuraEnabled(cacheable=true)
public static List<Response> getLeadMetadataValues() {
    List<Lead_Business_Status__mdt> leadBusinessStatusList = [
            SELECT Id, Label, DeveloperName, Index__c,
                (SELECT Id, Label, DeveloperName, Reason_Status_Api_Name__c FROM Lead_Reason_Status__r)
            FROM Lead_Business_Status__mdt ORDER BY Index__c ASC
    ];

    List<Response> resList = new List<Response>();
    if (Test.isRunningTest()) {
        leadBusinessStatusList = new List<Lead_Business_Status__mdt>();
        leadBusinessStatusList.add(createMock());
    }

    for (Lead_Business_Status__mdt bs : leadBusinessStatusList) {
        Response res = new Response();
        res.Id = bs.Id;
        res.businessStatusLabel = bs.Label;
        res.businessStatusDevName = bs.DeveloperName;
        res.index = bs.Index__c;
        for (Lead_Reason_Status__mdt rs : bs.Lead_Reason_Status__r) {
            ReasonStatus rsObj = new ReasonStatus();
            rsObj.Id = rs.Id;
            rsObj.reasonStatusLabel = rs.Label;
            rsObj.reasonStatusDevName = rs.DeveloperName;
            rsObj.fieldApiName = rs.Reason_Status_Api_Name__c;
            res.reasonStatusList.add(rsObj);
        }
        resList.add(res);
    }
    return resList;
}

Я использую Test.isRunningTest() для заполнения списка leadBusinessStatusList фиктивными данными. Я могу создать фиктивный объект для основной записи: Lead_Business_Status__mdt и подробной записи: Lead_Reason_Status__mdt. Однако мне не удалось добавить запись Detail в связанный список: Lead_Reason_Status__r

private static Lead_Business_Status__mdt createMock() {
    String reasonStatusStr = '{"Label":"Transfer to Queue", "DeveloperName":"Transfer_to_Queue", "Reason_Status_Api_Name__c":"Transfer_to_Queue"}';
    Lead_Reason_Status__mdt reasonStatusObj = (Lead_Reason_Status__mdt) System.JSON.deserialize(reasonStatusStr, Lead_Reason_Status__mdt.class);
    System.debug('Lead_Reason_Status__mdt: ' + reasonStatusObj);

    String businessStatusStr = '{"Label":"Wrong Lead", "DeveloperName":"Wrong_Lead", "Index__c":"1"}';
    Lead_Business_Status__mdt businessStatusObj = (Lead_Business_Status__mdt) System.JSON.deserialize(businessStatusStr, Lead_Business_Status__mdt.class);

    return businessStatusObj;
}

Тест охватывается, за исключением внутреннего цикла for Lead_Reason_Status__mdt. Как я могу создать фиктивный объект с заполнением списка дочерних отношений?


person Guy BD    schedule 14.08.2020    source источник


Ответы (1)


Можете ли вы попробовать использовать метод JSON.deserialize для настройки этих записей метаданных.

List<Lead_Business_Status__mdt> leadBusinessStatusList  = (List< Lead_Business_Status__mdt >) JSON.deserialize( '[{"Id": "xoid914011599", "Label": "test", "DeveloperName": "test","Reason_Status_Api_Name__c": "test"}, {"Id": "xoid9140115992","Label":"test2","DeveloperName": "test2","Reason_Status_Api_Name__c": "test2"}]', List<Lead_Business_Status__mdt>.class );
person Moustafa Ishak    schedule 15.08.2020