/**
 * wangweipeng     2021/09/02
 * OdsToUserHandler   的测试类
 * 用于把ods__c表的数据同步到 联系人表(contact)中
 */
@isTest
private class OdsToUserHandlerTest {
// AWSServiceTool2没上线就把这部分注释 start 20220408
   @TestSetup
    static void setup(){
        TestDataUtility.CreatePIPolicyConfigurations(new string[]{'Agency_Contact__c','Contact'});
    } 
    
  @isTest
    static void Test1(){
        Test.setMock(HttpCalloutMock.class, new HttpMock());

        List<Agency_Contact__c> lra = new List<Agency_Contact__c>();
        lra.add(new Agency_Contact__c(
        ));
        insert lra;
        Test.startTest();
        //system.debug(PIHelper.getPIIntegrationInfo('Agency_Contact__c').newEncryptUrl);
        AWSServiceTool2.EncryptPushCore(Json.serialize(lra),'Agency_Contact__c');
        AWSServiceTool2.EncryptPushFuture(null,null);
        Test.stopTest();
    }

  @isTest
    static void Test2(){
        Test.setMock(HttpCalloutMock.class, new HttpMock());

        List<Agency_Contact__c> lra = new List<Agency_Contact__c>();
        lra.add(new Agency_Contact__c(
            Aws_Data_Id__c = '123456'
        ));
        insert lra;
        Test.startTest();
        //system.debug(PIHelper.getPIIntegrationInfo('Agency_Contact__c').newEncryptUrl);
        AWSServiceTool2.EncryptPushCore(Json.serialize(lra),'Agency_Contact__c');
        Test.stopTest();
    }

    @isTest
    static void Test3(){
        Test.setMock(HttpCalloutMock.class, new HttpMock());


        Test.startTest();
        AWSServiceTool2.EncryptPushData(new string[]{'0031000000O4Cff'});

        Test.stopTest();
    }

  //@isTest
  //  static void Test2(){
  //      Test.setMock(HttpCalloutMock.class, new HttpMock());

  //      List<Agency_Contact__c> lra = new List<Agency_Contact__c>();
  //      lra.add(new Agency_Contact__c(
  //          Id = 'a2R1m0000007BPD',
  //          Aws_Data_Id__c = '123456'
  //      ));
  //      Test.startTest();
  //      //system.debug(PIHelper.getPIIntegrationInfo('Agency_Contact__c').newEncryptUrl);
  //      AWSServiceTool2.EncryptPushCore(Json.serialize(lra),'Agency_Contact__c');
  //      Test.stopTest();
  //  }
    
    class HttpMock implements HttpCalloutMock{
        
        public HTTPResponse respond(HTTPRequest request) {
        // 创建一个假的回应
        System.debug('------------------------------------------------------');
        HttpResponse response = new HttpResponse();
        string body = '';
        system.debug(request.getEndpoint());
        if(request.getEndpoint().contains('token')){
            system.debug('url=token');
            response.setHeader('Content-Type', 'application/json');
      body='{ "message": "", "object": "freqfewqfewewfewfew", "status": "", "success": true, "timestamp": 0, "txId": "" }';          
        } else if(request.getEndpoint().contains('insert')){
            system.debug('url=Insert');
            response.setHeader('Content-Type', 'application/json');
      body='{ "message": "", "object": [ { "dataId": "123456", "directShippmentAddress": "", "directShippmentAddressEncrypt": "", "isDelete": 0, "phoneNumber": "", "phoneNumberEncrypt": "", "sfRecordId": "a2R1m0000007BPD" } ], "status": "", "success": true, "timestamp": 0, "txId": "" }';          
        } else if(request.getEndpoint().contains('update')){
            system.debug('url=update');
            response.setHeader('Content-Type', 'application/json');
      body='{ "message": "", "object": [ { "dataId": "123456", "directShippmentAddress": "", "directShippmentAddressEncrypt": "", "isDelete": 0, "phoneNumber": "", "phoneNumberEncrypt": "", "sfRecordId": "a2R1m0000007BPD" } ], "status": "", "success": true, "timestamp": 0, "txId": "" }';          
        } else{
          
        }
        
        response.setBody(body);
        response.setStatus('OK');
        response.setStatusCode(200);
        return response;
        // }
    }
    }
// AWSServiceTool2没上线就把这部分注释 end
    static testMethod void testMethod1() {
        // 省
        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;
// AWSServiceTool2没上线就把这部分放开 start  20220408
        //Contact contact2 = new Contact();
        //contact2.AccountId = dep.Id;
        //contact2.FirstName = '責任者';
        //contact2.LastName = 'test1经销商';
        //contact2.Employee_No_manual__c = 'om003901';
        //insert contact2;
// AWSServiceTool2没上线就把这部分放开 end
        ODS__c ods = new ODS__c();
        ods.ALIAS__C = 'om003901';
        ods.BRANCH__C = '';
        ods.CATEGORY3__C = '医疗华北东北营业统括本部';
        ods.CATEGORY4__C = '医疗华北营业本部';
        ods.CATEGORY5__C = '华北营业二部';
        ods.CATEGORY6__C = '河北GIR推广课';
        ods.EMAIL__C = 'chengchao_an@olympus.com.cn';
        ods.EMPLOYEE_NO__C = 'om003901';
        ods.FIRSTNAME__C = 'Chengchao';
        ods.HIRE_DATE__C = Date.today();
        ods.JOB_CATEGORY__C = '技术服务';
        ods.JOB_TYPE__C = '正式-本地员工';
        ods.LASTNAME__C = 'An';
        ods.MOBILEPHONE__C = '13832596948';
        ods.NAME__C = '安承超';
        ods.POST__C = '一般';
        ods.PRODUCT_SPECIALIST_INCHARGE_PRODUCT__C = '';
        ods.SALES_SPECIALITY__C = '';
        ods.UNIQUEID__C = '11181';
        ods.WORK_LOCATION__C = '石家庄';
        ods.Stay_or_not__c = '在职';
        ods.LeaveDate__c = Date.today();

        Test.startTest();
        try{
            insert ods;
            // AWSServiceTool2没上线就把这部分注释 start
            Test.setMock(HttpCalloutMock.class, new HttpMock());

            List<Agency_Contact__c> lra = new List<Agency_Contact__c>();
            lra.add(new Agency_Contact__c(
                Id = 'a2R1m0000007BPD',
                Aws_Data_Id__c = '123456'
            ));
            AWSServiceTool2.EncryptPushCore(Json.serialize(lra),'Agency_Contact__c');
            // AWSServiceTool2没上线就把这部分注释 end
            ods.LeaveDate__c = Date.today()+1;
            update ods;
        }catch(Exception e){
            system.debug('Exception from upsert file:'+e.getmessage());
        }
        Test.stopTest();
    }
}