You need to sign in to do that
Don't have an account?

test class for super clone
public class SuperCloneService { public Id doClone(String parentId) { Set<String> querySobject = new Set<String>(); for(Super_Clone_Objects__mdt m : [select Id, DeveloperName, Label, API_Name__c from Super_Clone_Objects__mdt ]){ querySobject.add(m.API_Name__c) ; } Map <String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe(); String objectAPIName = ''; String keyPrefix = parentId.substring(0,3); for( Schema.SObjectType obj : schemaMap.Values() ){ String prefix = obj.getDescribe().getKeyPrefix(); if(prefix == keyPrefix){ objectAPIName = obj.getDescribe().getName(); break; } } Set <String> fieldMap = schemaMap.get(objectAPIName).getDescribe().fields.getMap().keySet(); List<String> finalFields = new List<String>() ; finalFields.addAll(fieldMap); SObjectType objToken = Schema.getGlobalDescribe().get(objectAPIName); DescribeSObjectResult objDef = objToken.getDescribe(); Map<String,String> so = new Map<String,String>(); Map<String,String> so1 = new Map<String,String>(); for (Schema.ChildRelationship cr: objDef.getChildRelationships()) { if(cr.getField().getDescribe().isAccessible()&& cr.getField().getDescribe().isCreateable()&&cr.getField().getDescribe().isAccessible() && cr.getRelationshipName()!=null){ if(querySobject.contains(''+cr.getChildSObject())){ so.put(''+cr.getChildSObject() , ''+cr.getRelationshipName()); so1.put(''+cr.getRelationshipName() , ''+cr.getField()); } } } List<String> subqueries = prepareSubqueries(so, schemaMap); String query = 'SELECT ' + String.join(finalFields, ',')+ ','+String.join(subqueries, ',') + ' FROM ' +objectAPIName + ' WHERE Id = \''+parentId+'\''; List<Sobject> parentObj = Database.query(query); Sobject parentRecordId = parentObj[0]; Sobject clonedRecord = parentRecordId.clone(); insert clonedRecord; List<sObject> childObjects =cloneChildren(parentRecordId, clonedRecord, so ,so1); insert childObjects; List<Attachment> attachmentsToInsert = new List<Attachment>(); insert attachmentsToInsert; System.debug('clonedRecord'+clonedRecord.Id); return clonedRecord.Id ; } private List<sObject> cloneChildren( Sobject parent, Sobject child, Map<String , String> childRelatedListObjects, Map<String , String> childRelatedListObjects1 ){ List<sObject> childObjects = new List<SObject>(); for (String childObjectDefinition : childRelatedListObjects.values()) { List<sObject> parentRecords = parent.getSObjects(childObjectDefinition); System.debug('parentRecords'+parentRecords); if (parentRecords != null) { List<sObject> records = parentRecords.deepClone(); System.debug('records'+records); for (sObject record : records) { record.put(childRelatedListObjects1.get(childObjectDefinition), child.Id); } childObjects.addAll(records); } } return childObjects; } private List<String> prepareSubqueries( Map<String , String> childrelatedListObjects, Map <String, Schema.SObjectType> schemaMap ){ List<String> subqueries = new List<String>(); for(String childObject : childrelatedListObjects.keySet()){ List<String> childFields = new List<String>(); Map <String, Schema.SObjectField> fieldMap = schemaMap.get(childObject).getDescribe().fields.getMap(); System.debug('fieldMap'+fieldMap); for(Schema.SObjectField sof : fieldMap.values()){ DescribeFieldResult dfr = sof.getDescribe(); if(dfr.isCreateable()){ childFields.add(dfr.getName()); } } if(!childFields.isEmpty()){ String query = '(SELECT ' + String.join(childFields, ',') + ' FROM ' + childrelatedListObjects.get(childObject) + ')'; subqueries.add(query); } } return subqueries; } }Hello Everyone,
Can anyone help me with the testclass for above code.?
Thank you.