/***********************************************************************************************************
 * Name         : RestTriggerSendsTest
 * Purpose      : Test class for RestTriggerSends
 **********************************************************************************************************/
@isTest
public class RestTriggerSendsTest {
    /************************************************************************************
     * Method: doGetTest
     * APEX method tested : RestTriggerSends.doGet
     * Description : Verifies that the document with the triggered sends informations
     * is being returned properly
     *************************************************************************************/
    @isTest
    static void doGetTest() {
        insert new List<Config__c>{
            new Config__c(Name = ConfigUtils.MC_CREDENTIALS_USER, Value__c = 'user'),
            new Config__c(Name = ConfigUtils.MC_CREDENTIALS_PASSWORD, Value__c = 'password'),
            new Config__c(Name = ConfigUtils.MC_ENDPOINT_BASE, Value__c = 'https://marketingcloud.com')
        };

        CalloutMock mock = new CalloutMock();
        Test.setMock(HttpCalloutMock.class, mock);

        Test.startTest();
        RestTriggerSends.doGet();
        Test.stopTest();

        HTTPResponse simulatedResponse = mock.respond(null);
        Dom.Document doc = new Dom.Document();
        doc.load(simulatedResponse.getBody());
        Dom.XmlNode rootNode = doc.getRootElement();
        String triggerSendDefinitionKey = rootNode.getChildElement('CustomerKey', null).getText();
        String triggerSendDefinitionName = rootNode.getChildElement('Name', null).getText();
        String mid = rootNode.getChildElement('Client', null).getText();
        Assert.areEqual('TSDK', triggerSendDefinitionKey);
        Assert.areEqual('TSD NAME', triggerSendDefinitionName);
        Assert.areEqual('MID', mid);
    }

    public class CalloutMock implements HttpCalloutMock {
        public HTTPResponse respond(HTTPRequest req) {
            HTTPResponse res = new HTTPResponse();
            res.setHeader('Content-Type', 'application/xml');
            res.setStatus('OK');
            res.setStatusCode(200);
            res.setBody(
                '<?xml version="1.0" encoding="UTF-8"?><response><Client>MID</Client><Name>TSD NAME</Name><CustomerKey>TSDK</CustomerKey></response>'
            );
            return res;
        }
    }
}