diff --git a/source/classes/MockDml.cls b/source/classes/MockDml.cls index 839a725..1543582 100644 --- a/source/classes/MockDml.cls +++ b/source/classes/MockDml.cls @@ -528,13 +528,21 @@ global class MockDml extends Dml { // This allows injected errors for Accounts/Contacts/Opps to be caught and handled appropriately // 1. Simulate converting the lead this.validateConvertedLead(leadToConvert); - this.generateMockResult(MockDml.CONVERTED, leadRecord, true); // 2. Simulate creating an Account/Contact/Opportunity, if their Id wasn't already provided this.simulateInsertIfNew(accountRecord); this.simulateInsertIfNew(contactRecord); this.simulateInsertIfNew(opportunityRecord); - // 3. Build & return the LeadConvertResult w/the resulting record ids - return (MockDml.LeadConvertResult) new MockDml.LeadConvertResult(leadRecord) + // 3. Set the converted record id fields on the Lead, which are normally read-only: + Lead convertedLead = (Lead) new MockRecord(leadRecord) + ?.setField(Lead.ConvertedAccountId, accountRecord?.Id) + ?.setField(Lead.ConvertedContactId, contactRecord?.Id) + ?.setField(Lead.ConvertedOpportunityId, opportunityRecord?.Id) + ?.setField(Lead.IsConverted, true) + ?.setField(Lead.Status, leadToConvert?.getConvertedStatus()) + ?.toSObject(); + this.generateMockResult(MockDml.CONVERTED, convertedLead, true); + // 4. Build & return the LeadConvertResult w/the resulting record ids + return (MockDml.LeadConvertResult) new MockDml.LeadConvertResult(convertedLead) ?.setId(accountRecord) ?.setId(contactRecord) ?.setId(opportunityRecord); diff --git a/source/classes/MockDmlTest.cls b/source/classes/MockDmlTest.cls index 7a495b2..75029f5 100644 --- a/source/classes/MockDmlTest.cls +++ b/source/classes/MockDmlTest.cls @@ -14,14 +14,13 @@ private class MockDmlTest { // **** TESTS **** // @IsTest private static void shouldMockLeadConvert() { - Map leads = new Map(); + String convertedStatus = 'Foo!'; List leadsToConvert = new List(); for (Integer i = 0; i < TEST_SIZE; i++) { Lead lead = (Lead) new MockRecord(Lead.SObjectType)?.withId()?.toSObject(); - leads?.put(lead?.Id, lead); Database.LeadConvert leadToConvert = new Database.LeadConvert(); leadToConvert?.setLeadId(lead?.Id); - leadToConvert?.setConvertedStatus('Foo!'); + leadToConvert?.setConvertedStatus(convertedStatus); leadsToConvert?.add(leadToConvert); } @@ -39,11 +38,16 @@ private class MockDmlTest { for (Database.LeadConvertResult result : results) { Assert.isTrue(result?.isSuccess(), 'Did not succeed: ' + result?.getErrors()); Id leadId = result?.getLeadId(); - Lead lead = leads?.get(leadId); - Assert.areNotEqual(null, lead, 'No lead w/matching Id: ' + leadId); - Assert.areNotEqual(null, result?.getAccountId(), 'Missing ConvertedAccountId'); - Assert.areNotEqual(null, result?.getContactId(), 'Missing ConvertedContactId'); - Assert.areNotEqual(null, result?.getOpportunityId(), 'Missing ConvertedOpportunityId'); + Lead lead = (Lead) MockDml.CONVERTED.get(leadId); + Assert.areNotEqual(null, lead, 'Missing lead: ' + leadId); + Assert.areNotEqual(null, lead?.ConvertedAccountId, 'Lead: Missing ConvertedAccountId'); + Assert.areNotEqual(null, lead?.ConvertedContactId, 'Lead: Missing ConvertedContactId'); + Assert.areNotEqual(null, lead?.ConvertedOpportunityId, 'Lead: Missing ConvertedOpportunityId'); + Assert.areEqual(true, lead?.IsConverted, 'Lead: Wrong IsConverted value'); + Assert.areEqual(convertedStatus, lead?.Status, 'Lead: Wrong Status value'); + Assert.areEqual(lead?.ConvertedAccountId, result?.getAccountId(), 'Result: Wrong AccountId'); + Assert.areEqual(lead?.ConvertedContactId, result?.getContactId(), 'Result: Wrong ContactId'); + Assert.areEqual(lead?.ConvertedOpportunityId, result?.getOpportunityId(), 'Result: Wrong OpportunityId'); } }