function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
SIVA KUMAR 507SIVA KUMAR 507 

How to write test class for below code ? please help me

Hi team,

Apex Class:
----------------

public class AskEDD_ArticleAction {
    @InvocableMethod
    public static List<FlowOutputs> updateArticleTypeForDataCategories(List<FlowInputs> articleType) 
    {
        List<Knowledge__kav> lstArticleType = [SELECT Id, Title, AskEDD_Category__c FROM Knowledge__kav WHERE Id =:articleType[0].recordId AND (PublishStatus = 'draft' OR Approval_Status__c = 'Pending Approval')];

        List<Knowledge__DataCategorySelection> lstDC = [SELECT ParentId, DataCategoryName   FROM Knowledge__DataCategorySelection
                                                            WHERE ParentId =:articleType[0].recordId];
List<FlowOutputs> outputlist = new List<FlowOutputs>();
        
        FlowOutputs output = new FlowOutputs();
        
        Map<Id, String> datacategoryNameMap = new Map<Id, String>();

        for(Knowledge__DataCategorySelection dcObj:lstDC)
        {   
            if(datacategoryNameMap.containsKey(dcObj.ParentId))
            {
                String str =  datacategoryNameMap.get(dcObj.ParentId);
                datacategoryNameMap.put(dcObj.ParentId, str + ',' + dcObj.DataCategoryName);
            }
            else
            {
                datacategoryNameMap.put(dcObj.ParentId, dcObj.DataCategoryName);
            }
        }

        for(Knowledge__kav artObj:lstArticleType)
        {
            if(datacategoryNameMap.containsKey(artObj.Id))
            {
                artObj.AskEDD_Category__c = datacategoryNameMap.get(artObj.Id);
                
                if (String.isEmpty(artObj.AskEDD_Category__c)){
                     output.noCategory = true;
                    outputlist.add(output);
                    return outputlist;
                } 
                else {
                     output.noCategory = false;
                    outputlist.add(output);
                }
         //     output.categoryString  = artObj.AskEDD_Category__c;
            }
        }

     //   update lstArticleType;
        return outputlist;
       }  
    public class FlowInputs {
        @InvocableVariable
        public string recordId;
    }
    public class FlowOutputs {
        @InvocableVariable
        public boolean noCategory;
    }
}
Best Answer chosen by SIVA KUMAR 507
Suraj Tripathi 47Suraj Tripathi 47
Hi Siva,

Check this test class:-
@istest
public class AskEDD_ArticleActionTest {
    @istest
    public static void test(){
        Knowledge__kav k= new Knowledge__kav();
        k.IsVisibleInCsp=true;
        k.UrlName='UTF-8';
        k.Title='title';
        k.IsVisibleInPkb=true;
        k.AskEDD_Category__c='Geography';
        k.Approval_Status__c='Pending Approval';
        insert k;
        
        Knowledge__DataCategorySelection kn= new Knowledge__DataCategorySelection();
        kn.ParentId=k.id;
        kn.DataCategoryGroupName='KnowledgeArticleVersion';
        kn.DataCategoryName='Geography';
        insert kn;
        
        Knowledge__DataCategorySelection kn1= new Knowledge__DataCategorySelection();
        kn1.ParentId=k.id;
        kn1.DataCategoryGroupName='KnowledgeArticleVersion';
        kn1.DataCategoryName='student';
        insert kn1;
        
        test.startTest();
        list<AskEDD_ArticleAction.FlowInputs> fList= new list<AskEDD_ArticleAction.FlowInputs>();
        AskEDD_ArticleAction.FlowInputs fl= new AskEDD_ArticleAction.FlowInputs();
        fl.recordId=k.id;
        fList.add(fl);
        
        AskEDD_ArticleAction.updateArticleTypeForDataCategories(fList);
        test.stopTest();
    }
}

In case you find any other issue please mention. 
If you find your Solution then mark this as the best answer. 

Thanks and Regards
Suraj Tripathi