Backup_FME_personal/force-app/main/default/classes/AWSS3FeatureTest.cls

444 lines
13 KiB
OpenEdge ABL

@IsTest
public with sharing class AWSS3FeatureTest {
private class ListFilesMock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setHeader('Content-Type', 'application/json');
res.setStatusCode(200);
// Sample JSON response (List of files)
String mockBody = '[{"name":"file1.txt","size":"1024"},' +
'{"name":"file2.pdf","size":"2048"}]';
res.setBody(mockBody);
return res;
}
}
@IsTest
static void testListFiles_Success() {
// Set Mock
Test.setMock(HttpCalloutMock.class, new ListFilesMock());
// Prepare params
Map<String, Object> params = new Map<String, Object>();
params.put('isServiceMode', true);
Map<String, Object> payload = new Map<String, Object>{
'accessKey' => 'dummyAccess',
'secretKey' => 'dummySecret'
};
params.put('payload', payload);
params.put('key', 'test-folder');
Test.startTest();
OperationResult result = new AWSS3Feature().listFiles(params);
Test.stopTest();
System.assertNotEquals(null, result);
}
@IsTest
static void testStoreAwsS3Credentials() {
// Prepare payload
Map<String, Object> payload = new Map<String, Object>{
'accessKey' => 'testAccessKey',
'secretAccessKey' => 'testSecretKey',
'region' => 'ap-south-1',
'bucketName' => 'test-bucket'
};
Test.startTest();
AWSS3Feature.storeAwsS3Credentials(true, payload);
Test.stopTest();
}
/*
* Mock - 200 Success
*/
private class DeleteFile200Mock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(200);
res.setBody('File Deleted Successfully');
return res;
}
}
/*
* Mock - 204 Success
*/
private class DeleteFile204Mock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(204);
res.setBody('');
return res;
}
}
// Test for 200
@IsTest
static void testDeleteFile200() {
Test.setMock(HttpCalloutMock.class, new DeleteFile200Mock());
Map<String, Object> params = new Map<String, Object>{
'fileId' => 'sample.txt',
'isServiceMode' => true,
'payload' => new Map<String, Object>{
'accessKey' => 'AK',
'secretAccessKey' => 'SK'
}
};
AWSS3Feature service = new AWSS3Feature();
Test.startTest();
OperationResult result = service.deleteFile(params);
Test.stopTest();
}
// Test for 204
@IsTest
static void testDeleteFile204() {
Test.setMock(HttpCalloutMock.class, new DeleteFile204Mock());
Map<String, Object> params = new Map<String, Object>{
'fileId' => 'sample.txt',
'isServiceMode' => true,
'payload' => new Map<String, Object>()
};
AWSS3Feature service = new AWSS3Feature();
Test.startTest();
OperationResult result = service.deleteFile(params);
Test.stopTest();
}
/*
* Mock - 200 Success
*/
private class CreateFolder200Mock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(200);
res.setBody('Folder Created');
return res;
}
}
/*
* Mock - 201 Success
*/
private class CreateFolder201Mock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(201);
res.setBody('Folder Created');
return res;
}
}
// Test for 200 Status Code
@IsTest
static void testCreateFolder200() {
Test.setMock(HttpCalloutMock.class, new CreateFolder200Mock());
Map<String, Object> params = new Map<String, Object>{
'parentFolderId' => 'root',
'isServiceMode' => true,
'folderName' => 'TestFolder',
'key' => 'TestFolder',
'payload' => new Map<String, Object>{
'accessKey' => 'AK',
'secretAccessKey' => 'SK',
'region' => 'ap-south-1'
}
};
AWSS3Feature service = new AWSS3Feature();
Test.startTest();
OperationResult result = service.createFolder(params);
Test.stopTest();
}
// Test for 201 Status Code
@IsTest
static void testCreateFolder201() {
Test.setMock(HttpCalloutMock.class, new CreateFolder201Mock());
Map<String, Object> params = new Map<String, Object>{
'parentFolderId' => 'root',
'isServiceMode' => true,
'folderName' => 'TestFolder201',
'key' => 'TestFolder201',
'payload' => new Map<String, Object>()
};
AWSS3Feature service = new AWSS3Feature();
Test.startTest();
OperationResult result = service.createFolder(params);
Test.stopTest();
}
/*
* Mock - 200 Success
*/
private class RenameFileSuccessMock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(200);
// Must return JSON because method deserializes response
res.setBody('{"message":"Rename Successful"}');
return res;
}
}
// Test Method
@IsTest
static void testRenameFileSuccess() {
Test.setMock(HttpCalloutMock.class, new RenameFileSuccessMock());
Map<String, Object> params = new Map<String, Object>{
'fileId' => 'oldFolder/', // includes trailing slash
'isServiceMode' => true,
'newFileName' => 'newFolder/',
'payload' => new Map<String, Object>{
'accessKey' => 'AK',
'secretAccessKey' => 'SK',
'region' => 'ap-south-1'
}
};
AWSS3Feature service = new AWSS3Feature();
Test.startTest();
OperationResult result = service.renameFile(params);
Test.stopTest();
}
/*
* Mock - 200 Success
*/
private class MoveFileSuccessMock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(200);
// Must return valid JSON because method deserializes it
res.setBody('{"message":"Move Successful"}');
return res;
}
}
// Test Method
@IsTest
static void testMoveFileAndFolderSuccess() {
Test.setMock(HttpCalloutMock.class, new MoveFileSuccessMock());
Map<String, Object> params = new Map<String, Object>{
'isServiceMode' => true,
'sourceKey' => 'oldFolder/file.txt',
'destinationKey' => 'newFolder/file.txt',
'payload' => new Map<String, Object>{
'accessKey' => 'AK',
'secretAccessKey' => 'SK',
'region' => 'ap-south-1'
}
};
AWSS3Feature service = new AWSS3Feature();
Test.startTest();
OperationResult result = service.moveFileAndFolder(params);
Test.stopTest();
}
/*
* Mock - File Download Success
*/
private class DownloadFileSuccessMock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(200);
// Simulate file content
Blob fileBlob = Blob.valueOf('Sample File Content');
res.setBodyAsBlob(fileBlob);
return res;
}
}
// Success Test
@IsTest
static void testDownloadFileSuccess() {
Test.setMock(HttpCalloutMock.class, new DownloadFileSuccessMock());
Map<String, Object> params = new Map<String, Object>{
'fileId' => 'sample.txt',
'isServiceMode' => true,
'payload' => new Map<String, Object>{
'accessKey' => 'AK',
'secretAccessKey' => 'SK'
}
};
AWSS3Feature service = new AWSS3Feature();
Test.startTest();
OperationResult result = service.downloadFile(params);
Test.stopTest();
}
@IsTest
static void testLinkFilesSuccess() {
// Create a test record to link folder with
Account acc = new Account(Name = 'Test Account');
insert acc;
// Insert Linked Folder test record
HIC_FilesME__Linked_Folder__c folder = new HIC_FilesME__Linked_Folder__c(
Name = 'Test Folder',
HIC_FilesME__Linked_Record__c = acc.Id,
HIC_FilesME__External_Folder_ID__c = 'EXT123',
HIC_FilesME__Folder_Name__c = 'Demo Folder',
HIC_FilesME__Folder_URL__c = 'https://aws.amazon.com/demo',
HIC_FilesME__Storage_Provider__c = 'AwsS3',
HIC_FilesME__Access_Level__c = 'Public',
HIC_FilesME__Connected_Username__c = 'testuser',
HIC_FilesME__Is_Active__c = true
);
insert folder;
AWSS3Feature service = new AWSS3Feature();
Test.startTest();
OperationResult result = service.linkFiles(acc.Id);
Test.stopTest();
}
@IsTest
static void testToLinkFilesSuccess() {
Account acc = new Account(Name = 'Test Account');
insert acc;
Map<String, Object> folderMap = new Map<String, Object>{
'id' => 'EXT123',
'name' => 'Demo Folder',
'url' => 'https://aws.amazon.com/demo',
'linkedBy' => 'testuser'
};
String folderDetails = JSON.serialize(folderMap);
AWSS3Feature service = new AWSS3Feature();
Test.startTest();
OperationResult result =
service.toLinkFiles(acc.Id, folderDetails, 'awss3');
Test.stopTest();
System.assert(result != null);
System.assertEquals(true, result.success);
HIC_FilesME__Linked_Folder__c rec = [
SELECT HIC_FilesME__External_Folder_ID__c,
HIC_FilesME__Folder_Name__c,
HIC_FilesME__Storage_Provider__c,
HIC_FilesME__Connected_Username__c,
HIC_FilesME__Is_Active__c
FROM HIC_FilesME__Linked_Folder__c
WHERE HIC_FilesME__Linked_Record__c = :acc.Id
LIMIT 1
];
System.assertEquals('EXT123', rec.HIC_FilesME__External_Folder_ID__c);
System.assertEquals('Demo Folder', rec.HIC_FilesME__Folder_Name__c);
System.assertEquals('AwsS3', rec.HIC_FilesME__Storage_Provider__c);
System.assertEquals('testuser', rec.HIC_FilesME__Connected_Username__c);
System.assertEquals(true, rec.HIC_FilesME__Is_Active__c);
}
@IsTest
static void testUnlinkFiles() {
// Create parent record
Account acc = new Account(Name = 'Test Account');
insert acc;
// Insert linked folder record
HIC_FilesME__Linked_Folder__c folder = new HIC_FilesME__Linked_Folder__c(
Name = 'Test Folder',
HIC_FilesME__Linked_Record__c = acc.Id,
HIC_FilesME__External_Folder_ID__c = 'EXT123',
HIC_FilesME__Folder_Name__c = 'Demo Folder',
HIC_FilesME__Storage_Provider__c = 'awss3',
HIC_FilesME__Is_Active__c = true
);
insert folder;
AWSS3Feature service = new AWSS3Feature();
Test.startTest();
OperationResult result = service.unlinkFiles(acc.Id, 'EXT123', false);
Test.stopTest();
// Verify record deleted
List<HIC_FilesME__Linked_Folder__c> remaining = [
SELECT Id
FROM HIC_FilesME__Linked_Folder__c
WHERE HIC_FilesME__Linked_Record__c = :acc.Id
];
System.assertEquals(0, remaining.size());
}
}