-
ChatterFeed
-
0Best Answers
-
0Likes Received
-
0Likes Given
-
1Questions
-
1Replies
TestMethod do not support service callouts
Hi,
I got the following class with testmethod that does not support service call out.
I trying to change the testmethod to use mock responce but i must admin i'm quite new to apex...
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_callouts_wsdl2apex_testing.htm
can someone please help ?
thank you,
Julien
/**
* An apex page controller that exposes the site login functionality
*/
global with sharing class PortalLoginController
{
private User userRecord;
global String OrgId {get; private set;}
global String CustomerPortalHostname {get; private set;}
global String CustomerPortalId {get; private set;}
global String PartnerPortalHostname {get; private set;}
global String PartnerPortalId {get; private set;}
global String StartUrl {get; private set;}
global Boolean IsPartner {get; private set;}
global String Username {get; set;}
global String Password {get; set;}
global PortalLoginController()
{
this.OrgId = UserInfo.getOrganizationId();
this.IsPartner = false;
loadPortalInfo();
}
private void loadPortalInfo()
{
List<SitesToPortalsRedirectSettings__c> settings = SitesToPortalsRedirectSettings__c.getAll().values();
if(settings.size() == 0 || settings.size() > 2)
{
if(settings.size() > 2)
{
throw new CustomException('Too many portals have been setup in the SitesToPortalsRedirectSettings custom setting.');
}
else
{
throw new CustomException('No portals have been setup in the SitesToPortalsRedirectSettings custom setting.');
}
}
Integer partnerPortalCount = 0;
Integer customerPortalCount = 0;
for(SitesToPortalsRedirectSettings__c setting : settings)
{
if(setting.Is_Partner_Portal__c == true)
{
partnerPortalCount++;
}
else
{
customerPortalCount++;
}
}
if(partnerPortalCount > 1)
{
throw new CustomException('Too many partner portals have been setup in the SitesToPortalsRedirectSettings custom setting.');
}
if(customerPortalCount > 1)
{
throw new CustomException('Too many customer portals have been setup in the SitesToPortalsRedirectSettings custom setting.');
}
//If we get here, all checks above passed
for(SitesToPortalsRedirectSettings__c setting : settings)
{
if(setting.Is_Partner_Portal__c == true)
{
this.PartnerPortalHostname = setting.Portal_Hostname__c;
this.PartnerPortalId = setting.Portal_Id__c;
}
else
{
this.CustomerPortalHostname = setting.Portal_Hostname__c;
this.CustomerPortalId = setting.Portal_Id__c;
}
}
}
private void LoadUserRecord()
{
List<User> userRecords = [select Id, UserType from User where Username = :Username];
if(userRecords.size() != 1)
{
return;
}
this.userRecord = userRecords[0];
if(userRecord == null)
{
throw new CustomException('No user was found for username: ' + Username);
}
if(userRecord.UserType != null && userRecord.UserType.trim().length() > 0)
{
if(userRecord.UserType.trim().equalsIgnoreCase('PowerPartner') == true)
{
this.IsPartner = true;
}
else
{
//Assume customer portal user
}
}
else
{
//Should never see this but there just in case
throw new CustomException('No UserType has been specified for the user with a username of ' + Username);
}
}
//This ensures we have a protocol and the trailing slash at the end of the hostname
private String getCleanedHostname(String hostname)
{
if(hostname == null || hostname.trim().length() == 0)
{
throw new CustomException('getCleanedHostname - A hostname is required');
}
if(hostname.trim().startsWith('http://') == false || hostname.trim().startsWith('https://') == false)
{
//Assume SSL
//hostname = 'https://' + hostname;
}
if(hostname.trim().endsWith('/') == false)
{
hostname = hostname + '/';
}
return hostname;
}
global PageReference login()
{
loadUserRecord();
this.StartUrl = System.currentPageReference().getParameters().get('startURL');
String hostname = null;
String portalId = null;
String urlString = null;
if(StartUrl == null || StartUrl.trim().length() == 0)
{
List<String> values = new List<String>();
if(IsPartner == true)
{
hostname = PartnerPortalHostname;
portalId = PartnerPortalId;
urlString = '{0}secur/login_portal.jsp?orgId={1}&portalId={2}&un={3}&pw={4}';
}
else
{
hostname = CustomerPortalHostname;
portalId = CustomerPortalId;
urlString = '{0}secur/login_portal.jsp?orgId={1}&portalId={2}&un={3}&pw={4}';
}
hostname = getCleanedHostname(hostname);
values.add(hostname);
values.add(orgId);
values.add(portalId);
values.add(username);
values.add(password);
this.StartUrl = String.format(urlString, values);
}
System.debug('### START URL = ' + StartUrl);
HttpRequest request = new HttpRequest();
request.setEndpoint(StartUrl);
request.setMethod('GET');
/*
Blob headerValue = Blob.valueOf(username + ':' + password);
String authorizationHeader = 'BASIC ' +
EncodingUtil.base64Encode(headerValue);
req.setHeader('Authorization', authorizationHeader);
*/
Http http = new Http();
HTTPResponse response = http.send(request);
debugResponse(response);
if(response.getStatusCode() == 200)
{
return new PageReference(hostname + 'home/home.jsp');
}
else if(response.getStatusCode() == 302)
{
return new PageReference(response.getHeader('Location'));
}
else
{
return null;
}
//return Site.login(username, password, startUrl);
}
private void debugResponse(HttpResponse response)
{
if(response == null)
{
return;
}
UDebug.printDebug('BODY = ' + response.getBody());
UDebug.printDebug('STATUS = ' + response.getStatus());
UDebug.printDebug('STATUS CODE = ' + response.getStatusCode());
for(String key : response.getHeaderKeys())
{
if(key != null && key.trim().length() > 0)
{
String header = response.getHeader(key);
UDebug.printDebug(key + ' = ' + header);
}
}
}
public class CustomException extends Exception {}
@IsTest(SeeAllData=true)
global static void testPortalLoginController ()
{
Integer portalSettingsRowCount = [select count() from SitesToPortalsRedirectSettings__c];
if(portalSettingsRowCount == 0)
{
SitesToPortalsRedirectSettings__c setting = (SitesToPortalsRedirectSettings__c) USObject.getCustomSetting('SitesToPortalsRedirectSettings__c');
setting.Portal_Hostname__c = 'http://www.test.test';
setting.Portal_Id__c = '123';
insert setting;
}
PortalLoginController controller = new PortalLoginController ();
controller.username = 'test@salesforce.com';
controller.password = '123456';
System.assertEquals(controller.login(),null);
}
}
-
- julienb
- December 06, 2013
- Like
- 0
TestMethod do not support service callouts
Hi,
I got the following class with testmethod that does not support service call out.
I trying to change the testmethod to use mock responce but i must admin i'm quite new to apex...
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_callouts_wsdl2apex_testing.htm
can someone please help ?
thank you,
Julien
/**
* An apex page controller that exposes the site login functionality
*/
global with sharing class PortalLoginController
{
private User userRecord;
global String OrgId {get; private set;}
global String CustomerPortalHostname {get; private set;}
global String CustomerPortalId {get; private set;}
global String PartnerPortalHostname {get; private set;}
global String PartnerPortalId {get; private set;}
global String StartUrl {get; private set;}
global Boolean IsPartner {get; private set;}
global String Username {get; set;}
global String Password {get; set;}
global PortalLoginController()
{
this.OrgId = UserInfo.getOrganizationId();
this.IsPartner = false;
loadPortalInfo();
}
private void loadPortalInfo()
{
List<SitesToPortalsRedirectSettings__c> settings = SitesToPortalsRedirectSettings__c.getAll().values();
if(settings.size() == 0 || settings.size() > 2)
{
if(settings.size() > 2)
{
throw new CustomException('Too many portals have been setup in the SitesToPortalsRedirectSettings custom setting.');
}
else
{
throw new CustomException('No portals have been setup in the SitesToPortalsRedirectSettings custom setting.');
}
}
Integer partnerPortalCount = 0;
Integer customerPortalCount = 0;
for(SitesToPortalsRedirectSettings__c setting : settings)
{
if(setting.Is_Partner_Portal__c == true)
{
partnerPortalCount++;
}
else
{
customerPortalCount++;
}
}
if(partnerPortalCount > 1)
{
throw new CustomException('Too many partner portals have been setup in the SitesToPortalsRedirectSettings custom setting.');
}
if(customerPortalCount > 1)
{
throw new CustomException('Too many customer portals have been setup in the SitesToPortalsRedirectSettings custom setting.');
}
//If we get here, all checks above passed
for(SitesToPortalsRedirectSettings__c setting : settings)
{
if(setting.Is_Partner_Portal__c == true)
{
this.PartnerPortalHostname = setting.Portal_Hostname__c;
this.PartnerPortalId = setting.Portal_Id__c;
}
else
{
this.CustomerPortalHostname = setting.Portal_Hostname__c;
this.CustomerPortalId = setting.Portal_Id__c;
}
}
}
private void LoadUserRecord()
{
List<User> userRecords = [select Id, UserType from User where Username = :Username];
if(userRecords.size() != 1)
{
return;
}
this.userRecord = userRecords[0];
if(userRecord == null)
{
throw new CustomException('No user was found for username: ' + Username);
}
if(userRecord.UserType != null && userRecord.UserType.trim().length() > 0)
{
if(userRecord.UserType.trim().equalsIgnoreCase('PowerPartner') == true)
{
this.IsPartner = true;
}
else
{
//Assume customer portal user
}
}
else
{
//Should never see this but there just in case
throw new CustomException('No UserType has been specified for the user with a username of ' + Username);
}
}
//This ensures we have a protocol and the trailing slash at the end of the hostname
private String getCleanedHostname(String hostname)
{
if(hostname == null || hostname.trim().length() == 0)
{
throw new CustomException('getCleanedHostname - A hostname is required');
}
if(hostname.trim().startsWith('http://') == false || hostname.trim().startsWith('https://') == false)
{
//Assume SSL
//hostname = 'https://' + hostname;
}
if(hostname.trim().endsWith('/') == false)
{
hostname = hostname + '/';
}
return hostname;
}
global PageReference login()
{
loadUserRecord();
this.StartUrl = System.currentPageReference().getParameters().get('startURL');
String hostname = null;
String portalId = null;
String urlString = null;
if(StartUrl == null || StartUrl.trim().length() == 0)
{
List<String> values = new List<String>();
if(IsPartner == true)
{
hostname = PartnerPortalHostname;
portalId = PartnerPortalId;
urlString = '{0}secur/login_portal.jsp?orgId={1}&portalId={2}&un={3}&pw={4}';
}
else
{
hostname = CustomerPortalHostname;
portalId = CustomerPortalId;
urlString = '{0}secur/login_portal.jsp?orgId={1}&portalId={2}&un={3}&pw={4}';
}
hostname = getCleanedHostname(hostname);
values.add(hostname);
values.add(orgId);
values.add(portalId);
values.add(username);
values.add(password);
this.StartUrl = String.format(urlString, values);
}
System.debug('### START URL = ' + StartUrl);
HttpRequest request = new HttpRequest();
request.setEndpoint(StartUrl);
request.setMethod('GET');
/*
Blob headerValue = Blob.valueOf(username + ':' + password);
String authorizationHeader = 'BASIC ' +
EncodingUtil.base64Encode(headerValue);
req.setHeader('Authorization', authorizationHeader);
*/
Http http = new Http();
HTTPResponse response = http.send(request);
debugResponse(response);
if(response.getStatusCode() == 200)
{
return new PageReference(hostname + 'home/home.jsp');
}
else if(response.getStatusCode() == 302)
{
return new PageReference(response.getHeader('Location'));
}
else
{
return null;
}
//return Site.login(username, password, startUrl);
}
private void debugResponse(HttpResponse response)
{
if(response == null)
{
return;
}
UDebug.printDebug('BODY = ' + response.getBody());
UDebug.printDebug('STATUS = ' + response.getStatus());
UDebug.printDebug('STATUS CODE = ' + response.getStatusCode());
for(String key : response.getHeaderKeys())
{
if(key != null && key.trim().length() > 0)
{
String header = response.getHeader(key);
UDebug.printDebug(key + ' = ' + header);
}
}
}
public class CustomException extends Exception {}
@IsTest(SeeAllData=true)
global static void testPortalLoginController ()
{
Integer portalSettingsRowCount = [select count() from SitesToPortalsRedirectSettings__c];
if(portalSettingsRowCount == 0)
{
SitesToPortalsRedirectSettings__c setting = (SitesToPortalsRedirectSettings__c) USObject.getCustomSetting('SitesToPortalsRedirectSettings__c');
setting.Portal_Hostname__c = 'http://www.test.test';
setting.Portal_Id__c = '123';
insert setting;
}
PortalLoginController controller = new PortalLoginController ();
controller.username = 'test@salesforce.com';
controller.password = '123456';
System.assertEquals(controller.login(),null);
}
}

- julienb
- December 06, 2013
- Like
- 0