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

573 lines
17 KiB
OpenEdge ABL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@IsTest
public with sharing class SFTPFeatureTest {
/*---------------------------------------------
MOCK – SUCCESS RESPONSE (200)
----------------------------------------------*/
private class SFTPSuccessMock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
System.debug('Mock Endpoint Hit: ' + req.getEndpoint());
System.debug('Mock Request Body: ' + req.getBody());
HttpResponse res = new HttpResponse();
res.setStatusCode(200);
res.setHeader('Content-Type', 'application/json');
// Simulated flat file list from server
res.setBody(JSON.serialize(new List<Object>{
new Map<String,Object>{
'name' => 'rootFolder',
'path' => '/rootFolder',
'type' => 'folder'
},
new Map<String,Object>{
'name' => 'file1.txt',
'path' => '/rootFolder/file1.txt',
'type' => 'file'
}
}));
return res;
}
}
/*---------------------------------------------
TEST METHOD – ROOT LISTING
----------------------------------------------*/
@IsTest
static void testListFiles_Success_Root() {
System.debug('===== TEST LIST FILES START =====');
Test.setMock(HttpCalloutMock.class, new SFTPSuccessMock());
// Prepare params
Map<String,Object> payload = new Map<String,Object>{
'host' => 'testHost',
'username' => 'testUser'
};
Map<String,Object> params = new Map<String,Object>{
'payload' => payload
// No folderId = root listing
};
Test.startTest();
// Replace YourClassName with actual class name
SFTPFeature service = new SFTPFeature();
OperationResult result = service.listFiles(params);
Test.stopTest();
System.debug('OperationResult: ' + result);
System.debug('Returned Data: ' + JSON.serializePretty(result.data));
System.assertNotEquals(null, result);
System.assertEquals(true, result.success);
System.debug('===== TEST LIST FILES END =====');
}
/*-------------------------------------------------
MOCK – 201 SUCCESS WITH BODY
--------------------------------------------------*/
private class CreateFolderSuccessMock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
System.debug('Mock Endpoint: ' + req.getEndpoint());
System.debug('Mock Body: ' + req.getBody());
HttpResponse res = new HttpResponse();
res.setStatusCode(201);
res.setHeader('Content-Type', 'application/json');
res.setBody(JSON.serialize(new Map<String,Object>{
'code' => 201,
'message' => 'Folder created successfully',
'path' => '/var/sftp/shared/newFolder'
}));
return res;
}
}
/*-------------------------------------------------
MOCK – 200 SUCCESS EMPTY BODY
--------------------------------------------------*/
private class CreateFolderEmptyBodyMock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(200);
res.setBody('');
return res;
}
}
/*-------------------------------------------------
MOCK – ERROR RESPONSE
--------------------------------------------------*/
private class CreateFolderErrorMock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(400);
res.setBody('Bad Request');
return res;
}
}
/*-------------------------------------------------
TEST – SUCCESS WITH BODY
--------------------------------------------------*/
@IsTest
static void testCreateFolder_SuccessWithBody() {
System.debug('===== TEST SUCCESS WITH BODY START =====');
Test.setMock(HttpCalloutMock.class, new CreateFolderSuccessMock());
Map<String,Object> payload = new Map<String,Object>{
'host' => 'testHost',
'username' => 'testUser'
};
Map<String,Object> params = new Map<String,Object>{
'parentFolderId' => null,
'folderName' => 'newFolder',
'payload' => payload
};
Test.startTest();
SFTPFeature service = new SFTPFeature (); // replace with real class name
OperationResult result = service.createFolder(params);
Test.stopTest();
System.debug('Result: ' + result);
System.debug('Returned Data: ' + result.data);
System.assertEquals(true, result.success);
System.assertNotEquals(null, result.data);
System.debug('===== TEST SUCCESS WITH BODY END =====');
}
// @IsTest
// public static void testStoreSftpCredentials_Success() {
// System.debug('===== TEST storeSftpCredentials START =====');
// HIC_FilesME.SFTPFeature.isTestMode = true;
// // Prepare payload
// Map<String,Object> payload = new Map<String,Object>{
// 'username' => 'testUser',
// 'password' => 'testPassword',
// 'host' => 'testHost.com'
// };
// Test.startTest();
// // Call method
// SFTPFeature.storeSftpCredentials(true, payload);
// Test.stopTest();
// System.debug('Method executed successfully');
// // No exception = success
// System.assert(true, 'Method executed without exception');
// System.debug('===== TEST storeSftpCredentials END =====');
// }
private class SFTPDeleteFileMock implements HttpCalloutMock {
Integer statusCode;
String responseBody;
SFTPDeleteFileMock(Integer statusCode, String responseBody) {
this.statusCode = statusCode;
this.responseBody = responseBody;
}
public HttpResponse respond(HttpRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(statusCode);
res.setBody(responseBody);
System.debug('Mock Responding with Status: ' + statusCode);
System.debug('Mock Body: ' + responseBody);
return res;
}
}
@IsTest
static void testDeleteFile_Success() {
Map<String,Object> payload = new Map<String,Object>{
'username' => 'testUser',
'password' => 'testPass',
'host' => 'testHost'
};
Map<String,Object> params = new Map<String,Object>{
'fileId' => '/var/sftp/shared/test.txt',
'isServiceMode' => true,
'payload' => payload
};
Test.setMock(HttpCalloutMock.class,
new SFTPDeleteFileMock(200, 'File deleted successfully'));
Test.startTest();
OperationResult result = new HIC_FilesME.SFTPFeature().deleteFile(params);
Test.stopTest();
System.debug('Delete Success Result: ' + result);
System.assertNotEquals(null, result);
}
private class SFTPRenameMock implements HttpCalloutMock {
Integer statusCode;
String responseBody;
SFTPRenameMock(Integer statusCode, String responseBody) {
this.statusCode = statusCode;
this.responseBody = responseBody;
}
public HttpResponse respond(HttpRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(statusCode);
res.setBody(responseBody);
System.debug('Mock Rename Status: ' + statusCode);
System.debug('Mock Rename Body: ' + responseBody);
return res;
}
}
@IsTest
static void testRenameFile_Success200() {
Map<String,Object> payload = new Map<String,Object>{
'username' => 'testUser',
'password' => 'testPass',
'host' => 'testHost'
};
Map<String,Object> params = new Map<String,Object>{
'fileId' => '/folder/old.txt',
'newFileName' => 'new.txt',
'overwrite' => true,
'payload' => payload
};
String mockResponse = '{"message":"Rename successful"}';
Test.setMock(HttpCalloutMock.class,
new SFTPRenameMock(200, mockResponse));
Test.startTest();
OperationResult result =
new HIC_FilesME.SFTPFeature().renameFile(params);
Test.stopTest();
System.debug('Rename Success 200 Result: ' + result);
System.assertNotEquals(null, result);
}
private class SFTPMoveMock implements HttpCalloutMock {
Integer statusCode;
String responseBody;
SFTPMoveMock(Integer statusCode, String responseBody) {
this.statusCode = statusCode;
this.responseBody = responseBody;
}
public HttpResponse respond(HttpRequest req) {
System.debug('Mock Move Endpoint: ' + req.getEndpoint());
System.debug('Mock Move Method: ' + req.getMethod());
System.debug('Mock Move Body: ' + req.getBody());
HttpResponse res = new HttpResponse();
res.setStatusCode(statusCode);
res.setBody(responseBody);
return res;
}
}
@IsTest
static void testMoveFileAndFolder_Success200() {
Map<String,Object> payload = new Map<String,Object>{
'username' => 'testUser',
'password' => 'testPass',
'host' => 'testHost'
};
Map<String,Object> params = new Map<String,Object>{
'sourceKey' => '/folder/old.txt',
'destinationKey' => '/folder/new.txt',
'overwrite' => true,
'payload' => payload
};
String mockResponse = '{"message":"Move successful"}';
Test.setMock(HttpCalloutMock.class,
new SFTPMoveMock(200, mockResponse));
Test.startTest();
OperationResult result =
new HIC_FilesME.SFTPFeature().moveFileAndFolder(params);
Test.stopTest();
System.debug('Move 200 Result: ' + result);
System.assertNotEquals(null, result);
}
@isTest
static void testLinkFiles() {
// Create parent record
Account acc = new Account(Name = 'Test Account');
insert acc;
System.debug('Account Id >>> ' + acc.Id);
// Create 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 = 'SFTP Folder',
HIC_FilesME__Folder_URL__c = 'https://sftp.test.com/folder',
HIC_FilesME__Storage_Provider__c = 'SFTP',
HIC_FilesME__Access_Level__c = 'Public',
HIC_FilesME__Connected_Username__c = 'testuser',
HIC_FilesME__Is_Active__c = true
);
insert folder;
System.debug('Inserted Folder >>> ' + folder);
Test.startTest();
// Call method
SFTPFeature feature = new SFTPFeature();
OperationResult result = feature.linkFiles(folder.Id);
Test.stopTest();
System.debug('OperationResult >>> ' + result);
// Assertions
System.assert(result != null, 'Result should not be null');
if(result.success){
System.debug('Result Data >>> ' + result.data);
System.assert(true, 'Folders fetched successfully');
} else {
System.assert(false, 'Operation should be successful');
}
}
@isTest
static void testToLinkFiles() {
// Create parent record
Account acc = new Account(Name = 'Test Account');
insert acc;
System.debug('Account Id >>> ' + acc.Id);
// Prepare folder details JSON
Map<String, Object> folderMap = new Map<String, Object>();
folderMap.put('id', 'EXT-1001');
folderMap.put('name', 'Test SFTP Folder');
folderMap.put('linkedBy', 'testUser');
folderMap.put('url', 'https://sftp.test.com/folder');
String folderDetails = JSON.serialize(folderMap);
System.debug('folderDetails JSON >>> ' + folderDetails);
Test.startTest();
// Call method
SFTPFeature feature = new SFTPFeature();
OperationResult result = feature.toLinkFiles(acc.Id, folderDetails, 'SFTP');
Test.stopTest();
System.debug('OperationResult >>> ' + result);
// Verify record inserted
List<HIC_FilesME__Linked_Folder__c> folders = [
SELECT Id, HIC_FilesME__External_Folder_ID__c,
HIC_FilesME__Folder_Name__c,
HIC_FilesME__Storage_Provider__c,
HIC_FilesME__Connected_Username__c,
HIC_FilesME__Folder_URL__c,
HIC_FilesME__Is_Active__c
FROM HIC_FilesME__Linked_Folder__c
WHERE HIC_FilesME__Linked_Record__c = :acc.Id
];
System.debug('Inserted folders >>> ' + folders);
// Assertions
System.assertEquals(1, folders.size(), 'One folder should be inserted');
System.assertEquals('EXT-1001', folders[0].HIC_FilesME__External_Folder_ID__c);
System.assertEquals('Test SFTP Folder', folders[0].HIC_FilesME__Folder_Name__c);
System.assertEquals('SFTP', folders[0].HIC_FilesME__Storage_Provider__c);
System.assertEquals(true, folders[0].HIC_FilesME__Is_Active__c);
}
@isTest
static void testUnlinkFiles_Success() {
// Create parent record
Account acc = new Account(Name = 'Test Account');
insert acc;
System.debug('Account Id >>> ' + acc.Id);
// Create 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 = 'EXT-2001',
HIC_FilesME__Folder_Name__c = 'Test Folder Name',
HIC_FilesME__Storage_Provider__c = 'SFTP',
HIC_FilesME__Is_Active__c = true
);
insert folder;
System.debug('Inserted Folder >>> ' + folder);
Test.startTest();
SFTPFeature feature = new SFTPFeature();
OperationResult result = feature.unlinkFiles(acc.Id, 'EXT-2001', false);
Test.stopTest();
System.debug('OperationResult >>> ' + result);
// Verify record deleted
List<HIC_FilesME__Linked_Folder__c> folders = [
SELECT Id FROM HIC_FilesME__Linked_Folder__c
WHERE Id = :folder.Id
];
System.debug('Remaining folders >>> ' + folders);
System.assertEquals(0, folders.size(), 'Folder should be deleted');
}
public class SFTPUploadMock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
System.debug('Mock Request Endpoint >>> ' + req.getEndpoint());
System.debug('Mock Request Body >>> ' + req.getBody());
HttpResponse res = new HttpResponse();
res.setHeader('Content-Type', 'application/json');
res.setBody('{"message":"File uploaded successfully"}');
res.setStatusCode(200);
return res;
}
}
@isTest
static void testUploadFileSuccess() {
// Register Mock
Test.setMock(HttpCalloutMock.class, new SFTPUploadMock());
String host = 'test.sftp.com';
String username = 'testUser';
String password = 'testPass';
String uploadPath = '/uploads';
String fileName = 'sample.txt';
String base64Data = EncodingUtil.base64Encode(Blob.valueOf('Test File Content'));
System.debug('Base64 Data >>> ' + base64Data);
Test.startTest();
OperationResult result = SFTPFeature.uploadFile(
host,
username,
password,
uploadPath,
fileName,
base64Data
);
Test.stopTest();
System.debug('OperationResult >>> ' + result);
System.assert(result != null, 'Result should not be null');
}
@isTest
static void testStoreSftpCredentials() {
// Prepare payload map
Map<String, Object> payload = new Map<String, Object>();
payload.put('username', 'testUser');
payload.put('password', 'testPassword');
payload.put('host', 'sftp.test.com');
System.debug('Payload Map >>> ' + payload);
Boolean isAdminCred = true;
Test.startTest();
// Call the method
SFTPFeature.storeSftpCredentials(isAdminCred, payload);
Test.stopTest();
System.debug('storeSftpCredentials method executed successfully');
// Assertion just to confirm execution
System.assert(true, 'Method executed without any exception');
}
}