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

unable to insert Contract for testMethod on trigger
Hello,
I have a before update trigger on Contract that sets the associated Account status to Active when the Contract is activated. The business goal is to keep these values in sync.
I have written the below test method, but I am only able to obtain 57% test coverage, because an insert statement is failing in the method.
Here is the error:
20080202002751.821:Class.TriggerTests.testContractTrigger: line 22, column 17: Insert failed. First exception on row 0; first error: FAILED_ACTIVATION, null: [Status]
Our hunch is that the insert fails because of some special back-end logic around Contract status, which appears to be locked in some way by the platform.
However, I am not certain if and how to bypass this logic (if that's the issue) for the test.
Here is the test method. The failure occurs at the attempt to insert relatedCon.
Any suggestions would be appreciated:
public class TriggerTests {
public static testmethod void testContractTrigger ( ) {
//Insert Account for test
Account testAcc = new Account( Name = 'Test For Contract');
try{
insert testAcc;
}
catch (DmlException e) {
System.debug(e.getMessage());
}
// Obtain reference to new related Contract
Contract relatedCon = new Contract (AccountId = testAcc.Id, ContractTerm = 12, Name = 'Test', Status = 'Draft');
try{
insert relatedCon;
System.debug(relatedCon);
}
catch (DmlException e) {
System.debug(e.getMessage());
}
// This is the Contract that will change as part of the test
// field values should cause the trigger to fire
Contract updatedCon = new Contract(Id = relatedCon.Id, Status = 'Activated' );
// update in database
try{
// this should fire the after update trigger
update updatedCon;
}
catch (DmlException e) {
System.debug(e.getMessage());
}
// Iterate through acct objects, make sure trigger set status to active
for ( Account a : [select Name, Id, AccountStatus__c from Account where Id = :testAcc.Id ] )
System.debug(a.Name + ' ' + a.AccountStatus__c);
//System.assertEquals( 'Active' , a.AccountStatus__c );
}
Here is the trigger:
trigger setAcctActive on Contract (before update) {
// Create a list of accounts to update
List<Account> acctList = new List<Account>();
for (Contract contract : Trigger.new) {
// If the contract has been activated...
if (contract.Status == 'Activated') {
Account a = new Account(Id = contract.AccountId);
// ... set the associated Account as active
a.AccountStatus__c = 'Active';
acctList.add ( a );
}
// update the database with the account status changes
update acctList;
}
}
Message Edited by David Greenberg on 02-01-2008 04:49 PM
I have a before update trigger on Contract that sets the associated Account status to Active when the Contract is activated. The business goal is to keep these values in sync.
I have written the below test method, but I am only able to obtain 57% test coverage, because an insert statement is failing in the method.
Here is the error:
20080202002751.821:Class.TriggerTests.testContractTrigger: line 22, column 17: Insert failed. First exception on row 0; first error: FAILED_ACTIVATION, null: [Status]
Our hunch is that the insert fails because of some special back-end logic around Contract status, which appears to be locked in some way by the platform.
However, I am not certain if and how to bypass this logic (if that's the issue) for the test.
Here is the test method. The failure occurs at the attempt to insert relatedCon.
Any suggestions would be appreciated:
public class TriggerTests {
public static testmethod void testContractTrigger ( ) {
//Insert Account for test
Account testAcc = new Account( Name = 'Test For Contract');
try{
insert testAcc;
}
catch (DmlException e) {
System.debug(e.getMessage());
}
// Obtain reference to new related Contract
Contract relatedCon = new Contract (AccountId = testAcc.Id, ContractTerm = 12, Name = 'Test', Status = 'Draft');
try{
insert relatedCon;
System.debug(relatedCon);
}
catch (DmlException e) {
System.debug(e.getMessage());
}
// This is the Contract that will change as part of the test
// field values should cause the trigger to fire
Contract updatedCon = new Contract(Id = relatedCon.Id, Status = 'Activated' );
// update in database
try{
// this should fire the after update trigger
update updatedCon;
}
catch (DmlException e) {
System.debug(e.getMessage());
}
// Iterate through acct objects, make sure trigger set status to active
for ( Account a : [select Name, Id, AccountStatus__c from Account where Id = :testAcc.Id ] )
System.debug(a.Name + ' ' + a.AccountStatus__c);
//System.assertEquals( 'Active' , a.AccountStatus__c );
}
Here is the trigger:
trigger setAcctActive on Contract (before update) {
// Create a list of accounts to update
List<Account> acctList = new List<Account>();
for (Contract contract : Trigger.new) {
// If the contract has been activated...
if (contract.Status == 'Activated') {
Account a = new Account(Id = contract.AccountId);
// ... set the associated Account as active
a.AccountStatus__c = 'Active';
acctList.add ( a );
}
// update the database with the account status changes
update acctList;
}
}
Message Edited by David Greenberg on 02-01-2008 04:49 PM

try using upsert relatedCon instead of insert relatedCon...