You need to sign in to do that
Don't have an account?
sam_Admin
Help with test class for S2S trigger
Can anyone help me with test class for below trigger?
Trigger AutoforwardOpp on Opportunity(after insert, after update)
{
List <PartnerNetworkRecordConnection> prncList;
List <PartnerNetworkConnection> connectionList;
Map <ID, PartnerNetworkConnection> connMap;
Map <ID, ID> oppIdvsAccountIdMap;
Map<ID, Account> accountWithContactMap;
ID cid;
String status;
String connName;
if(Trigger.isafter && (Trigger.isInsert || Trigger.isUpdate)){
connectionList = new List<PartnerNetworkConnection>();
prncList = new List<PartnerNetworkRecordConnection>();
//This would ideally return multiple active Connections if they exist hence its best you use a
//criteria to ensure only the appropriate connection record is returned.
connMap = new Map<ID, PartnerNetworkConnection>(
[Select ID, ConnectionStatus, ConnectionName
From PartnerNetworkConnection
Where ConnectionStatus = 'Accepted']);
//get connection details
for(ID connId :connMap.keySet()){
cid = connMap.get(connId).ID;
status = connMap.get(connId).ConnectionStatus;
connName = connMap.get(connId).ConnectionName;
}
//Populate a map of Opp Ids and associated Account Ids
oppIdvsAccountIdMap = new Map<ID, ID>();
for(Opportunity oppRecord :Trigger.new){
if(oppRecord.Name.contains('US')|| oppRecord.Name.contains('VSI')){
//System.debug('Opp Id: ' + oppRecord.ID + '-> Account Id: ' + oppRecord.AccountId);
oppIdvsAccountIdMap.put(oppRecord.ID, oppRecord.AccountId);
}
}
//Get associated Accounts and Contacts for every US opportunity if they exist
if(oppIdvsAccountIdMap.keySet().size() > 0){
accountWithContactMap = new Map<ID, Account>(
[Select ID, Name,
(Select ID, Name, Account.Id From Account.Contacts)
From Account
Where ID IN :oppIdvsAccountIdMap.values()]);
//Create PartnerNetworkRecordConnections for sharing the records
for(ID oppId : oppIdvsAccountIdMap.keySet()){
ID accountId = oppIdvsAccountIdMap.get(oppId);
//Share Opportunity
prncList.add(new PartnerNetworkRecordConnection(
ConnectionId = cid,
LocalRecordId = oppId,
SendClosedTasks = true,
SendOpenTasks = true,
SendEmails = true));
//Share Account
if(oppIdvsAccountIdMap.get(oppId) != null){
prncList.add(new PartnerNetworkRecordConnection(
ConnectionId = cid,
LocalRecordId = accountId,
SendClosedTasks = true,
SendOpenTasks = true,
SendEmails = true));
}
//Share associated Contacts
if(accountWithContactMap.get(accountId).Contacts != null){
for(Contact contact :accountWithContactMap.get(accountId).Contacts){
prncList.add(new PartnerNetworkRecordConnection(
ConnectionId = cid,
LocalRecordId = contact.ID,
// ParentRecordId = Contact.AccountId,
SendClosedTasks = true,
SendOpenTasks = true,
SendEmails = true));
}
}
}//for
//Insert record connections
if(!prncList.isEmpty()){
try{
insert prncList;
}
catch(System.Dmlexception dmlExceptionInstance){
System.debug('Record Share Error:' + dmlExceptionInstance.getMessage());
}
}
}//if
}
}
Trigger AutoforwardOpp on Opportunity(after insert, after update)
{
List <PartnerNetworkRecordConnection> prncList;
List <PartnerNetworkConnection> connectionList;
Map <ID, PartnerNetworkConnection> connMap;
Map <ID, ID> oppIdvsAccountIdMap;
Map<ID, Account> accountWithContactMap;
ID cid;
String status;
String connName;
if(Trigger.isafter && (Trigger.isInsert || Trigger.isUpdate)){
connectionList = new List<PartnerNetworkConnection>();
prncList = new List<PartnerNetworkRecordConnection>();
//This would ideally return multiple active Connections if they exist hence its best you use a
//criteria to ensure only the appropriate connection record is returned.
connMap = new Map<ID, PartnerNetworkConnection>(
[Select ID, ConnectionStatus, ConnectionName
From PartnerNetworkConnection
Where ConnectionStatus = 'Accepted']);
//get connection details
for(ID connId :connMap.keySet()){
cid = connMap.get(connId).ID;
status = connMap.get(connId).ConnectionStatus;
connName = connMap.get(connId).ConnectionName;
}
//Populate a map of Opp Ids and associated Account Ids
oppIdvsAccountIdMap = new Map<ID, ID>();
for(Opportunity oppRecord :Trigger.new){
if(oppRecord.Name.contains('US')|| oppRecord.Name.contains('VSI')){
//System.debug('Opp Id: ' + oppRecord.ID + '-> Account Id: ' + oppRecord.AccountId);
oppIdvsAccountIdMap.put(oppRecord.ID, oppRecord.AccountId);
}
}
//Get associated Accounts and Contacts for every US opportunity if they exist
if(oppIdvsAccountIdMap.keySet().size() > 0){
accountWithContactMap = new Map<ID, Account>(
[Select ID, Name,
(Select ID, Name, Account.Id From Account.Contacts)
From Account
Where ID IN :oppIdvsAccountIdMap.values()]);
//Create PartnerNetworkRecordConnections for sharing the records
for(ID oppId : oppIdvsAccountIdMap.keySet()){
ID accountId = oppIdvsAccountIdMap.get(oppId);
//Share Opportunity
prncList.add(new PartnerNetworkRecordConnection(
ConnectionId = cid,
LocalRecordId = oppId,
SendClosedTasks = true,
SendOpenTasks = true,
SendEmails = true));
//Share Account
if(oppIdvsAccountIdMap.get(oppId) != null){
prncList.add(new PartnerNetworkRecordConnection(
ConnectionId = cid,
LocalRecordId = accountId,
SendClosedTasks = true,
SendOpenTasks = true,
SendEmails = true));
}
//Share associated Contacts
if(accountWithContactMap.get(accountId).Contacts != null){
for(Contact contact :accountWithContactMap.get(accountId).Contacts){
prncList.add(new PartnerNetworkRecordConnection(
ConnectionId = cid,
LocalRecordId = contact.ID,
// ParentRecordId = Contact.AccountId,
SendClosedTasks = true,
SendOpenTasks = true,
SendEmails = true));
}
}
}//for
//Insert record connections
if(!prncList.isEmpty()){
try{
insert prncList;
}
catch(System.Dmlexception dmlExceptionInstance){
System.debug('Record Share Error:' + dmlExceptionInstance.getMessage());
}
}
}//if
}
}
You may want to check if the Test Data that you created within your test class complies with any custom Validation Rule or Required field settings which may cause your test class to fail. Please verify and create the test data accordingly to add the necessary fields or data and that should fix the issue for you.
Please do not forget to mark this thread as SOLVED and asnwer as the BEST ANSWER if it helps address your issue.
All Answers
May I request you to please check for Test Class Generator App from APP Exchange.Please refer the below link.
https://appexchange.salesforce.com/listingDetail?listingId=a0N3A00000EFozgUAD
I hope it will be helpful.
Please mark it as best answer if the information is informative.
Thanks & Regards
Gopal M.
Do You got a chance to check the Test generator app from App Exchange please check the below link
- https://appexchange.salesforce.com/listingDetail?listingId=a0N3A00000EFozgUAD
Hope it will be helpful.Please mark it as best answer if the information is informative.
Thanks
Rahul Kumar
System.DmlException: Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, 必须输入一个值 采购设备/系统: [FFCNSales_PurchaseEquipment__c]
@istest
public class AutoforwardOpp
{
static testmethod void myTest()
{
Account acc = new Account(Name = 'test', Province__c = 'China', HospitalCatalog__c = 'Test', HospitalLevel__c = 'High', HospitalGrade__c = 'First', HospitalOwner__c = 'Test', Phone = '1234567890');
insert acc;
Contact con = new Contact(LastName = 'Test2', Email = 'test.user@gmail.com', Department = 'IT', Title = 'Mr', AccountId = acc.Id, FFSS_Account_Name__c = 'test');
insert con;
Product2 prd = new Product2(Name = 'Test');
insert prd;
Opportunity opp = new Opportunity(Name = 'Test', AccountId = acc.Id, StageName = '101', FFCNSales_PurchaseEquipment__c = prd.Id, Amount = 50, CloseDate = Date.newInstance(2009,02,01), FFSS_Account_Name__c = 'SonoSite');
insert opp;
}
}
You may want to check if the Test Data that you created within your test class complies with any custom Validation Rule or Required field settings which may cause your test class to fail. Please verify and create the test data accordingly to add the necessary fields or data and that should fix the issue for you.
Please do not forget to mark this thread as SOLVED and asnwer as the BEST ANSWER if it helps address your issue.
I just found this Blog Post (https://automationchampion.com/2015/03/13/getting-started-with-process-builder-part-10-auto-forward-records-to-a-connection/) which uses an out of box Process Builder approach to automatically share records to a Salesforce to Salesforce connection without having the need to write code. You might want to give it a try since that would help you save all the effort and pain of writing test code for the earlier written Apex Trigger during your production deployment.