@isTest private class LeadTriggerTest { // ------------------------------------------------------------------------- // リードと取引先責任者を関連付けるトリガーのテスト // ------------------------------------------------------------------------- // 以下、ターゲットとなるトリガーの機能 // メールアドレスが一致する contactを探します。 // 複数見つかる場合は、最終更新日が一番新しい contactに関連付けます。 // メールアドレスが null のリードは無視します。 // 以下、トリガーのロジック // メアド一覧を得る // メアド一覧を元に contactを得る // 更新対象のリードに、contactへの参照をセットする public static Contact createContact( String inputName, String inputEmail) { Contact ret = new Contact(); ret.LastName = inputName; ret.Email = inputEmail; ret.Firstname='ZZ2'; insert ret; ret = [SELECT Id, FirstName, LastName, Email FROM Contact WHERE Id = :ret.Id]; return ret; } public static Account createAccount( String recordTypeId1, String recordTypeId2 ) { Account acc = new Account(); acc.RecordTypeId = recordTypeId1; acc.Name = 'HP test1'; insert acc; List dept = [select Id, Name from Account where ParentId = :acc.Id and Department_Class_Label__c IN ('消化科', '呼吸科') order by Department_Class_Label__c]; Account depart1 = new Account(); depart1.RecordTypeId = recordTypeId2; depart1.Name = '*'; depart1.Department_Name__c = 'Gastoro Intestin Test'; depart1.ParentId = dept[0].Id; depart1.Department_Class__c = dept[0].Id; depart1.Hospital__c = acc.Id; insert depart1; acc = [SELECT Id, OwnerId, Department_Class__c FROM Account WHERE Id = :depart1.Id]; return acc; } public static Lead createLead( String inputName, String inputEmail) { Lead ret = createLeadData( inputName, inputEmail); insert ret; ret = [SELECT Id, FirstName, LastName, Email, Contact__c FROM Lead WHERE Id = :ret.Id]; return ret; } public static Lead createLeadData( String inputName, String inputEmail) { Lead ret = new Lead(); ret.LastName = inputName; ret.Email = inputEmail; ret.company = 'TestCompany'; return ret; } private static testMethod void test01() { // コンタクトを3件作成する // リードを3件作成する // リード3件が、コンタクト3件と一対一で対応することを確認 // コンタクト3件作成 Contact con01 = createContact( 'con01', 'con01_20140519@test.com'); Contact con02 = createContact( 'con02', 'con02_20140519@test.com'); Contact con03 = createContact( 'con03', 'con03_20140519@test.com'); Lead lead01 = createLead( 'con01', 'con01_20140519@test.com'); Lead lead02 = createLead( 'con02', 'con02_20140519@test.com'); Lead lead03 = createLead( 'con03', 'con03_20140519@test.com'); //System.assertEquals( con01.Id, lead01.Contact__c); //System.assertEquals( con02.Id, lead02.Contact__c); //System.assertEquals( con03.Id, lead03.Contact__c); } private static testMethod void test02() { // コンタクトを3件作成する // リードを1件作成する // リード1件が、コンタクト1件と対応していることを確認する // コンタクト3件作成 Contact con01 = createContact( 'con01', 'con01_20140519@test.com'); Contact con02 = createContact( 'con02', 'con02_20140519@test.com'); Contact con03 = createContact( 'con03', 'con03_20140519@test.com'); Lead lead01 = createLead( 'con01', 'con01_20140519@test.com'); //System.assertEquals( con01.Id, lead01.Contact__c); } private static testMethod void test03() { // 同じアドレスのコンタクトを3件作成する // リードを1件作成する // リード3件が、コンタクト3件と一対一で対応することを確認 // コンタクト3件作成 Contact con01 = createContact( 'con01', 'con01_20140519@test.com'); Contact con02 = createContact( 'con02', 'con01_20140519@test.com'); Contact con03 = createContact( 'con03', 'con01_20140519@test.com'); Lead lead01 = createLead( 'con01', 'con01_20140519@test.com'); //System.assertEquals( con03.Id, lead01.Contact__c); } private static testMethod void test04() { // コンタクトを3件作成する // リードを3件作成する // リード3件が、コンタクト3件と一対一で対応しないことを確認する // コンタクト3件作成 Contact con01 = createContact( 'con01', 'con01_20140519@test.com'); Contact con02 = createContact( 'con02', 'con02_20140519@test.com'); Contact con03 = createContact( 'con03', 'con03_20140519@test.com'); Lead lead01 = createLead( 'con01', 'con11_20140519@test1.com'); Lead lead02 = createLead( 'con02', 'con12_20140519@test1.com'); Lead lead03 = createLead( 'con03', 'con13_20140519@test1.com'); //System.assertEquals( null, lead01.Contact__c); //System.assertEquals( null, lead02.Contact__c); //System.assertEquals( null, lead03.Contact__c); } private static testMethod void test05() { // コンタクトを3件作成する // リードを3件、一度に作成する // リード3件が、コンタクト3件と一対一で対応することを確認 // コンタクト3件作成 Contact con01 = createContact( 'con01', 'con01_20140519@test.com'); Contact con02 = createContact( 'con02', 'con02_20140519@test.com'); Contact con03 = createContact( 'con03', 'con03_20140519@test.com'); Lead lead01 = createLeadData( 'con01', 'con01_20140519@test.com'); Lead lead02 = createLeadData( 'con02', 'con02_20140519@test.com'); Lead lead03 = createLeadData( 'con03', 'con03_20140519@test.com'); List leadList = new List(); leadList.add( lead01); leadList.add( lead02); leadList.add( lead03); insert leadList; lead01 = [SELECT Id, FirstName, LastName, Email, Contact__c FROM Lead WHERE Id = :lead01.Id]; lead02 = [SELECT Id, FirstName, LastName, Email, Contact__c FROM Lead WHERE Id = :lead02.Id]; lead03 = [SELECT Id, FirstName, LastName, Email, Contact__c FROM Lead WHERE Id = :lead03.Id]; //System.assertEquals( con01.Id, lead01.Contact__c); //System.assertEquals( con02.Id, lead02.Contact__c); //System.assertEquals( con03.Id, lead03.Contact__c); } private static testMethod void test06() { // コンタクトを3件作成する // リードを3件、一度に作成する // リード3件が、コンタクト3件と一対一で対応することを確認 // スルーされることを確認 // コンタクト3件作成 Contact con01 = createContact( 'con01', 'con01_20140519@test.com'); Contact con02 = createContact( 'con02', 'con02_20140519@test.com'); Contact con03 = createContact( 'con03', 'con03_20140519@test.com'); Lead lead01 = createLeadData( 'con01', 'con01_20140519@test.com'); Lead lead02 = createLeadData( 'con02', 'con02_20140519@test.com'); Lead lead03 = createLeadData( 'con03', 'con03_20140519@test.com'); StaticParameter.EscapeLeadTrigger = true; List leadList = new List(); leadList.add( lead01); leadList.add( lead02); leadList.add( lead03); insert leadList; lead01 = [SELECT Id, FirstName, LastName, Email, Contact__c FROM Lead WHERE Id = :lead01.Id]; lead02 = [SELECT Id, FirstName, LastName, Email, Contact__c FROM Lead WHERE Id = :lead02.Id]; lead03 = [SELECT Id, FirstName, LastName, Email, Contact__c FROM Lead WHERE Id = :lead03.Id]; //System.assertEquals( null, lead01.Contact__c); //System.assertEquals( null, lead02.Contact__c); //System.assertEquals( null, lead03.Contact__c); } private static testMethod void test07() { RecordType rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and DeveloperName = 'Hp']; List rectDpt = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and DeveloperName IN ('Department_GI', 'Department_BF') order by DeveloperName desc]; Account acc = createAccount(rectCo.Id, rectDpt[0].Id); Lead lead = new Lead(); lead.LastName = 'con01'; lead.Email = 'con01_20140519@test.com'; lead.company = 'TestCompany'; lead.Department_Class__c = acc.Department_Class__c; insert lead; lead.owner_not_automatically_update__c = true; update lead; } }