@isTest
private class OPDPlanCancelPostponePlanLogicBatchTest {
        // 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
    // 202220531 ljh end
        private static void  initHpData() {
            String timenow = Datetime.now().format('yyyyMMddHHmmss');
            // User hpOwner = new User(Test_staff__c = true, LastName = 'TestMao', FirstName = 'TestMaoF',
            //                         Alias = 'hp', CommunityNickname = 'TestMao', Email = 'Test@sunbridge.com',
            //                         Username = 'Test' + timenow + '@sunbridge.com', IsActive = true, EmailEncodingKey = 'ISO-2022-JP', 
            //                         TimeZoneSidKey = 'Asia/Tokyo', LocaleSidKey = 'ja_JP', LanguageLocaleKey = 'ja', ProfileId = System.Label.ProfileId_SystemAdmin
            //                         ,Stay_or_not__c = '已离职');
            // Insert hpOwner;
            User hpOwner = [select Id from user where ProfileId = :System.Label.ProfileId_SystemAdmin and Stay_or_not__c = '已离职' limit 1];
            // User hpOwner2 = new User(Test_staff__c = true, 
            //                         LastName = 'TestMao2', 
            //                         FirstName = 'TestMaoF2',
            //                         Alias = 'hp', 
            //                         CommunityNickname = 'TestMao2', 
            //                         Email = 'Test2@sunbridge.com',
            //                         Username = 'Test2' + timenow + '@sunbridge.com', 
            //                         IsActive = true, 
            //                         EmailEncodingKey = 'ISO-2022-JP', 
            //                         TimeZoneSidKey = 'Asia/Tokyo', 
            //                         LocaleSidKey = 'ja_JP', 
            //                         LanguageLocaleKey = 'ja', 
            //                         ProfileId = System.Label.ProfileId_SystemAdmin
            //                         ,Stay_or_not__c = '在职');
            // 
            // Insert hpOwner2;
            User hpOwner2 = [select Id from user where ProfileId = :System.Label.ProfileId_SystemAdmin and Stay_or_not__c = '在职' limit 1];
            Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET)'];//20200916 ljh update
        
            // 省
            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;
            
            //目标客户
            Account_Number_of_target__c anto1 = new Account_Number_of_target__c();
            //战略科室名
            anto1.Account__c = strategicDep[0].Id;
            anto1.OCM_Period__c = '153P';
            anto1.OPD_PlanMonth_190Main__c = '11月';
            anto1.OPD_PlanMonth_290Miro__c = '6月';
            anto1.OPD_PlanMonth_CV170__c = '1月';
            anto1.OPD_amount_CV190__c = 0;
            anto1.OPD_amount_290MiroGI__c = 0;
            anto1.OPD_amount_CV170__c = 0;
            insert anto1;
            Account_Number_of_target__c[] an = [select id, name , Account__c , Account__r.name, Account__r.ownerid,OCM_Period__c from Account_Number_of_target__c where OCM_Period__c = '153P'];
            
            OPDPlan__c opdp1 = new OPDPlan__c();
            //计划实施日不能早于今天 update by rentx 2021-01-04 SWAG-BWSBW3 start
            // opdp1.OPDPlan_ImplementDate__c = Date.today()-1;
            opdp1.OPDPlan_ImplementDate__c = Date.today()+1;
            //计划实施日不能早于今天 update by rentx 2021-01-04 SWAG-BWSBW3 end 

            opdp1.Status__c = '计划中';
            opdp1.if_HaveOpportunity__c = 1;
            opdp1.NoOpp_Reason__c = 'HCP对应';
            opdp1.Account_Laboratory__c = dep.Id;
            opdp1.OPD_Customers_Target__c = an[0].Id;
            opdp1.OwnerId = hpOwner.id;
            insert opdp1;

            OPDPlan__c opdp2 = new OPDPlan__c();
            opdp2.Account_Laboratory__c = dep.Id;

            //计划实施日不能早于今天 update by rentx 2021-01-04 SWAG-BWSBW3 start
            // opdp2.OPDPlan_ImplementDate__c = Date.today()-1;
            opdp2.OPDPlan_ImplementDate__c = Date.today()+1;
            //计划实施日不能早于今天 update by rentx 2021-01-04 SWAG-BWSBW3 end 
            opdp2.Status__c = '计划中';
            //opdp2.Rental_Apply2__c = raObj.id;
            opdp2.if_HaveOpportunity__c = 1;
            opdp2.NoOpp_Reason__c = 'HCP对应';
            opdp2.OPD_Customers_Target__c = an[0].Id;
            opdp2.OwnerId = hpOwner.id;
            insert opdp2;
            
            OPDPlan__c opdp3 = new OPDPlan__c();
            opdp3.Account_Laboratory__c = dep.Id;
            //计划实施日不能早于今天 update by rentx 2021-01-04 SWAG-BWSBW3 start
            // opdp3.OPDPlan_ImplementDate__c = Date.today()-1;
            opdp3.OPDPlan_ImplementDate__c = Date.today()+1;
            //计划实施日不能早于今天 update by rentx 2021-01-04 SWAG-BWSBW3 end 
            opdp3.Status__c = '计划中';
            //opdp2.Rental_Apply2__c = raObj.id;
            opdp3.if_HaveOpportunity__c = 1;
            opdp3.NoOpp_Reason__c = 'HCP对应';
            opdp3.OPD_Customers_Target__c = an[0].Id;
            opdp3.OwnerId = hpOwner2.id;
            insert opdp3;
            
