@isTest
public with sharing class ReAndQISNotePDFControllerTest {
    // AWSServiceTool2没上线就把这部分注释 start 20220408

    Static String repId;
    @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


  static void setupTestData() {
      String rectHp = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('HP').getRecordTypeId();
      String rectSct = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('Department_Class_GI').getRecordTypeId();
      String rectDpt = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('Department_GI').getRecordTypeId();

      Profile p = [select Id from Profile where id =:System.Label.ProfileId_SystemAdmin];

      User hpOwner = new User(Test_staff__c = true, LastName = 'hp', FirstName = 'owner', Alias = 'hp', Work_Location__c = '北京', 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 = p.id);
      insert hpOwner;
      User hpOwner2 = new User(Test_staff__c = true, LastName = 'hp2', FirstName = 'owner', Alias = 'hp2', Work_Location__c = '重庆', CommunityNickname = 'hpOwner2', Email = 'olympus_hpowner@sunbridge.com', Username = 'olympus_hpowner2@sunbridge.com', IsActive = true, EmailEncodingKey = 'ISO-2022-JP', TimeZoneSidKey = 'Asia/Tokyo', LocaleSidKey = 'ja_JP', LanguageLocaleKey = 'ja', ProfileId = p.id);
      insert hpOwner2;
      StaticParameter.MaintenanceContractHpDeptUpdTrigger = true;
      FixtureUtil.SkipTrigger = true;
      // 病院作成
      Account hp = new Account(RecordTypeId = rectHp, Name = 'hp', OwnerId = hpOwner.Id);
      hp.FSE_GI_Main_Leader__c = hpOwner.Id;
      hp.FSE_SP_Main_Leader__c = hpOwner2.Id;
      insert hp;

      Account dc = [select Id, Name, RecordType_DeveloperName__c, Account2__c from Account where ParentId = :hp.Id and RecordType_DeveloperName__c = 'Department_Class_GI'];
      
      // 診療科を作る
      Account dpt = new Account(RecordTypeId = rectDpt);
      dpt.Name         = '*';
      dpt.Department_Name__c  = 'TestDepart';
      dpt.ParentId            = dc.Id;
      dpt.Department_Class__c = dc.Id;
      dpt.Hospital__c         = hp.Id;
      insert dpt;
      // 納入機器を作成する
      Asset asset = new Asset();
      asset.Name = 'asset1';
      asset.AccountId = dpt.Id;
      asset.Department_Class__c = dc.Id;
      asset.Hospital__c = hp.Id;
      asset.SerialNumber = '7450035';
      // asset.ProductCode = 'N1063441';
      asset.Product_Serial_No__c = 'N1063441:7450035';
      insert asset;

      Repair__c repair = new Repair__c();
      repair.Account__c = dpt.Id;
      repair.Department_Class__c = dc.Id;
      repair.Hospital__c = hp.Id;
      repair.Delivered_Product__c = asset.Id;
      repair.SERVICE_CONTRACT_JUDEGE_DAY__C = Date.today().addDays(0);  // 维修合同判断日がサービス契約の中間辺りの日付
      repair.FSE_Work_Location__c = '上海';
      repair.Repair_Returned_To_HP_Date__c = Date.today();
      insert repair;
      repId = repair.Id;
      
  }

  static testMethod void tesMethod1(){
        // List<Consum_Apply__c> apply = [SELECT Id FROM Consum_Apply__c  LIMIT 1];
        // ConsumApplyEquipmentSetDefaultController.defaultSelect(apply[0].Id);

       
        // repController.ReAndQISNotePDFController();
        setupTestData();

        Repair__c repair = [SELECT id from Repair__c where id =:repId];


        List<ContentVersion> versionList = new List<ContentVersion>();

        ContentVersion version = new ContentVersion();
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        version.VersionData = bodyBlob1;
        version.PathOnClient = 'test';
        version.ContentLocation = 's';
        versionList.add(version);
        insert versionList;

        List<Id> idList = new List<Id>();
        for (ContentVersion newVersion : versionList) {
            idList.add(newVersion.Id);
        }
        versionList = [select ContentDocumentId,Title from ContentVersion where Id in: idList];

        List<ContentDocumentLink> docList = new List<ContentDocumentLink>();
        ContentDocumentLink cDocLink = new ContentDocumentLink();
        cDocLink.ContentDocumentId = versionList[0].ContentDocumentId;         
        cDocLink.LinkedEntityId = repair.id;    
        cDocLink.ShareType = 'V';                                   
        cDocLink.Visibility = 'AllUsers';
        docList.add(cDocLink);
		insert docList;

        List<String> idList1 = new List<Id>();
        for (ContentDocumentLink cdoc : docList) {
            idList1.add(cdoc.Id);
        }

        // ReAndQISNotePDFController reAndQis = new ReAndQISNotePDFController();

        ReAndQISNotePDFController.generateAttachment(idList1);
        
        ContentVersion versioninfo = new ContentVersion();
        versioninfo.VersionData = bodyBlob1;
        versioninfo.PathOnClient = 'test';
        versioninfo.ContentLocation = 's';
        // Versioninfo.TextPreview = 'test';
        insert versioninfo;

        ReAndQISNotePDFController.objId = repair.Id;
        ReAndQISNotePDFController.Versioninfo = versioninfo;
        
    }
}