/**
 * This class contains unit tests for validating the behavior of Apex classes
 * and triggers.
 *
 * Unit tests are class methods that verify whether a particular piece
 * of code is working properly. Unit test methods take no arguments,
 * commit no data to the database, and are flagged with the testMethod
 * keyword in the method definition.
 *
 * All test methods in an organization are executed whenever Apex code is deployed
 * to a production organization to confirm correctness, ensure code
 * coverage, and prevent regressions. All Apex classes are
 * required to have at least 75% code coverage in order to be deployed
 * to a production organization. In addition, all triggers must have some code coverage.
 *
 * The @isTest class annotation indicates this class only contains test
 * methods. Classes defined with the @isTest annotation do not count against
 * the organization size limit for all Apex scripts.
 *
 * See the Apex Language Reference for more information about Testing and Code Coverage.
 */
@isTest
private class UpdateAssetToCurrentMCBatchTest {

  public static Account company ;
  public final Integer N_ASSET = 10; //納入機器数
  public final Integer N_CONTRACT = 5; //契約数

  static Asset createAsset() {

    ID rectCoid =
      Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('HP').getRecordTypeId();
    ID rectSctid =
      Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('Department_Class_GI').getRecordTypeId();


    ID rectDptid =
      Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('Department_GI').getRecordTypeId();


    // テストデータ
    company = new Account();
    company.RecordTypeId = rectCoId;
    company.Name         = 'HistoryTestCompany';
    upsert company;
    Account section =
      [select id from account
       where ParentId = : company.id
                        and RecordTypeId = : rectSctid];
    Account depart = new Account();
    depart.RecordTypeId = rectDptId;
    depart.Name         = '*';
    depart.Department_Name__c  = 'HistoryTestDepart';
    depart.ParentId            = section.Id;
    depart.Department_Class__c = section.Id;
    depart.Hospital__c         = company.Id;
    upsert depart;
    // 再取得
    List<Id> accountIds = new Id[] {company.Id, section.Id, depart.Id};
    // List<Account> accList = [select Management_Code__c, Management_Code_Auto__c, Name, Id from Account where Id In :accountIds order by Management_Code_Auto__c];
    List<Account> accList = [select Management_Code__c, Name, Id from Account where Id In :accountIds];

    List<Product2> prdList = new List<Product2>();
    Product2 prd1 = new Product2();
    prd1.ProductCode_Ext__c     = 'HistoryPrd1';
    prd1.ProductCode            = 'HistoryPrd1';
    prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
    prd1.Name                   = 'HistoryPrd1';
    prd1.Manual_Entry__c        = false;
    prdList.add(prd1);
    Product2 prd2 = new Product2();
    prd2.ProductCode_Ext__c     = 'HistoryPrd2';
    prd2.ProductCode            = 'HistoryPrd2';
    prd2.Repair_Product_Code__c = 'HistoryPrd2_RP';
    prd2.Name                   = 'HistoryPrd2';
    prd2.Manual_Entry__c        = false;
    prdList.add(prd2);
    insert prdList;

    Asset ast = new Asset();
    ast.Name                   = 'HistoryAst1';
    ast.AccountId              = depart.Id;
    ast.Department_Class__c    = section.Id;
    ast.Hospital__c            = company.Id;
    ast.Product2Id             = prd1.Id;
    ast.SerialNumber           = 'HistorySerialNumber';
    ast.Guarantee_period_for_products__c = Date.today();
    ast.InstallDate                      = Date.today();
    insert ast;
    // ast = [select Id, CurrencyIsoCode, Name, Product_Serial_No__c, AccountId, Department_Class__c, Department_Class__r.Management_Code_Auto__c, Hospital__c, Product2Id, Product2.ProductCode, Product2.Repair_Product_Code__c, SerialNumber
    //        from Asset
    //        where Id = :ast.Id];
    ast = [select Id, CurrencyIsoCode, Name, Product_Serial_No__c, AccountId, Department_Class__c,  Hospital__c, Product2Id, Product2.ProductCode, Product2.Repair_Product_Code__c, SerialNumber
           from Asset
           where Id = :ast.Id];

    return ast;
  }


