You need to sign in to do that
Don't have an account?
Susmitha T 5
How to write test class for document uplaodapi using restapi
I need to add case with attachment in salesforce from our website, In web-to-case that is not possible directly.. so workaround is
using apis like first ineed to create case then attach files to it.
Iwrite code for file uploading like
@RestResource(urlMapping='/DocumentUpload/*')
global class fileuploaderapi{
@HttpPost
global static void uploadDocument()
{
RestRequest req = RestContext.request;
RestResponse res = Restcontext.response;
Id recId = req.params.get('recordId');
string contenttype = req.params.get('contenttype');
string name = req.params.get('name');
Blob myBlob=Blob.valueOf(name);
try
{
//Insert ContentVersion
ContentVersion cVersion = new ContentVersion();
cVersion.PathOnClient = name;//File name with extention
cVersion.Title = name;//Name of the file
cVersion.VersionData = req.requestBody;//File content
Insert cVersion;
//After saved the Content Verison, get the ContentDocumentId
Id conDocument = [SELECT ContentDocumentId FROM ContentVersion WHERE Id =:cVersion.Id].ContentDocumentId;
//Insert ContentDocumentLink
ContentDocumentLink cDocLink = new ContentDocumentLink();
cDocLink.ContentDocumentId = conDocument;//Add ContentDocumentId
cDocLink.LinkedEntityId = recId;//Add attachment parentId
Insert cDocLink;
RestContext.response.addHeader('Content-Type', 'application/json');
RestContext.response.responseBody = Blob.valueOf(generateJSON('Success',conDocument,''));
}
catch(Exception e)
{
RestContext.response.addHeader('Content-Type', 'application/json');
RestContext.response.responseBody = Blob.valueOf(generateJSON('Error','',e.getMessage()));
}
}
// To generate JSON response
private static string generateJSON(String Status,String Content,String error){
JSONGenerator jsGen = JSON.createGenerator(true);
jsGen.writeStartObject();
jsGen.writeStringField('Status',Status);
jsGen.writeStringField('ContentID', Content);
jsGen.writeStringField('Error', error);
jsGen.writeEndObject();
return jsGen.getAsString();
}
}
It is successfull but i'm getting error for testclass code coverage
My test class is
@isTest
public class fileuploadapitestclass {
static testMethod void testMethod1()
{
// Account acc = [ SELECT Id FROM Account where LastModifiedById!=null LIMIT 1 ];
Case c=new Case();
c.Subject='test';
insert c;
StaticResource sr = [SELECT Id, Body FROM StaticResource WHERE Name = 'GetcaseResource' LIMIT 1];
String body = EncodingUtil.base64Encode(sr.Body);
RestRequest req = new RestRequest();
RestResponse res = new RestResponse();
req.requestURI = '/services/apexrest/DocumentUpload/' ;
req.httpMethod = 'POST';
req.addHeader('Content-Type', 'application/json');
req.addHeader('Content-Type','image/jpeg');
RestContext.request = req;
RestContext.response= res;
Id recId =c.Id;
string contenttype = 'contenttype';
string name = 'testname';
//Blob myBlob=Blob.valueOf(name);
ContentVersion cVersion = new ContentVersion();
cVersion.Title = name;//Name of the file
cVersion.PathOnClient = 'testname.jpg';//File name with extention
cVersion.VersionData =Blob.valueOf(body );//File content
Insert cVersion;
//After saved the Content Verison, get the ContentDocumentId
Id conDocument = [SELECT ContentDocumentId FROM ContentVersion WHERE Id =:cVersion.Id].ContentDocumentId;
//Insert ContentDocumentLink
ContentDocumentLink cDocLink = new ContentDocumentLink();
cDocLink.ContentDocumentId = conDocument;//Add ContentDocumentId
cDocLink.LinkedEntityId = recId;//Add attachment parentId
Insert cDocLink;
Test.setMock(HttpCalloutMock.class, new SMSCalloutMock());
fileuploaderapi.uploadDocument();
string Status;
string Content;
string error;
JSONGenerator jsGen = JSON.createGenerator(true);
jsGen.writeStartObject();
jsGen.writeStringField('Status',Status);
jsGen.writeStringField('ContentID', Content);
jsGen.writeStringField('Error', error);
jsGen.writeEndObject();
Test.stopTest();
}
}
--------------------
I also tried not using static resource but no luck
Can any one help me solving my issue
document upload test class for restapi
How to write test class for document uplaodapi using restapi
I need to add case with attachment in salesforce from our website, In web-to-case that is not possible directly.. so workaround is
using apis like first ineed to create case then attach files to it.
Iwrite code for file uploading like
@RestResource(urlMapping='/DocumentUpload/*')
global class fileuploaderapi{
@HttpPost
global static void uploadDocument()
{
RestRequest req = RestContext.request;
RestResponse res = Restcontext.response;
Id recId = req.params.get('recordId');
string contenttype = req.params.get('contenttype');
string name = req.params.get('name');
Blob myBlob=Blob.valueOf(name);
try
{
//Insert ContentVersion
ContentVersion cVersion = new ContentVersion();
cVersion.PathOnClient = name;//File name with extention
cVersion.Title = name;//Name of the file
cVersion.VersionData = req.requestBody;//File content
Insert cVersion;
//After saved the Content Verison, get the ContentDocumentId
Id conDocument = [SELECT ContentDocumentId FROM ContentVersion WHERE Id =:cVersion.Id].ContentDocumentId;
//Insert ContentDocumentLink
ContentDocumentLink cDocLink = new ContentDocumentLink();
cDocLink.ContentDocumentId = conDocument;//Add ContentDocumentId
cDocLink.LinkedEntityId = recId;//Add attachment parentId
Insert cDocLink;
RestContext.response.addHeader('Content-Type', 'application/json');
RestContext.response.responseBody = Blob.valueOf(generateJSON('Success',conDocument,''));
}
catch(Exception e)
{
RestContext.response.addHeader('Content-Type', 'application/json');
RestContext.response.responseBody = Blob.valueOf(generateJSON('Error','',e.getMessage()));
}
}
// To generate JSON response
private static string generateJSON(String Status,String Content,String error){
JSONGenerator jsGen = JSON.createGenerator(true);
jsGen.writeStartObject();
jsGen.writeStringField('Status',Status);
jsGen.writeStringField('ContentID', Content);
jsGen.writeStringField('Error', error);
jsGen.writeEndObject();
return jsGen.getAsString();
}
}
It is successfull but i'm getting error for testclass code coverage
My test class is
@isTest
public class fileuploadapitestclass {
static testMethod void testMethod1()
{
// Account acc = [ SELECT Id FROM Account where LastModifiedById!=null LIMIT 1 ];
Case c=new Case();
c.Subject='test';
insert c;
StaticResource sr = [SELECT Id, Body FROM StaticResource WHERE Name = 'GetcaseResource' LIMIT 1];
String body = EncodingUtil.base64Encode(sr.Body);
RestRequest req = new RestRequest();
RestResponse res = new RestResponse();
req.requestURI = '/services/apexrest/DocumentUpload/' ;
req.httpMethod = 'POST';
req.addHeader('Content-Type', 'application/json');
req.addHeader('Content-Type','image/jpeg');
RestContext.request = req;
RestContext.response= res;
Id recId =c.Id;
string contenttype = 'contenttype';
string name = 'testname';
//Blob myBlob=Blob.valueOf(name);
ContentVersion cVersion = new ContentVersion();
cVersion.Title = name;//Name of the file
cVersion.PathOnClient = 'testname.jpg';//File name with extention
cVersion.VersionData =Blob.valueOf(body );//File content
Insert cVersion;
//After saved the Content Verison, get the ContentDocumentId
Id conDocument = [SELECT ContentDocumentId FROM ContentVersion WHERE Id =:cVersion.Id].ContentDocumentId;
//Insert ContentDocumentLink
ContentDocumentLink cDocLink = new ContentDocumentLink();
cDocLink.ContentDocumentId = conDocument;//Add ContentDocumentId
cDocLink.LinkedEntityId = recId;//Add attachment parentId
Insert cDocLink;
Test.setMock(HttpCalloutMock.class, new SMSCalloutMock());
fileuploaderapi.uploadDocument();
string Status;
string Content;
string error;
JSONGenerator jsGen = JSON.createGenerator(true);
jsGen.writeStartObject();
jsGen.writeStringField('Status',Status);
jsGen.writeStringField('ContentID', Content);
jsGen.writeStringField('Error', error);
jsGen.writeEndObject();
Test.stopTest();
}
}
--------------------
I also tried not using static resource but no luck
Can any one help me solving my issue