            Contact contact2 = new Contact();
            contact2.AccountId = dep.Id;
            contact2.FirstName = '責任者';
            contact2.LastName = 'test1经销商';
            insert contact2;
            // 产品
            Product2 pro5 = new Product2(Name='name05',IsActive=true,Family='SP',
                    Fixture_Model_No__c='n05',Serial_Lot_No__c='S/N tracing',
                    Fixture_Model_No_T__c = 'n05',
                    ProductCode_Ext__c='pc05',Manual_Entry__c=false);
            insert pro5;
            // 备品配套(只有附属品)
            Fixture_Set__c fsObjC1 = new Fixture_Set__c();
            fsObjC1.Name = 'setC1';
            fsObjC1.Fixture_Set_Body_Model_No__c = 'modelNoC1';
            fsObjC1.Loaner_name__c = 'nameC1';
            insert fsObjC1;
    
            // 备品配套明细(只有附属品)
            Fixture_Set_Detail__c fsdObjC1 = new Fixture_Set_Detail__c();
            fsdObjC1.Name = 'detailAccessory';
            fsdObjC1.Name_CHN_Created__c = 'detailAccessoryName';
            fsdObjC1.Product2__c = pro5.Id;
            fsdObjC1.Fixture_Set__c = fsObjC1.Id;
            fsdObjC1.Is_Body__c = false;
            fsdObjC1.Is_Optional__c = true;
            fsdObjC1.UniqueKey__c = fsObjC1.Id + ':' + pro5.Id;
            fsdObjC1.SortInt__c = 1;
            insert fsdObjC1;
    
    
            //备品借出申请
            Rental_Apply__c raObj = new Rental_Apply__c();
            raObj.Name = 'testra';
            raObj.Product_category__c = 'GI';
            raObj.Demo_purpose1__c = '产品试用';
            raObj.demo_purpose2__c = FixtureUtil.raDemo_purpose2MAP.get('shiyongwuxunjia');
            raObj.direct_send__c = '医疗机构';
            raObj.Loaner_received_staff__c = '王五';
            raObj.Loaner_received_staff_phone__c = '110';
            raObj.direct_shippment_address__c = '北京市';
            raObj.Hospital__c = hospital.Id;
            raObj.Strategic_dept__c = strategicDep[0].Id;
            raObj.Account__c = dep.Id;
            raObj.Request_shipping_day__c = Date.toDay();  // 希望到货日
            raObj.Hope_Lonaer_date_Num__c = 1;  // 希望借用天数
            // 预定归还日自动生成 预定归还日=（希望到货日+希望借用天数）-1
            // raObj.Request_return_day__c = Date.toDay();  // 预定归还日
            // B.OLY_OCM-669 入力规则: 希望借用天数不能为空
            raObj.Phone_number__c = '1234567890';
            raObj.Loaner_medical_Staff__c = contact2.Id;
            raObj.OPDPlan__c = opdp2.id;
            insert raObj;
    
            // 借出备品配套一览
            Rental_Apply_Equipment_Set__c raesObjC1 = new Rental_Apply_Equipment_Set__c();
            raesObjC1.Rental_Apply__c = raObj.Id;
            raesObjC1.Fixture_Set__c = fsObjC1.Id;
            raesObjC1.Cancel_Select__c = false;
            raesObjC1.Shipment_request_time__c = Date.toDay();
            raesObjC1.Rental_Start_Date__c = Date.toDay();
            raesObjC1.Rental_End_Date__c = Date.toDay();
            raesObjC1.IndexFromUniqueKey__c = 1;
            raesObjC1.UniqueKey__c = '1:'+ fsObjC1.Id + ':1';
            insert raesObjC1;
            

        }


        //正常执行
        @isTest 
        public static void test_method_one() {
        initHpData();
        
        System.Test.StartTest();
        
        Database.executeBatch(new OPDPlanCancelPostponePlanLogicBatch());
        
        System.Test.StopTest();

    }
      @isTest 
        public static void test_method_one1() {
            System.Test.StartTest();
            OPDPlan__c opdp1 = new OPDPlan__c();
            //计划实施日不能早于今天 update by rentx 2021-01-04 SWAG-BWSBW3 start
            // opdp1.OPDPlan_ImplementDate__c = Date.today()-1;
            opdp1.OPDPlan_ImplementDate__c = Date.today()+1;
            //计划实施日不能早于今天 update by rentx 2021-01-04 SWAG-BWSBW3 end 
            opdp1.Status__c = '计划中';
            opdp1.if_HaveOpportunity__c = 1;
            opdp1.NoOpp_Reason__c = 'HCP对应';
            insert opdp1;
            Database.executeBatch(new OPDPlanCancelPostponePlanLogicBatch(opdp1.id));
            System.Test.StopTest();

    }
}