  static Maintenance_Contract__c creatContract(Asset a, Date endDate, Date startDate, String mcNo ) {
    Maintenance_Contract__c crt = new Maintenance_Contract__c();
    crt.Past_update_contract__c = true;
    crt.Name = startDate.format() + endDate.format();
    crt.Department__c = a.AccountId;
    crt.Department_Class__c = a.Department_Class__c;
    crt.Hospital__c = a.Hospital__c;
    crt.Sales_Estimate_Money__c = 3000;
    crt.Closing_Prediction_Day__c = Date.today();
    crt.CurrencyIsoCode = a.CurrencyIsoCode;
    crt.Status__c = '契約';
    crt.Maintenance_Contract_No__c = mcNo;
    crt.Contract_Conclusion_Date__c = Date.today();
    crt.Contract_End_Date__c = endDate;
    crt.Contract_Start_Date__c = startDate;
    crt.SalesOfficeCode_selection__c = '北京RC';
    crt.RecordTypeId = 
              Schema.SObjectType.Maintenance_Contract__c.getRecordTypeInfosByDeveloperName().get('VM_Contract').getRecordTypeId();
    insert crt;
    crt = [select Id, Contract_End_Date__c
           from Maintenance_Contract__c
           where Id = :crt.Id];
    return crt;

  }

  static Maintenance_Contract_Asset__c creatMca(Asset a, Maintenance_Contract__c crt) {
    Maintenance_Contract_Asset__c newMca = new Maintenance_Contract_Asset__c();

    newMca.Asset__c = a.Id;
    newMca.Maintenance_Contract__c = crt.Id;
    insert newMca;
    newMca = [select Id, Asset__c, Maintenance_Contract__c
              from Maintenance_Contract_Asset__c
              where Id = : newMca.Id];
    return newMca;
  }

  //将Asset的当前维修合同更新为指定合同
  static void updAsset(Asset a, Maintenance_Contract__c crt) {
    a.CurrentContract__c = crt.Id;
    a.Service_Agreement__c = '有';
    a.CurrentContract_End_Date__c = crt.Contract_End_Date__c;
    update a;
  }

  //结束日期为昨天的合同相应修改测试
  static testMethod void endDateTest() {

    Asset testAst = createAsset();
    Date TDay = Date.today();
    Date YesDay = Date.today().addDays(-1);
    Maintenance_Contract__c testCrt = creatContract(testAst, YesDay, TDay.addDays(-20), 'crt');
    updAsset(testAst, testCrt);
    creatMca(testAst, testCrt);
    List<Maintenance_Contract_Asset__c> mcaList = [select id, Asset__c, Maintenance_Contract__c, Maintenance_Contract__r.Contract_End_Date__c,
                                        Maintenance_Contract__r.Contract_Start_Date__c,
                                        Asset__r.Service_Agreement__c, Asset__r.CurrentContract__c,
                                        Asset__r.CurrentContract_End_Date__c
                                        from Maintenance_Contract_Asset__c
                                        where Maintenance_Contract__r.Contract_End_Date__c = : YesDay
                                            or Maintenance_Contract__r.Contract_Start_Date__c = : TDay];

    //system.assertEquals(1, mcaList.size());
    //system.assertEquals('有', mcaList[0].Asset__r.Service_Agreement__c);
    //system.assertEquals(testCrt.Id, mcaList[0].Asset__r.CurrentContract__c);
    System.runAs(new User(Id = Userinfo.getUserId())) {
      system.Test.StartTest();
      StaticParameter.EventOpportunityPileUpExeFlg = true;
      // EventC⇒Event処理後、逆更新をスルー用
      StaticParameter.NotUpdEventCFlg = true;
      // 積み上げ処理後、トリガをスルー用
      StaticParameter.EscapeNFM001Trigger = true;
      StaticParameter.EscapeNFM001AgencyContractTrigger = true;
      StaticParameter.EscapeNFM001AgencyContractTrigger2 = true;
      StaticParameter.EscapeNFM007Trigger = true;
      StaticParameter.EscapeOpportunityBefUpdTrigger = true;
      StaticParameter.EscapeOpportunityHpDeptUpdTrigger = true;
      StaticParameter.EscapeSyncOpportunityTrigger = true;
      StaticParameter.EscapeMaintenanceContractAfterUpdateTrigger = true;
      StaticParameter.EscapeSyncProduct2Trigger = true;
      // trueのとき、リードのトリガーをスルーする
      StaticParameter.EscapeLeadTrigger = true;
      StaticParameter.EscapeAccountTrigger = true;

      StaticParameter.EscapeConsumableOrderDetail2Trigger = true;

      StaticParameter.EscapeNFM010UpsertStatuAchievementsTrigger = true;
      // 直销耗材不直销 ConsumableAssetHander
      StaticParameter.ConsumableAssetHanderTrigger = true;

      // 跳过不涉及备品借出的逻辑
      StaticParameter.rentalApplyIsRunning = true;

      // accountdailyUpdate 跳过 更新询价
      StaticParameter.EscapeOpportunityownerUpdate  = true;
      UpdateAssetToCurrentMCBatch batchTest = new UpdateAssetToCurrentMCBatch();
      Database.executeBatch(batchTest);
      System.Test.StopTest();
    }
    //batchTest.execute( null, mcaList);
    mcaList = [select id, Asset__c, Maintenance_Contract__c, Maintenance_Contract__r.Contract_End_Date__c,
               Maintenance_Contract__r.Contract_Start_Date__c,
               Asset__r.Service_Agreement__c, Asset__r.CurrentContract__c,
               Asset__r.CurrentContract_End_Date__c
               from Maintenance_Contract_Asset__c
               where Maintenance_Contract__r.Contract_End_Date__c = : YesDay
                   or Maintenance_Contract__r.Contract_Start_Date__c = : TDay];
    //system.assertEquals(1, mcaList.size());
    //system.assertEquals('無', mcaList[0].Asset__r.Service_Agreement__c);
    //system.assertEquals(testCrt.Id , mcaList[0].Asset__r.CurrentContract__c);

  }

