@isTest
public with sharing class UpdateAssetImageRestTest {
    /**
    *@description 造数据，一个清单，二个一览，每个一览下7条明细
    */
    Static String repId;
    Static String assId;

      // 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


    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;
        assId = asset.Id;

        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 testDoPost1(){
        setupTestData();
        RestRequest req = new RestRequest(); 
        RestResponse res = new RestResponse();

        req.requestURI = '/services/apexrest/v1/cans/';

        req.httpMethod = 'POST';
        RestContext.request = req;
        RestContext.response = res;

        String linkdId = System.Label.AssetImageFolder_new;
        String imageAsset =String.valueOf(EncodingUtil.base64Encode(Blob.valueof('TestA'))) ;
        String imageSerial = String.valueOf(EncodingUtil.base64Encode(Blob.valueof('TestB')));
        Asset asset = [SELECT Id,Product_Serial_No__c from Asset WHERE Id =:assId];
        Repair__c rep = [SELECT Id FROM Repair__c WHERE id =: repId];
        String repairDate = String.valueOf(Date.today().format());
        String remarkText = 'text';
        Test.startTest();
        ContentVersion versionA = new ContentVersion();
        versionA.VersionData = EncodingUtil.base64Decode(imageAsset);
        versionA.Title = asset.Product_Serial_No__c + '_Asset';
        versionA.PathOnClient = asset.Product_Serial_No__c + '_Asset'+'.jpg';
        insert versionA;
        versionA = [SELECT Id,VersionData,Title,ContentDocumentId From ContentVersion WHERE Id =: versionA.Id];
        ContentDocumentLink link = new ContentDocumentLink();
        link.ContentDocumentId = versionA.ContentDocumentId;
        link.LinkedEntityId = linkdId;
        link.ShareType = 'I';
        link.Visibility = 'AllUsers';
        StaticParameter.ContentDocumentLink = false;
        StaticParameter.ContentDocumentTrigger = false;
        insert link;


        ContentVersion versionS = new ContentVersion();
        versionS.VersionData = EncodingUtil.base64Decode(imageSerial);
        versionS.Title = asset.Product_Serial_No__c + '_Serial';
        versionS.PathOnClient = asset.Product_Serial_No__c + '_Serial'+'.jpg';
        insert versionS;

        versionS = [SELECT Id,VersionData,Title,ContentDocumentId From ContentVersion WHERE Id =: versionS.Id];
        ContentDocumentLink linkS = new ContentDocumentLink();
        linkS.ContentDocumentId = versionS.ContentDocumentId;
        linkS.LinkedEntityId = linkdId;
        linkS.ShareType = 'I';
        linkS.Visibility = 'AllUsers';
        StaticParameter.ContentDocumentLink = false;
        StaticParameter.ContentDocumentTrigger = false;
        insert linkS;
        
        // UpdateAssetImageRest.doPost(imageAsset, imageSerial,asset.Product_Serial_No__c,null,null,remarkText);
        UpdateAssetImageRest.doPost(imageAsset, imageSerial ,asset.Product_Serial_No__c ,rep.id ,repairDate ,remarkText);
        Test.stopTest();
    }

    static testMethod void testDoPost2(){
        setupTestData();
        RestRequest req = new RestRequest(); 
        RestResponse res = new RestResponse();

        req.requestURI = '/services/apexrest/v1/cans/';

        req.httpMethod = 'POST';
        RestContext.request = req;
        RestContext.response = res;

        String imageAsset ='' ;
        String imageSerial = '';
        Asset asset = [SELECT Id,Product_Serial_No__c from Asset WHERE Id =:assId];
        Repair__c rep = [SELECT Id FROM Repair__c WHERE id =: repId];
        String repairDate = String.valueOf(Date.today());
        String remarkText = 'text';
        String id = System.Label.ProductImageFolder_New;
        Test.startTest();

        UpdateAssetImageRest.doPost('', '',asset.Product_Serial_No__c,asset.id,repairDate,remarkText);

        UpdateAssetImageRest.doPost('', '',asset.Product_Serial_No__c,rep.id,repairDate,remarkText);

        repairDate = String.valueOf(Date.today().format());
        UpdateAssetImageRest.doPost('', '',asset.Product_Serial_No__c+'1',rep.id,repairDate,remarkText);


        Test.stopTest();
    }

    

    // static testMethod void testDoPost1_1(){
    //     setupTestData();
    //     RestRequest req = new RestRequest(); 
    //     RestResponse res = new RestResponse();

    //     req.requestURI = '/services/apexrest/v1/cans/';

    //     req.httpMethod = 'POST';
    //     RestContext.request = req;
    //     RestContext.response = res;

    //     String imageAsset =String.valueOf(EncodingUtil.base64Encode(Blob.valueof('TestA'))) ;
    //     String imageSerial = String.valueOf(EncodingUtil.base64Encode(Blob.valueof('TestB')));
    //     Asset asset = [SELECT Id,Product_Serial_No__c from Asset WHERE Id =:assId];
    //     Repair__c rep = [SELECT Id FROM Repair__c WHERE id =: repId];
    //     String repairDate = String.valueOf(Date.today().format());
    //     String remarkText = 'text';
    //     Test.startTest();

    //     ContentVersion version = new ContentVersion();
    //     version.VersionData =EncodingUtil.base64Decode('test3');
    //     version.Title = asset.Product_Serial_No__c+ '_Asset';
    //     version.PathOnClient = asset.Product_Serial_No__c+ '_Asset'+'.jpg';
    //     insert version;

        
    //     // UpdateAssetImageRest.doPost(imageAsset, imageSerial,asset.Product_Serial_No__c,null,null,remarkText);
    //     UpdateAssetImageRest.doPost(imageAsset, imageSerial ,asset.Product_Serial_No__c ,rep.id ,repairDate ,remarkText);
    //     Test.stopTest();
    // }

    // static testMethod void testDoPost1_2(){
    //     setupTestData();
    //     RestRequest req = new RestRequest(); 
    //     RestResponse res = new RestResponse();

    //     req.requestURI = '/services/apexrest/v1/cans/';

    //     req.httpMethod = 'POST';
    //     RestContext.request = req;
    //     RestContext.response = res;

    //     String imageAsset =String.valueOf(EncodingUtil.base64Encode(Blob.valueof('TestA'))) ;
    //     String imageSerial = String.valueOf(EncodingUtil.base64Encode(Blob.valueof('TestB')));
    //     Asset asset = [SELECT Id,Product_Serial_No__c from Asset WHERE Id =:assId];
    //     Repair__c rep = [SELECT Id FROM Repair__c WHERE id =: repId];
    //     String repairDate = String.valueOf(Date.today().format());
    //     String remarkText = 'text';
    //     Test.startTest();
        
    //     // UpdateAssetImageRest.doPost(imageAsset, imageSerial,asset.Product_Serial_No__c,null,null,remarkText);
    //     UpdateAssetImageRest.doPost('', imageSerial ,asset.Product_Serial_No__c ,asset.id ,repairDate ,remarkText);
    //     Test.stopTest();
    // }

    // static testMethod void testDoPost1_3(){
    //     setupTestData();
    //     RestRequest req = new RestRequest(); 
    //     RestResponse res = new RestResponse();

    //     req.requestURI = '/services/apexrest/v1/cans/';

    //     req.httpMethod = 'POST';
    //     RestContext.request = req;
    //     RestContext.response = res;

    //     String imageAsset =String.valueOf(EncodingUtil.base64Encode(Blob.valueof('TestA'))) ;
    //     String imageSerial = String.valueOf(EncodingUtil.base64Encode(Blob.valueof('TestB')));
    //     Asset asset = [SELECT Id,Product_Serial_No__c from Asset WHERE Id =:assId];
    //     Repair__c rep = [SELECT Id FROM Repair__c WHERE id =: repId];
    //     String repairDate = String.valueOf(Date.today().format());
    //     String remarkText = 'text';
    //     Test.startTest();


    //     ContentVersion version1 = new ContentVersion();
    //     version1.VersionData =EncodingUtil.base64Decode('test3');
    //     version1.Title = asset.Product_Serial_No__c + '_Serial';
    //     version1.PathOnClient = asset.Product_Serial_No__c+ '_Serial'+'.jpg';
    //     insert version1;
        
    //     // UpdateAssetImageRest.doPost(imageAsset, imageSerial,asset.Product_Serial_No__c,null,null,remarkText);
    //     UpdateAssetImageRest.doPost('', imageSerial ,asset.Product_Serial_No__c ,rep.id ,repairDate ,remarkText);
    //     Test.stopTest();
    // }


    // static testMethod void testDoPost2(){
    //     setupTestData();
    //     RestRequest req = new RestRequest(); 
    //     RestResponse res = new RestResponse();

    //     req.requestURI = '/services/apexrest/v1/cans/';

    //     req.httpMethod = 'POST';
    //     RestContext.request = req;
    //     RestContext.response = res;

    //     String imageAsset ='' ;
    //     String imageSerial = String.valueOf(EncodingUtil.base64Encode(Blob.valueof('TestB')));
    //     Asset asset = [SELECT Id,Product_Serial_No__c from Asset WHERE Id =:assId];
    //     Repair__c rep = [SELECT Id FROM Repair__c WHERE id =: repId];
    //     String repairDate = String.valueOf(Date.today().format());
    //     String remarkText = 'text';
    //     String id = System.Label.ProductImageFolder_New;
    //     Test.startTest();


        
    //     // UpdateAssetImageRest.doPost(imageAsset, imageSerial,asset.Product_Serial_No__c,null,null,remarkText);
    //     UpdateAssetImageRest.doPost('', '',asset.Product_Serial_No__c,rep.id,repairDate,remarkText);
    //     Test.stopTest();
    // }

    // static testMethod void testDoPost2_2(){
    //     setupTestData();
    //     RestRequest req = new RestRequest(); 
    //     RestResponse res = new RestResponse();

    //     req.requestURI = '/services/apexrest/v1/cans/';

    //     req.httpMethod = 'POST';
    //     RestContext.request = req;
    //     RestContext.response = res;

    //     String imageAsset ='' ;
    //     String imageSerial = String.valueOf(EncodingUtil.base64Encode(Blob.valueof('TestB')));
    //     Asset asset = [SELECT Id,Product_Serial_No__c from Asset WHERE Id =:assId];
    //     Repair__c rep = [SELECT Id FROM Repair__c WHERE id =: repId];
    //     String repairDate = String.valueOf(Date.today());
    //     String remarkText = 'text';
    //     String id = System.Label.ProductImageFolder_New;
    //     Test.startTest();


        
    //     // UpdateAssetImageRest.doPost(imageAsset, imageSerial,asset.Product_Serial_No__c,null,null,remarkText);
    //     UpdateAssetImageRest.doPost('', '',asset.Product_Serial_No__c,rep.id,repairDate,remarkText);
    //     Test.stopTest();
    // }

    // static testMethod void testDoPost3(){
    //     setupTestData();
    //     RestRequest req = new RestRequest(); 
    //     RestResponse res = new RestResponse();

    //     req.requestURI = '/services/apexrest/v1/cans/';

    //     req.httpMethod = 'POST';
    //     RestContext.request = req;
    //     RestContext.response = res;

    //     String imageAsset ='' ;
    //     String imageSerial = String.valueOf(EncodingUtil.base64Encode(Blob.valueof('TestB')));
    //     Asset asset = [SELECT Id,Product_Serial_No__c from Asset WHERE Id =:assId];
    //     String remarkText = 'text';
    //     Test.startTest();


        
    //     // UpdateAssetImageRest.doPost(imageAsset, imageSerial,asset.Product_Serial_No__c,null,null,remarkText);
    //     UpdateAssetImageRest.doPost('', imageSerial,asset.Product_Serial_No__c,'','',remarkText);
    //     Test.stopTest();
    // }

    

}