You need to sign in to do that
Don't have an account?
jtjaard
The error I'm encountering in eclipse is stating that my trigger lacks code coverage, but production is not accepting the test code I have tried uploading. Any help would be appreciated.
Trigger code from apex cookbook wrong?
I'm having a problem activating triggers. I'm able to upload the trigger, but cannot upload it in production.
I have created test code that came from the cook book, but the production account will not accept it.
When I was testing in the sandbox I did not encounter this issue, everything went smoothly.
Is it possible that the code provided in the cookbook is wrong? What am I doing wrong?
cookbook code from pg. 118:
Code:
public class leadDupePreventerTests{ static testMethod void testLeadDupPreventer() { // First make sure there are no leads already in the system // that have the email addresses used for testing Set<String> testEmailAddress = new Set<String>(); testEmailAddress.add('test1@duptest.com'); testEmailAddress.add('test2@duptest.com'); testEmailAddress.add('test3@duptest.com'); testEmailAddress.add('test4@duptest.com'); testEmailAddress.add('test5@duptest.com'); System.assert([SELECT count() FROM Lead WHERE Email IN :testEmailAddress] == 0); // Seed the database with some leads, and make sure they can // be bulk inserted successfully. Lead lead1 = new Lead(LastName='Test1', Company='Test1 Inc.', Email='test1@duptest.com'); Lead lead2 = new Lead(LastName='Test2', Company='Test2 Inc.', Email='test4@duptest.com'); Lead lead3 = new Lead(LastName='Test3', Company='Test3 Inc.', Email='test5@duptest.com'); Lead[] leads = new Lead[] {lead1, lead2, lead3}; insert leads; // Now make sure that some of these leads can be changed and // then bulk updated successfully. Note that lead1 is not // being changed, but is still being passed to the update // call. This should be OK. lead2.Email = 'test2@duptest.com'; lead3.Email = 'test3@duptest.com'; update leads; // Make sure that single row lead duplication prevention works // on insert. Lead dup1 = new Lead(LastName='Test1Dup', Company='Test1Dup Inc.', Email='test1@duptest.com'); try { insert dup1; System.assert(false); } catch (DmlException e) { System.assert(e.getNumDml() == 1); System.assert(e.getDmlIndex(0) == 0); System.assert(e.getDmlFields(0).size() == 1); System.assert(e.getDmlFields(0)[0] == 'Email'); System.assert(e.getDmlMessage(0).indexOf( 'A lead with this email address already exists.') > -1); } // Make sure that single row lead duplication prevention works // on update. dup1 = new Lead(Id = lead1.Id, LastName='Test1Dup', Company='Test1Dup Inc.', Email='test2@duptest.com'); try { update dup1; System.assert(false); } catch (DmlException e) { System.assert(e.getNumDml() == 1); System.assert(e.getDmlIndex(0) == 0); System.assert(e.getDmlFields(0).size() == 1); System.assert(e.getDmlFields(0)[0] == 'Email'); System.assert(e.getDmlMessage(0).indexOf( 'A lead with this email address already exists.') > -1); } // Make sure that bulk lead duplication prevention works on // insert. Note that the first item being inserted is fine, // but the second and third items are duplicates. Note also // that since at least one record insert fails, the entire // transaction will be rolled back. dup1 = new Lead(LastName='Test1Dup', Company='Test1Dup Inc.', Email='test4@duptest.com'); Lead dup2 = new Lead(LastName='Test2Dup', Company='Test2Dup Inc.', Email='test2@duptest.com'); Lead dup3 = new Lead(LastName='Test3Dup', Company='Test3Dup Inc.', Email='test3@duptest.com'); Lead[] dups = new Lead[] {dup1, dup2, dup3}; try { insert dups; System.assert(false); } catch (DmlException e) { System.assert(e.getNumDml() == 2); System.assert(e.getDmlIndex(0) == 1); System.assert(e.getDmlFields(0).size() == 1); System.assert(e.getDmlFields(0)[0] == 'Email'); System.assert(e.getDmlMessage(0).indexOf( 'A lead with this email address already exists.') > -1); System.assert(e.getDmlIndex(1) == 2); System.assert(e.getDmlFields(1).size() == 1); System.assert(e.getDmlFields(1)[0] == 'Email'); System.assert(e.getDmlMessage(1).indexOf( 'A lead with this email address already exists.') > -1); } // Make sure that bulk lead duplication prevention works on // update. Note that the first item being updated is fine, // because the email address is new, and the second item is // also fine, but in this case it's because the email // address doesn't change. The third case is flagged as an // error because it is a duplicate of the email address of the // first lead's value in the database, even though that value // is changing in this same update call. It would be an // interesting exercise to rewrite the trigger to allow this // case. Note also that since at least one record update // fails, the entire transaction will be rolled back. dup1 = new Lead(Id=lead1.Id, Email='test4@duptest.com'); dup2 = new Lead(Id=lead2.Id, Email='test2@duptest.com'); dup3 = new Lead(Id=lead3.Id, Email='test1@duptest.com'); dups = new Lead[] {dup1, dup2, dup3}; try { update dups; System.assert(false); } catch (DmlException e) { System.debug(e.getNumDml()); System.debug(e.getDmlMessage(0)); System.assert(e.getNumDml() == 1); System.assert(e.getDmlIndex(0) == 2); System.assert(e.getDmlFields(0).size() == 1); System.assert(e.getDmlFields(0)[0] == 'Email'); System.assert(e.getDmlMessage(0).indexOf( 'A lead with this email address already exists.') > -1); } // Make sure that duplicates in the submission are caught when // inserting leads. Note that this test also catches an // attempt to insert a lead where there is an existing // duplicate. dup1 = new Lead(LastName='Test1Dup', Company='Test1Dup Inc.', Email='test4@duptest.com'); dup2 = new Lead(LastName='Test2Dup', Company='Test2Dup Inc.', Email='test4@duptest.com'); dup3 = new Lead(LastName='Test3Dup', Company='Test3Dup Inc.', Email='test3@duptest.com'); dups = new Lead[] {dup1, dup2, dup3}; try { insert dups; System.assert(false); } catch (DmlException e) { System.assert(e.getNumDml() == 2); System.assert(e.getDmlIndex(0) == 1); System.assert(e.getDmlFields(0).size() == 1); System.assert(e.getDmlFields(0)[0] == 'Email'); System.assert(e.getDmlMessage(0).indexOf('Another new lead has the same email address.') > -1); System.assert(e.getDmlIndex(1) == 2); System.assert(e.getDmlFields(1).size() == 1); System.assert(e.getDmlFields(1)[0] == 'Email'); System.assert(e.getDmlMessage(1).indexOf('A lead with this email address already exists.') > -1); } // Make sure that duplicates in the submission are caught when // updating leads. Note that this test also catches an attempt // to update a lead where there is an existing duplicate. dup1 = new Lead(Id=lead1.Id, Email='test4@duptest.com'); dup2 = new Lead(Id=lead2.Id, Email='test4@duptest.com'); dup3 = new Lead(Id=lead3.Id, Email='test2@duptest.com'); dups = new Lead[] {dup1, dup2, dup3}; try { update dups; System.assert(false); } catch (DmlException e) { System.assert(e.getNumDml() == 2); System.assert(e.getDmlIndex(0) == 1); System.assert(e.getDmlFields(0).size() == 1); System.assert(e.getDmlFields(0)[0] == 'Email'); System.assert(e.getDmlMessage(0).indexOf( 'Another new lead has the same email address.') > -1); System.assert(e.getDmlIndex(1) == 2); System.assert(e.getDmlFields(1).size() == 1); System.assert(e.getDmlFields(1)[0] == 'Email'); System.assert(e.getDmlMessage(1).indexOf( 'A lead with this email address already exists.') > -1); } } }
The error I'm encountering in eclipse is stating that my trigger lacks code coverage, but production is not accepting the test code I have tried uploading. Any help would be appreciated.
>> public static testMethod void testLeadDupPreventer() {
Then you can run the method in your dev environment to ensure that the validation tests will succeed.
If you haven't used the Execute Anonymous view, just type in:
leadDupePreventerTests.testLeadDupPreventer();
And the debug output and database call information will be displayed on the results pane below.
Hope that helps,
I modified the same sample code from the cookbook to prevent CONTACTS from being saved if they have a matching Email field. Can anyone tell me why I get this error when attempting to Save/Compile the Test Class for the trigger?
Code in error: System.assert(e.getDmlFields(0)[0] == 'Email');
Save error: Comparison arguments must be compatible types: Schema.SObjectField, String DEV/src/unpackaged/classes contactEmailDuplicatePreventerTests.cls line 41 1214515908416 335
I know this is quite an old email but I was getting the same email so if someone finds it they know the fix. You can't use "Email" to specify the email field you have to do the following:
Schema.DescribeFieldResult F = Contact.Email.getDescribe();
Schema.sObjectField EmailField = F.getSObjectField();
System.assert(e.getDmlFields(0)[0] == EmailField);
So add the two lines and then change the 'Email' to EmailField
Seems to compile ok now.