@isTest
private class ContactTriggerHandlerTest {

	public static Account account1 = new Account();
    public static Account account2 = new Account();
    public static Contact contact1 = new Contact();
    public static Contact contact2 = new Contact();
	
    @Testsetup
    static void setup(){
        TestDataUtility.CreatePIPolicyConfiguration('Agency_Contact__c');
        
    } 
	@isTest static void test_method_one() {
        List<RecordType> HPrectCo = [select Id, Name, DeveloperName from RecordType where IsActive = true and SobjectType = 'Account' and DeveloperName = 'HP'];
        List<RecordType> GIrectCo = [select Id, Name, DeveloperName from RecordType where IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_Class_GI'];
        List<RecordType> DoctorrectCo = [select Id, Name, DeveloperName from RecordType where IsActive = true and SobjectType = 'Contact' and DeveloperName = 'Doctor'];
        if (HPrectCo.size() == 0) {
            throw new ControllerUtil.myException('not found HP recordtype');
        }
        if (GIrectCo.size() == 0) {
            throw new ControllerUtil.myException('not found Department_Class_GI recordtype');
        }
        if (DoctorrectCo.size() == 0) {
            throw new ControllerUtil.myException('not found Doctor recordtype');
        }
		// 取引先
        account1.Name = 'test1医院';
        // account1.RecordTypeId = '01210000000QemG';
        account1.RecordTypeId = HPrectCo[0].Id;
        insert account1;
        // 取引先責任者
        contact1.AccountId = account1.Id;
        contact1.FirstName = '責任者';
        contact1.LastName = 'test1医院';
        Account dept = [select Id from Account where RecordTypeId =: GIrectCo[0].Id];
        contact1.Strategic_dept_Class__c = dept.Id;
        contact1.MobilePhone = '13409507069';
        // contact1.RecordTypeId = '01210000000QfWdAAK';
        contact1.RecordTypeId = DoctorrectCo[0].Id;
        contact1.UnifiedI_Contact_ID__c = '100000';
        insert contact1;

        contact2.FirstName = 'test';
        contact2.LastName = 'Data';
        // contact2.RecordTypeId = '01210000000QfWi';
        contact2.RecordTypeId = DoctorrectCo[0].Id;
        contact2.AccountId = account1.Id;
        contact2.Agency_User__c = true;
        contact2.MobilePhone = '18999999999';
        insert contact2;

        MeetingManagement__c a = 
        new MeetingManagement__c(Contact__c =contact1.id
            ,pollingTime__c = 1,
            VisitTime__c= 1,InspectTime__c =1,
            InspectEquipmentTime__c = 1,TeachingTime__c =1 ,
            MaintenanceReportTime__c =1
         );
        insert a;
        update contact1;
        List<Agency_Contact__c> agency_contact = [Select Id, Name,Contact__c from Agency_Contact__c];

        System.assertEquals(agency_contact.size(), 1);
        System.assertEquals(agency_contact[0].Contact__c, contact1.Id);

        delete contact1;

        agency_contact = [Select Id, Name from Agency_Contact__c];

        System.assertEquals(agency_contact.size(), 0);
	}
	@isTest
    static void test_method_two(){
        List<RecordType> AgencyrectCo1 = [select Id, Name, DeveloperName from RecordType where IsActive = true and SobjectType = 'Account' and DeveloperName = 'Agency'];
        if (AgencyrectCo1.size() == 0) {
            throw new ControllerUtil.myException('not found AccountAgency recordtype');
        }
        List<RecordType> AgencyrectCo2 = [select Id, Name, DeveloperName from RecordType where IsActive = true and SobjectType = 'Contact' and DeveloperName = 'Agency'];
        if (AgencyrectCo2.size() == 0) {
            throw new ControllerUtil.myException('not found ContactAgency recordtype');
        }
        account2.Name = 'test2 经销商';
        // account2.RecordTypeId = '01210000000Qem1';
        account2.RecordTypeId = AgencyrectCo1[0].Id;
        insert account2;

        contact2.FirstName = 'test';
        contact2.LastName = 'Data';
        // contact2.RecordTypeId = '01210000000QfWi';
        contact2.RecordTypeId = AgencyrectCo2[0].Id;
        contact2.AccountId = account2.Id;
        contact2.Agency_User__c = true;
        contact2.MobilePhone = '18999999999';
        insert contact2;

        Contact contact3 = new Contact();
        contact3.FirstName = 'test';
        contact3.LastName = 'Data';
        // contact3.RecordTypeId = '01210000000QfWi';
        contact3.RecordTypeId = AgencyrectCo2[0].Id;
        contact3.AccountId = account2.Id;
        // contact3.Agency_User__c = true;
        contact3.Ignore_Same_Name__c = true;
        contact3.MobilePhone = '';
        insert contact3;

        contact2.MobilePhone = '1899999999A';
        update contact2; 
        
        List<account> accList  = [select Dealer_Num__c From account];
        system.assertEquals(accList[0].Dealer_Num__c,1);

        contact2.Agency_User__c = false;
        update contact2;
        List<account> accList2  = [select Dealer_Num__c From account];
        system.assertEquals(accList2[0].Dealer_Num__c,0);

        contact2.Agency_User__c = true;
        update contact2;
        delete contact2;
        List<account> accList3  =  [select Dealer_Num__c From account];
        system.assertEquals(accList3[0].Dealer_Num__c,0);
    }
}