  //开始日期为今天的合同修改
  static testMethod void startDateTest() {
    // TO DO: implement unit test

    Asset testAst = createAsset();
    Date TDay = Date.today();
    Date YesDay = Date.today().addDays(-1);
    Maintenance_Contract__c testCrt = creatContract(testAst, TDay.addDays(30), TDay, 'crt');
    creatMca(testAst, testCrt);
    List<Maintenance_Contract_Asset__c> mcaList = [select id, Asset__c, Maintenance_Contract__c, Maintenance_Contract__r.Contract_End_Date__c,
                                        Maintenance_Contract__r.Contract_Start_Date__c,
                                        Asset__r.Service_Agreement__c, Asset__r.CurrentContract__c,
                                        Asset__r.CurrentContract_End_Date__c
                                        from Maintenance_Contract_Asset__c
                                        where Maintenance_Contract__r.Contract_End_Date__c = : YesDay
                                            or Maintenance_Contract__r.Contract_Start_Date__c = : TDay];
    //system.assertEquals(1, mcaList.size());
    //system.assertEquals('無', mcaList[0].Asset__r.Service_Agreement__c);
    //system.assertEquals(null, mcaList[0].Asset__r.CurrentContract__c);
    System.runAs(new User(Id = Userinfo.getUserId())) {

      system.Test.StartTest();
      StaticParameter.EventOpportunityPileUpExeFlg = true;
      // EventC⇒Event処理後、逆更新をスルー用
      StaticParameter.NotUpdEventCFlg = true;
      // 積み上げ処理後、トリガをスルー用
      StaticParameter.EscapeNFM001Trigger = true;
      StaticParameter.EscapeNFM001AgencyContractTrigger = true;
      StaticParameter.EscapeNFM001AgencyContractTrigger2 = true;
      StaticParameter.EscapeNFM007Trigger = true;
      StaticParameter.EscapeOpportunityBefUpdTrigger = true;
      StaticParameter.EscapeOpportunityHpDeptUpdTrigger = true;
      StaticParameter.EscapeSyncOpportunityTrigger = true;
      StaticParameter.EscapeMaintenanceContractAfterUpdateTrigger = true;
      StaticParameter.EscapeSyncProduct2Trigger = true;
      // trueのとき、リードのトリガーをスルーする
      StaticParameter.EscapeLeadTrigger = true;
      StaticParameter.EscapeAccountTrigger = true;

      StaticParameter.EscapeConsumableOrderDetail2Trigger = true;

      StaticParameter.EscapeNFM010UpsertStatuAchievementsTrigger = true;
      // 直销耗材不直销 ConsumableAssetHander
      StaticParameter.ConsumableAssetHanderTrigger = true;

      // 跳过不涉及备品借出的逻辑
      StaticParameter.rentalApplyIsRunning = true;

      // accountdailyUpdate 跳过 更新询价
      StaticParameter.EscapeOpportunityownerUpdate  = true;
      UpdateAssetToCurrentMCBatch batchTest = new UpdateAssetToCurrentMCBatch();
      Database.executeBatch(batchTest);
      System.Test.StopTest();
    }
    //batchTest.execute( null, mcaList);
    mcaList = [select id, Asset__c, Maintenance_Contract__c, Maintenance_Contract__r.Contract_End_Date__c,
               Maintenance_Contract__r.Contract_Start_Date__c,
               Asset__r.Service_Agreement__c, Asset__r.CurrentContract__c,
               Asset__r.CurrentContract_End_Date__c
               from Maintenance_Contract_Asset__c
               where Maintenance_Contract__r.Contract_End_Date__c = : YesDay
                   or Maintenance_Contract__r.Contract_Start_Date__c = : TDay];
    //system.assertEquals(1, mcaList.size());
    //system.assertEquals('有', mcaList[0].Asset__r.Service_Agreement__c);
    //system.assertEquals(testCrt.Id , mcaList[0].Asset__r.CurrentContract__c);
  }

