444 lines
13 KiB
OpenEdge ABL
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());
|
|
}
|
|
|
|
|
|
} |