You need to sign in to do that
Don't have an account?
Ben Allington
Triggers Test Class won't run
I am very new to apex development but I have created a class for whenever scrum team is created,
the trigger looks up via account, gathers the account id, queries salesforce to get all contact id related to account id, and shares team record. The class is like so
ScrumTeamSharing
ScrumTeamSharingTest
Error
the trigger looks up via account, gathers the account id, queries salesforce to get all contact id related to account id, and shares team record. The class is like so
ScrumTeamSharing
trigger ScrumTeamSharing on agf__ADM_Scrum_Team__c(before insert) { if (trigger.isInsert) { //teamid=a6PA0000000J1AdMAK //agf__ADM_Scrum_Team__c.Account_ID__c = associated account; //agf__ADM_Scrum_Team__c.Id = team id; List <agf__ADM_Scrum_Team__Share> rShare = new List <agf__ADM_Scrum_Team__Share>(); agf__ADM_Scrum_Team__Share TeamShare; for(agf__ADM_Scrum_Team__c ADM : Trigger.new){ TeamShare = new agf__ADM_Scrum_Team__Share(); String IdTeam = ADM.Id; String assAcc = ADM.Account_ID__c; List<Account> alist = [SELECT Id, Name FROM Account WHERE Id=:assAcc]; System.debug('a' + alist); List<Contact> clist = [SELECT Id, Name FROM Contact WHERE Contact.AccountId IN :alist]; System.debug('c' + clist); // Set ID of record being shared TeamShare.ParentId = ADM.Id; // Set ID of user or group being granted access // Set Access Level TeamShare.AccessLevel = 'Read'; //Parse contact Id into the sharing list Integer i = clist.size(); while(i > 0) { TeamShare.UserOrGroupId = clist[i].Id;//add to the team reports i--; } } // Insert the sharing record and capture the save result. // The false parameter allows for partial processing if multiple records passed // into the operation. Database.SaveResult sr = Database.insert(TeamShare,false); // Process the save results. if(sr.isSuccess()){ // Indicates success System.debug('Save Success'); } else { // Get first save result error. Database.Error err = sr.getErrors()[0]; // Check if the error is related to trival access level. // Access level must be more permissive than the object's default. // These sharing records are not required and thus an insert exception is acceptable. if(err.getStatusCode() == StatusCode.FIELD_FILTER_VALIDATION_EXCEPTION && err.getMessage().contains('AccessLevel')){ // Indicates success. System.debug('Success on mapping error'); } else{ // Indicates failure. System.debug('Failed to map error'); } } } }My test class is as follows
ScrumTeamSharingTest
@isTest private class ScrumTeamSharingTest { @isTest static void testTeamSharing() { //create contact for test List<Contact> users = new List<Contact>(); agf__ADM_Scrum_Team__c t = new agf__ADM_Scrum_Team__c(); Account a = new Account(Name='Test Account'); t.Name='testTeam'; t.Account_ID__c=a.Id; insert a; insert t; System.debug('Inserted team & acct: ' + t.Name + ' ' + a.Name); for (Integer j=0; j<5;j++) { //j number of contacts per account users.add(new Contact(firstname ='Test'+j, lastname ='Test'+j, AccountId =a.Id)); } insert users; } }And when it runs the error which I am recieving is like so
Error
ScrumTeamSharingTest: (0/1) Passed METHOD RESULT testTeamSharing : Fail STACK TRACE Class.ScrumTeamSharingTest.testTeamSharing: line 11, column 1 MESSAGE System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, DedupeReminder: execution of AfterInsert caused by: System.DmlException: Insert failed. First exception on row 0; first error: INVALID_CROSS_REFERENCE_KEY, invalid cross reference id: [] Trigger.DedupeReminder: line 7, column 1: []
have you tries switching around the order of your Insert statemtns? Looks like you are trying to use a.id value before actually inserting Account a into the DB. It will not exist at that point. Try this instead: