@isTest
public class NFM606ControllerTest {

    @testSetup
    static void makeTestRepair() {
        Oly_TriggerHandler.bypass('UserProfileHandler');
        // 医院的记录类型
        List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and DeveloperName = 'Hp'];
        // 战略科室 消化科的记录类型
        List<RecordType> rectSct = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_Class_GI'];
        // 消化科的记录类型
        List<RecordType> rectDpt = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_GI'];
        // 经销商的记录类型
        List<RecordType> Agency = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and DeveloperName = 'Agency'];
        // 创建经销商
        Account company = new Account();
        company.RecordTypeId = Agency[0].Id;
        company.Name         = 'NFM601';
        upsert company;
        Contact contact = new Contact();
        contact.AccountId = company.Id;
        contact.FirstName = '責任者';
        contact.LastName = 'test1经销商';
        contact.recordtypeId = '01210000000QfWi';
        // contact.SendToComPlat__c = true;
        insert contact;
        
        // 省
        Address_Level__c al = new Address_Level__c();
        al.Name = '東京';
        al.Level1_Code__c = 'CN-99';
        al.Level1_Sys_No__c = '999999';
        insert al;
        // 市
        Address_Level2__c al2 = new Address_Level2__c();
        al2.Level1_Code__c = 'CN-99';
        al2.Level1_Sys_No__c = '999999';
        al2.Level1_Name__c = '東京';
        al2.Name = '渋谷区';
        al2.Level2_Code__c = 'CN-9999';
        al2.Level2_Sys_No__c = '9999999';
        al2.Address_Level__c = al.id;
        insert al2;

        // 病院を作る
        Account hospital = new Account();
        hospital.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'HP'].id;
        hospital.Name = 'test hospital';
        hospital.Is_Active__c = '有効';
        hospital.Attribute_Type__c = '卫生部';
        hospital.Speciality_Type__c = '综合医院';
        hospital.Grade__c = '一级';
        hospital.OCM_Category__c = 'SLTV';
        hospital.Is_Medical__c = '医疗机构';
        hospital.State_Master__c = al.id;
        hospital.City_Master__c = al2.id;
        hospital.Town__c = '东京';
        insert hospital;

        // 戦略科室を得る
        Account[] strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_OTH'];
        // 診療科を作る
        Account dep = new Account();
        dep.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_OTH'].id;
        dep.Name = 'test dep';
        dep.AgentCode_Ext__c = '9999998';
        dep.ParentId = strategicDep[0].Id;
        dep.Department_Class__c = strategicDep[0].Id;
        dep.Hospital__c = hospital.Id;
        insert dep;

        Contact contact2 = new Contact();
        contact2.AccountId = dep.Id;
        contact2.FirstName = '責任者';
        contact2.LastName = 'test1经销商';
        insert contact2;

        Contact contact3 = new Contact();
        contact3.AccountId = strategicDep[0].Id;
        contact3.Agency_User__c = true;
        contact3.FirstName = '責任者1';
        contact3.LastName = 'test1经销商1';
        insert contact3;


        

        User us = new User(Test_staff__c = true, LastName = 'hp', FirstName = 'owner', Alias = 'hp', CommunityNickname = 'hpOwner', Email = 'olympus_hpowner@sunbridge.com', Username = 'olympus_hpowner@sunbridge.com', IsActive = true, EmailEncodingKey = 'ISO-2022-JP', TimeZoneSidKey = 'Asia/Tokyo', LocaleSidKey = 'ja_JP', LanguageLocaleKey = 'ja', ProfileId =System.Label.ProfileId_SystemAdmin);
        insert us;

    	BatchIF_Log__c iflog = new BatchIF_Log__c();
        iflog.Log__c = '{"GeDatas":{"Monitoring":{"TransmissionDateTime":"20211222175520","timestamp":null,"Text":"","Tag":"MSGH","sign":null,"Sender":"SFDC","Receiver":"智慧医疗/服务新系统","NumberOfRecord":"1","MessageType":"NFM606","MessageGroupNumber":"20211222175520","appKey":null,"API_TOKEN":"b9b67bf9951b435ecc6b06d4a4bf1813","API_TIME":"1640166920766","API_RANDOM_STR":"BC08858446F0F521"},"GeData":[{"Status":true,"State":null,"ServiceUserId":"","SalesBusinessDivision":null,"PersonManagementCode":"C000132435","Name":"刘璐","Mobile":null,"Hospital":"","Email":null,"Department":"","ContactId":"7612","City":null,"AgentUserType":"管理者","AgentFlag":true,"AgentCode":"0003745093","Account":"AME International GmbH"}]}}';
                iflog.Type__c = '606test';
        insert iflog;

    }

    @isTest
    static void testCallOut1(){
        List<Contact> conList = [select id from Contact];   

        Test.startTest();

        List<Id> idList = new List<Id>();
        for(Contact con : conList){
            idList.add(con.Id);
        }
        BatchIF_Log__c iflog = new BatchIF_Log__c();
        iflog.Log__c = 'test start \n';
        insert iflog;

        NFM606Controller.callout(iflog.Id,idList);

        Test.stopTest();
    }

    @isTest
    static void testCallOut1_1(){
        List<RecordType> Agency = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and DeveloperName = 'Agency'];

        // 创建经销商
        Account company1 = new Account();
        company1.RecordTypeId = Agency[0].Id;
        company1.Name         = 'NFM606';
        upsert company1;
        Contact contact111 = new Contact();
        contact111.AccountId = company1.Id;
        contact111.MobilePhone = '11111111111';
        contact111.Isactive__c = '123';
        contact111.FirstName = '責任者';
        contact111.LastName = 'test1经销商';
        contact111.recordtypeId = '01210000000QfWi';
        insert contact111;
        Test.startTest();
        List<Id> idList = new List<Id>();
        idList.add(contact111.Id);
        BatchIF_Log__c iflog = new BatchIF_Log__c();
        iflog.Log__c = '{"GeDatas":{"Monitoring":{"TransmissionDateTime":"20211222175520","timestamp":null,"Text":"","Tag":"MSGH","sign":null,"Sender":"SFDC","Receiver":"智慧医疗/服务新系统","NumberOfRecord":"1","MessageType":"NFM606","MessageGroupNumber":"20211222175520","appKey":null,"API_TOKEN":"b9b67bf9951b435ecc6b06d4a4bf1813","API_TIME":"1640166920766","API_RANDOM_STR":"BC08858446F0F521"},"GeData":[{"Status":true,"State":null,"ServiceUserId":"","SalesBusinessDivision":null,"PersonManagementCode":"C000132435","Name":"刘璐","Mobile":null,"Hospital":"","Email":null,"Department":"","ContactId":"7612","City":null,"AgentUserType":"管理者","AgentFlag":true,"AgentCode":"0003745093","Account":"AME International GmbH"}]}}';
                iflog.Type__c = '606test';
        insert iflog;

        NFM606Controller.callout(iflog.Id,idList);

        Test.stopTest();
    }
    


    // 手动执行
    @isTest
    static void testcallout3(){
    	BatchIF_Log__c iflog = [select id from BatchIF_Log__c where Type__c = '606test'];
        NFM606Controller.ManualExecute(iflog.Id);
    }
}