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
Sahil YadavSahil Yadav 

Test Class Coverage Rest Class

Hello Folks , I will be working on writting the test classes but facing an issue exactly could able to figure those 
Rest API Class
:-

@RestResource(urlMapping='/subscriptionUpdate/*')
global with sharing class subscriptionUpdate {    
    @HttpPost
    global static void doPost() {
        Map<String, Object> requestBody= (Map<String, Object>)JSON.deserializeUntyped(RestContext.request.requestBody.toString()); 
        Map<String, Object> requestBody1 = new Map<String, Object>();
        for(String s: requestBody.keySet()){
            requestBody1.put(s.toLowerCase(),requestBody.get(s));
        }
        system.debug('requestBody' +requestBody);
        system.debug('requestBody1===' +requestBody1);
        String oppId = String.valueOf(requestBody1.get('opportunityid'));
        String buyerId = String.valueOf(requestBody1.get('buyerid'));
        String subStatus = String.valueOf(requestBody1.get('subscriptionstatus'));
        String subsId = String.valueOf(requestBody1.get('subscriptionid'));
        if(oppId != null && oppId != ''){
            Opportunity opp = [SELECT ID, Name, Buy_ID__c, Subscription_Status__c FROM Opportunity WHERE Id = :oppId LIMIT 1];
            opp.Subscription_Status__c = subStatus;
            update opp;
        }
        
        if(buyerId != null && buyerId != ''){
            Account acc = [SELECT ID,Name,API_Buyer_Id__c FROM Account WHERE API_Buyer_Id__c =:buyerId LIMIT 1];
            Id rtId = Schema.SObjectType.Opportunity.getRecordTypeInfosByName().get('Buyer Development Opportunity').getRecordTypeId();
            Opportunity opp =new Opportunity();
            opp.name = acc.Name;
            opp.AccountId = acc.Id;
            opp.StageName = 'Closed Won';
            opp.Subscription_Status__c = subStatus;
            opp.CloseDate = System.today();
            opp.RecordTypeId = rtId;
            opp.Subscription_ID__c  = subsId; 
            insert opp;
            Product2 prd = new Product2();
            if(subsId == '1'){               
                prd = [SELECT ID,Name FROM Product2 WHERE Name = 'Vehicle Score' LIMIT 1];
                Opportunity opp1 = [Select id, name , Subscription_Name__c from Opportunity where id =: opp.Id ];
                opp1.Subscription_Name__c = prd.Name;
                update opp1;
                Integration_logs__c ilog = new Integration_logs__c();
                ilog.Request_Body__c = RestContext.request.requestBody.toString();
                ilog.Response_Body__c = 'Opportunity Subscription Name is been Updated !!';
                ilog.Status__c = 'Success';
                insert ilog;
            }
            else if(subsId == '2'){
                prd = [SELECT ID,Name FROM Product2 WHERE Name = 'Custom Bid' LIMIT 1];
                Opportunity opp1 = [Select id, name , Subscription_Name__c from Opportunity where id =: opp.Id ];
                opp1.Subscription_Name__c = prd.Name;
                update opp1;
                Integration_logs__c ilog = new Integration_logs__c();
                ilog.Request_Body__c = RestContext.request.requestBody.toString();
                ilog.Response_Body__c = 'Opportunity Subscription Name is been Updated !!';
                ilog.Status__c = 'Success';
                insert ilog;
            }
 }
    }
}
 
Test Class :-

@isTest
public class subscriptionUpdateTest {
    @isTest static void testPostMethod(){
        Test.startTest();
        Account acc = new Account();
        acc.Name = 'Test Account';
        acc.API_Buyer_Id__c = '123456';
        insert acc;
        Opportunity TestOpp = new Opportunity();
        date mydate = date.parse('12/27/2022');
        TestOpp.name = 'TestOpp1';
        TestOpp.StageName = '0. Qualifying';
        TestOpp.CloseDate = mydate;
        TestOpp.AccountId = acc.Id;
        insert TestOpp;
        Id pricebookId = Test.getStandardPricebookId();
        Product2 prod = new Product2(
            Name = 'Custom Bid',
            ProductCode = 'Custom Bid',
            isActive = true
        );
        insert prod;
        PricebookEntry pbEntry = new PricebookEntry(
            Pricebook2Id = pricebookId,
            Product2Id = prod.Id,
            UnitPrice = 1,
            IsActive = true
        );
        insert pbEntry;
        
        Opportunity opp = [SELECT ID,Buy_ID__c,AccountId,Account.API_Buyer_Id__c FROM Opportunity WHERE id = :TestOpp.Id];
        RestRequest req = new RestRequest(); 
        RestResponse res = new RestResponse();
        
        req.requestURI = '/services/apexrest/subscriptionUpdate/';
        String JSONMsg = '{"buyerId" : "'+opp.Account.API_Buyer_Id__c+'","Subscription Status":"Subscribed","subscription Id":"2"}';
        req.requestBody = Blob.valueof(JSONMsg);
        req.httpMethod = 'POST';
        RestContext.request = req;
        RestContext.response= res;
        subscriptionUpdate.doPost();
        Test.stopTest();
        
    }
}


Issue :- 

Methods defined as TestMethod do not support Web service callouts
 
Payload Coming from External System to Salesforce as a Post request :-
{ 

    "OpportunityID": null, 

    "buyerId":"3456", 

    "SubscriptionStatus":"ReSubscribed", 

    "SubscriptionID": "1" 

 

}

Any Help will highly be appreciated needs to complete on an urent basis ...
Thank You 
SwethaSwetha (Salesforce Developers) 
HI Sahil,
Recommend reviewing these related posts

https://salesforce.stackexchange.com/questions/31808/method-defined-as-testmethod-do-not-support-web-service-callouts-test-skipped
https://salesforce.stackexchange.com/questions/225856/unit-test-error-methods-defined-as-testmethod-do-not-support-web-service-callou
https://salesforcescool.blogspot.com/2021/08/methods-defined-as-testmethod-do-not.html

Thanks