I'm just getting started with Quote component library. My test class throws an error that I can't seem to figure out. The test class, which throws "System.TypeException: Invalid conversion from runtime type zqu.PropertyComponentController.ParentController to zqu.CreateQuoteController" when instantiating the class. Why? //
// Sample code:
// https://github.com/zuora/Z-Force/blob/master/Plugin%20SampleCode/z_DefaultValuesControllerTest.cls
//
@isTest
global class CreateQuoteDefaultValuesTest extends zqu.CreateQuoteController.PopulateDefaultFieldValuePlugin {
public static final String acctId = '12345678901234567890123456789012';
public static final String subId = '23456789012345678901234567890123';
static Final String Sales_Opportunity_Developer_Name = 'Sales_Opportunity';
static Final RecordType Sales_Opportunity_RT = [Select Id from RecordType
Where SObjectType = 'Opportunity'
And DeveloperName = :Sales_Opportunity_Developer_Name];
static Account testAccount = (Account)TestFactory.createSObject(new Account(), True);
static Contact testContact = (Contact)TestFactory.createSObject(new Contact(AccountId = testAccount.Id), True);
static Opportunity testOpp = (Opportunity)TestFactory.createSObject(
new Opportunity(
AccountId=testAccount.Id
,Invoice_Contact__c=testContact.Id
,Technical_Contact__c=testContact.Id
,RecordTypeId=Sales_Opportunity_RT.Id)
, True);
@isTest
private static void testSalesOppNoInvoiceContact() {
zqu__Quote__c quote = createTestQuote(testAccount, testOpp, null, null, true, true);
CreateQuoteDefaultValues controller = new CreateQuoteDefaultValues();
PageReference createQuote = Page.zqu__CreateQuote;
createQuote.getParameters().put('oppId', testOpp.Id);
createQuote.getParameters().put('quoteType', 'Subscription');
createQuote.getParameters().put('stepNumber', '2');
Test.setCurrentPage(Page.zqu__CreateQuote);
Test.startTest();
// System.TypeException: Invalid conversion from runtime type zqu.PropertyComponentController.ParentController to zqu.CreateQuoteController
controller.populateDefaultFieldValue(quote, new zqu.PropertyComponentController.ParentController());
Test.stopTest();
}
//Create a test Quote
public static zqu__Quote__c createTestQuote(Account acc, Opportunity opp, Contact billTo, Contact soldTo, Boolean isNewSub, Boolean doInsert) {
isNewSub = (isNewSub != null) ? isNewSub : true;
zqu__Quote__c quote = new zqu__Quote__c();
quote.Name = 'Test Quote';
quote.zqu__SubscriptionType__c = (isNewSub) ? 'New Subscription' : 'Amend Subscription';
quote.zqu__StartDate__c = System.today();
quote.zqu__ValidUntil__c = System.today();
quote.zqu__Subscription_Term_Type__c = 'Termed';
quote.zqu__InitialTerm__c = 12;
quote.zqu__RenewalTerm__c = 12;
quote.zqu__Account__c = (acc != null) ? acc.Id : null;
quote.zqu__Opportunity__c = (opp != null) ? opp.Id : null;
quote.zqu__BillToContact__c = (billTo != null) ? billTo.Id : null;
quote.zqu__SoldToContact__c = (soldTo != null) ? soldTo.Id : null;
quote.zqu__ExistSubscriptionID__c = (isNewSub) ? null : subId;
if (doInsert) {
insert quote;
}
return quote;
}
} The plugin class: //
// Sample code:
// https://github.com/zuora/Z-Force/blob/master/Plugin%20SampleCode/z_DefaultValuesController.cls
//
global class CreateQuoteDefaultValues extends zqu.CreateQuoteController.PopulateDefaultFieldValuePlugin{
global override void populateDefaultFieldValue(SObject record, zqu.PropertyComponentController.ParentController pcc) {
super.populateDefaultFieldValue(record, pcc);
//Populate default values in the quote header
record.put('zqu__InitialTerm__c', 12);
record.put('zqu__RenewalTerm__c', 12);
record.put('zqu__ValidUntil__c', Date.today().addDays(30));
record.put('zqu__StartDate__c', Date.today());
// record.put('zqu__PaymentMethod__c', 'Check');
// Retrieve the opp ID from the quote
Id oppId = (Id) record.get('zqu__Opportunity__c');
Opportunity theOpp;
Contact billToContact;
Contact soldToContact;
zuora__customerAccount__c soldToAccount;
for (Opportunity o : [Select Id,
CurrencyIsoCode,
AccountId,
Invoice_Contact__r.Name,
Invoice_Contact__r.Id,
Invoice_Contact__r.AccountId,
Technical_Contact__r.Name,
Technical_Contact__r.Id,
Technical_Contact__r.Account.Id,
Technical_Contact__r.Account.Name,
RecordType.DeveloperName
from Opportunity where Id = :oppId]) {
theOpp = o;
record.put('zqu__Currency__c', theOpp.CurrencyIsoCode);
if (theOpp.Invoice_Contact__r.AccountId == theOpp.AccountId) {
billToContact = theOpp.Invoice_Contact__r;
soldToContact = theOpp.Invoice_Contact__r;
if (billToContact != Null) {
record.put('zqu__BillToContact__c', theOpp.Invoice_Contact__r.Id);
record.put('zqu__SoldToContact__c', theOpp.Invoice_Contact__r.Id);
}
}
}
if (theOpp.RecordType.DeveloperName == 'Channel_Opportunity') {
for (zuora__customerAccount__c a : [Select Id, Name, Zuora__Account__c
From zuora__customerAccount__c
Where zuora__account__c = :theOpp.AccountId
And currencyisocode = :theOpp.CurrencyIsoCode]) {
soldToContact = theOpp.Technical_Contact__r;
if (soldToContact != Null) {
record.put('zqu__SoldToContact__c', soldToContact.Id);
}
soldToAccount = a;
record.put('zqu__InvoiceOwnerName__c', soldToAccount.Id);
}
}
// Before retrieving the lookup options, needs to populate the map first
super.setLookupOptions(pcc);
// Now retrieve the lookup component options
if (billToContact != Null) {
zqu.LookupComponentOptions billToOptions = super.getLookupOption('zqu__BillToContact__c');
billToOptions.targetId = billToContact.Id;
billToOptions.targetName = billToContact.Name;
}
if (soldToContact != Null) {
zqu.LookupComponentOptions soldToOptions = super.getLookupOption('zqu__SoldToContact__c');
soldToOptions.targetId = soldToContact.Id;
soldToOptions.targetName = soldToContact.Name;
}
if (soldToAccount != Null) {
zqu.LookupComponentOptions invoiceOwnerOptions = super.getLookupOption('zqu__InvoiceOwnerName__c');
invoiceOwnerOptions.targetId = soldToAccount.Id;
invoiceOwnerOptions.targetName = soldToAccount.Name;
}
}
}
... View more