  /**
  //开始日期为今天的合同B，其保有设备Asset已有有效合同A，且A比B更晚结束
  static testMethod void ALateThenBTest() {

    Asset testAst = createAsset();
    Date TDay = Date.today();
    Date YesDay = Date.today().addDays(-1);
    Maintenance_Contract__c testCrtA = creatContract(testAst, TDay.addDays(60), TDay.addDays(-20), 'crtA');
    Maintenance_Contract__c testCrtB = creatContract(testAst, TDay.addDays(30), TDay, 'crtB');
    updAsset(testAst, testCrtA);

    creatMca(testAst, testCrtA);
    creatMca(testAst, testCrtB);
    List<Maintenance_Contract_Asset__c> mcaList = [select id, Asset__c, Maintenance_Contract__c, Maintenance_Contract__r.Contract_End_Date__c,
                                        Maintenance_Contract__r.Contract_Start_Date__c,
                                        Asset__r.Service_Agreement__c, Asset__r.CurrentContract__c,
                                        Asset__r.CurrentContract_End_Date__c
                                        from Maintenance_Contract_Asset__c
                                        where Maintenance_Contract__r.Contract_End_Date__c = : YesDay
                                            or Maintenance_Contract__r.Contract_Start_Date__c = : TDay];

    //system.assertEquals(1, mcaList.size());
    //system.assertEquals('有', mcaList[0].Asset__r.Service_Agreement__c);
    //system.assertEquals(testCrtA.Id, mcaList[0].Asset__r.CurrentContract__c);
    System.runAs(new User(Id = Userinfo.getUserId())) {
      system.Test.StartTest();
      StaticParameter.EventOpportunityPileUpExeFlg = true;
      // EventC⇒Event処理後、逆更新をスルー用
      StaticParameter.NotUpdEventCFlg = true;
      // 積み上げ処理後、トリガをスルー用
      StaticParameter.EscapeNFM001Trigger = true;
      StaticParameter.EscapeNFM001AgencyContractTrigger = true;
      StaticParameter.EscapeNFM001AgencyContractTrigger2 = true;
      StaticParameter.EscapeNFM007Trigger = true;
      StaticParameter.EscapeOpportunityBefUpdTrigger = true;
      StaticParameter.EscapeOpportunityHpDeptUpdTrigger = true;
      StaticParameter.EscapeSyncOpportunityTrigger = true;
      StaticParameter.EscapeMaintenanceContractAfterUpdateTrigger = true;
      StaticParameter.EscapeSyncProduct2Trigger = true;
      // trueのとき、リードのトリガーをスルーする
      StaticParameter.EscapeLeadTrigger = true;
      StaticParameter.EscapeAccountTrigger = true;

      StaticParameter.EscapeConsumableOrderDetail2Trigger = true;

      StaticParameter.EscapeNFM010UpsertStatuAchievementsTrigger = true;
      // 直销耗材不直销 ConsumableAssetHander
      StaticParameter.ConsumableAssetHanderTrigger = true;

      // 跳过不涉及备品借出的逻辑
      StaticParameter.rentalApplyIsRunning = true;

      // accountdailyUpdate 跳过 更新询价
      StaticParameter.EscapeOpportunityownerUpdate  = true;
      UpdateAssetToCurrentMCBatch batchTest = new UpdateAssetToCurrentMCBatch();
      Database.executeBatch(batchTest);
      System.Test.StopTest();
    }
    //batchTest.execute( null, mcaList);
    mcaList = [select id, Asset__c, Maintenance_Contract__c, Maintenance_Contract__r.Contract_End_Date__c,
               Maintenance_Contract__r.Contract_Start_Date__c,
               Asset__r.Service_Agreement__c, Asset__r.CurrentContract__c,
               Asset__r.CurrentContract_End_Date__c
               from Maintenance_Contract_Asset__c
               where Maintenance_Contract__r.Contract_End_Date__c = : YesDay
                   or Maintenance_Contract__r.Contract_Start_Date__c = : TDay];
    //system.assertEquals(1, mcaList.size());
    //system.assertEquals('有', mcaList[0].Asset__r.Service_Agreement__c);
    //system.assertEquals(testCrtB.Id , mcaList[0].Asset__r.CurrentContract__c, 'Expert:合同B、実際はそうではないです');

  }
	*/
   /**
  //开始日期为今天的合同B，其保有设备Asset已有有效合同A，但A比B早结束
  static testMethod void AEarlyThanBTest() {

    Asset testAst = createAsset();
    Date TDay = Date.today();
    Date YesDay = Date.today().addDays(-1);

    Maintenance_Contract__c testCrtA = creatContract(testAst, TDay.addDays(30), TDay.addDays(-20), 'crtA');
    Maintenance_Contract__c testCrtB = creatContract(testAst, TDay.addDays(60), TDay, 'crtB');
    updAsset(testAst, testCrtA);
    creatMca(testAst, testCrtA);
    creatMca(testAst, testCrtB);
    List<Maintenance_Contract_Asset__c> mcaList = [select id, Asset__c, Maintenance_Contract__c, Maintenance_Contract__r.Contract_End_Date__c,
                                        Maintenance_Contract__r.Contract_Start_Date__c,
                                        Asset__r.Service_Agreement__c, Asset__r.CurrentContract__c,
                                        Asset__r.CurrentContract_End_Date__c
                                        from Maintenance_Contract_Asset__c
                                        where Maintenance_Contract__r.Contract_End_Date__c = : YesDay
                                            or Maintenance_Contract__r.Contract_Start_Date__c = : TDay];

    //system.assertEquals(1, mcaList.size());
    //system.assertEquals('有', mcaList[0].Asset__r.Service_Agreement__c);
    //system.assertEquals(testCrtA.Id, mcaList[0].Asset__r.CurrentContract__c);
    System.runAs(new User(Id = Userinfo.getUserId())) {
      system.Test.StartTest();
      StaticParameter.EventOpportunityPileUpExeFlg = true;
      // EventC⇒Event処理後、逆更新をスルー用
      StaticParameter.NotUpdEventCFlg = true;
      // 積み上げ処理後、トリガをスルー用
      StaticParameter.EscapeNFM001Trigger = true;
      StaticParameter.EscapeNFM001AgencyContractTrigger = true;
      StaticParameter.EscapeNFM001AgencyContractTrigger2 = true;
      StaticParameter.EscapeNFM007Trigger = true;
      StaticParameter.EscapeOpportunityBefUpdTrigger = true;
      StaticParameter.EscapeOpportunityHpDeptUpdTrigger = true;
      StaticParameter.EscapeSyncOpportunityTrigger = true;
      StaticParameter.EscapeMaintenanceContractAfterUpdateTrigger = true;
      StaticParameter.EscapeSyncProduct2Trigger = true;
      // trueのとき、リードのトリガーをスルーする
      StaticParameter.EscapeLeadTrigger = true;
      StaticParameter.EscapeAccountTrigger = true;

      StaticParameter.EscapeConsumableOrderDetail2Trigger = true;

      StaticParameter.EscapeNFM010UpsertStatuAchievementsTrigger = true;
      // 直销耗材不直销 ConsumableAssetHander
      StaticParameter.ConsumableAssetHanderTrigger = true;

      // 跳过不涉及备品借出的逻辑
      StaticParameter.rentalApplyIsRunning = true;

      // accountdailyUpdate 跳过 更新询价
      StaticParameter.EscapeOpportunityownerUpdate  = true;
      UpdateAssetToCurrentMCBatch batchTest = new UpdateAssetToCurrentMCBatch();
      Database.executeBatch(batchTest);
      System.Test.StopTest();
    }
    //batchTest.execute( null, mcaList);
    mcaList = [select id, Asset__c, Maintenance_Contract__c, Maintenance_Contract__r.Contract_End_Date__c,
               Maintenance_Contract__r.Contract_Start_Date__c,
               Asset__r.Service_Agreement__c, Asset__r.CurrentContract__c,
               Asset__r.CurrentContract_End_Date__c
               from Maintenance_Contract_Asset__c
               where Maintenance_Contract__r.Contract_End_Date__c = : YesDay
                   or Maintenance_Contract__r.Contract_Start_Date__c = : TDay];
    //system.assertEquals(1, mcaList.size());
    //system.assertEquals('有', mcaList[0].Asset__r.Service_Agreement__c);
    ////system.assertEquals(testCrtB.Id , mcaList[0].Asset__r.CurrentContract__c, '合同未改换为B');
  }*/
  //对当前目标Assert进行维修合同的更新
  static testMethod void startAssertIDTest() {
    // TO DO: implement unit test

    Asset testAst = createAsset();
    Date TDay = Date.today();
    Date YesDay = Date.today().addDays(-1);
    Maintenance_Contract__c testCrt = creatContract(testAst, TDay.addDays(30), TDay, 'crt');
    creatMca(testAst, testCrt);
    Maintenance_Contract_Asset__c mca = [select id, Asset__c, Maintenance_Contract__c, Maintenance_Contract__r.Contract_End_Date__c,
                                         Maintenance_Contract__r.Contract_Start_Date__c,
                                         Asset__r.Service_Agreement__c, Asset__r.CurrentContract__c,
                                         Asset__r.CurrentContract_End_Date__c
                                         from Maintenance_Contract_Asset__c
                                         where Asset__c = : testAst.id];

    //system.assertEquals('無', mca.Asset__r.Service_Agreement__c);
    //system.assertEquals(null, mca.Asset__r.CurrentContract__c);
    System.runAs(new User(Id = Userinfo.getUserId())) {
      system.Test.StartTest();
      StaticParameter.EventOpportunityPileUpExeFlg = true;
      // EventC⇒Event処理後、逆更新をスルー用
      StaticParameter.NotUpdEventCFlg = true;
      // 積み上げ処理後、トリガをスルー用
      StaticParameter.EscapeNFM001Trigger = true;
      StaticParameter.EscapeNFM001AgencyContractTrigger = true;
      StaticParameter.EscapeNFM001AgencyContractTrigger2 = true;
      StaticParameter.EscapeNFM007Trigger = true;
      StaticParameter.EscapeOpportunityBefUpdTrigger = true;
      StaticParameter.EscapeOpportunityHpDeptUpdTrigger = true;
      StaticParameter.EscapeSyncOpportunityTrigger = true;
      StaticParameter.EscapeMaintenanceContractAfterUpdateTrigger = true;
      StaticParameter.EscapeSyncProduct2Trigger = true;
      // trueのとき、リードのトリガーをスルーする
      StaticParameter.EscapeLeadTrigger = true;
      StaticParameter.EscapeAccountTrigger = true;

      StaticParameter.EscapeConsumableOrderDetail2Trigger = true;

      StaticParameter.EscapeNFM010UpsertStatuAchievementsTrigger = true;
      // 直销耗材不直销 ConsumableAssetHander
      StaticParameter.ConsumableAssetHanderTrigger = true;

      // 跳过不涉及备品借出的逻辑
      StaticParameter.rentalApplyIsRunning = true;

      // accountdailyUpdate 跳过 更新询价
      StaticParameter.EscapeOpportunityownerUpdate  = true;
      UpdateAssetToCurrentMCBatch batchTest = new UpdateAssetToCurrentMCBatch(testAst.id);
      Database.executeBatch(batchTest);
      System.Test.StopTest();
    }
    //batchTest.execute( null, mcaList);
    mca = [select id, Asset__c, Maintenance_Contract__c, Maintenance_Contract__r.Contract_End_Date__c,
           Maintenance_Contract__r.Contract_Start_Date__c,
           Asset__r.Service_Agreement__c, Asset__r.CurrentContract__c,
           Asset__r.CurrentContract_End_Date__c
           from Maintenance_Contract_Asset__c
           where Asset__c = : testAst.id];

    //system.assertEquals('有', mca.Asset__r.Service_Agreement__c);
    //system.assertEquals(testCrt.Id , mca.Asset__r.CurrentContract__c);
  }
  // static testMethod void test1() {
  //   UpdateAssetToCurrentMCBatch.test();
  // }
  
}