@isTest
private class rollupToRepairBatchTest {
    private static Id pricebookId = ControllerUtil.getStandardPricebook().Id;
    @TestSetup
    private static void SetUP() {
        // システム管理者
        User user = new User(Test_staff__c = true);
        user.LastName = '_サンブリッジ';
        user.FirstName = 'う';
        user.Alias = 'う';
        user.Email = 'olympusTest03@sunbridge.com';
        user.Username = 'olympusTest03@sunbridge.com';
        user.CommunityNickname = 'う';
        user.IsActive = true;
        user.EmailEncodingKey = 'ISO-2022-JP';
        user.TimeZoneSidKey = 'Asia/Tokyo';
        user.LocaleSidKey = 'ja_JP';
        user.LanguageLocaleKey = 'ja';
        user.ProfileId = System.Label.ProfileId_SystemAdmin;
        user.Job_Category__c = '销售推广';
        user.Province__c = '上海市';
        user.Dept__c = '医疗华北营业本部';
        user.Use_Start_Date__c = Date.today().addMonths(-6);
        user.SalesManager__c = UserInfo.getUserId();
        user.BuchangApprovalManagerSales__c = UserInfo.getUserId();
        user.JingliApprovalManager__c = UserInfo.getUserId();
        user.BuchangApprovalManager__c = UserInfo.getUserId();
        user.ZongjianApprovalManager__c = UserInfo.getUserId();
        user.JingliEquipmentManager__c = UserInfo.getUserId();
        user.Buzhang_Equipment_Manager__c = UserInfo.getUserId();
        System.runAs(user) {
            StaticParameter.rentalApplyIsRunning = true;
            StaticParameter.EscapeNFM001AgencyContractTrigger = true;
            ControllerUtil.EscapeNFM001Trigger = true;
            // 病院を作る
            Account hospital = new Account();
            hospital.recordtypeId = [Select Id FROM RecordType WHERE DeveloperName = 'HP'].id;
            hospital.Name = 'test hospital';
            insert hospital;

            // 戦略科室を得る
            List<Account> strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_GI'];

            // 診療科を作る
            Account dep = new Account();
            dep.recordtypeId = [Select Id FROM RecordType WHERE DeveloperName = 'Department_GI'].id;
            dep.Name = 'test dep';
            dep.ParentId = strategicDep[0].Id;
            dep.Department_Class__c = strategicDep[0].Id;
            dep.Hospital__c = hospital.Id;
            insert dep;

            //联系人
            Contact core = new Contact(email = 'jplumber@salesforce.com',
                                       firstname = 'Joe',
                                       lastname = 'Plumber',
                                       accountid = dep.id);
            insert core;

            // 製品を作る
            Product2 productA = new Product2( Name = 'テスト商品',
                                              Fixture_Model_No__c = 'n01');
            insert productA;

            // 価格表エントリを作成する
            PricebookEntry entry = new PricebookEntry( Pricebook2Id = pricebookId, Product2Id = productA.Id);
            entry.UnitPrice = 0;
            entry.IsActive = true;
            entry.UseStandardPrice = false;
            entry.CurrencyIsoCode = 'CNY';
            entry.Product2Id = productA.Id;
            insert entry;

            // 納入機器を作成する
            Asset asset = new Asset();
            asset.Name = 'テスト機器';
            asset.AccountId = dep.Id;
            asset.Department_Class__c = strategicDep[0].Id;
            asset.Hospital__c = hospital.Id;
            asset.SerialNumber = 'testserial';
            insert asset;

            Fixture_Set__c fixtures1 = new Fixture_Set__c();
            fixtures1.Name = 'set1';
            fixtures1.Loaner_name__c = 'name1';
            insert new Fixture_Set__c[] {fixtures1};

            Fixture_Set_Detail__c fsd1 = new Fixture_Set_Detail__c();
            fsd1.Product2__c = productA.Id;
            fsd1.Fixture_Set__c = fixtures1.Id;
            fsd1.Is_Body__c = true;
            fsd1.Is_Optional__c = false;
            fsd1.UniqueKey__c = fixtures1.Id + ':' + productA.Id;
            fsd1.SortInt__c = 1;

            insert new Fixture_Set_Detail__c[] {fsd1};


            // 修理做成
            Repair__c repair01 = new Repair__c();
            repair01.Account__c = dep.Id;
            repair01.Department_Class__c = strategicDep[0].Id;
            repair01.Hospital__c = hospital.Id;
            repair01.Delivered_Product__c = asset.Id;
            repair01.SERVICE_CONTRACT_JUDEGE_DAY__C = Date.today().addDays(0);  // 维修合同判断日がサービス契約の中間辺りの日付
            insert repair01;

            Rental_Apply__c ra = new Rental_Apply__c();
            ra.Name = 'test';
            ra.Status__c = FixtureUtil.raStatusMap.get(FixtureUtil.RaStatus.Cao_An_Zhong.ordinal());
            ra.Request_shipping_day__c = Date.today().addDays(3);
            ra.Hope_Lonaer_date_Num__c = 1;
            ra.Request_return_day__c = Date.today().addDays(8);
            ra.Request_approval_time__c = datetime.now().addDays(99);
            ra.Person_In_Charge__c = user.Id;
            ra.applyUser__c = user.Id;
            ra.SalesManager__c = user.Id;
            ra.Repair__c = repair01.Id;
            ra.Demo_purpose1__c = '其他';
            ra.Demo_purpose2__c = '其他';
            ra.Account__c = dep.Id;
            ra.Strategic_dept__c = dep.Id;
            ra.Hospital__c = hospital.Id;
            ra.Loaner_medical_Staff__c = core.Id;
            ra.Phone_number__c = '12222222222';
            ra.Request_approval_time__c = datetime.now().addDays(9);
            insert ra;

            Rental_Apply_Equipment_Set__c es1 = new Rental_Apply_Equipment_Set__c();
            es1.Rental_Apply__c = ra.Id;
            es1.Fixture_Set__c = fixtures1.Id;
            es1.IndexFromUniqueKey__c = 1;
            es1.UniqueKey__c = '1:' + fixtures1.Id + ':1';

            insert new Rental_Apply_Equipment_Set__c[] {es1};

            //创建借出配套明细
            Rental_Apply_Equipment_Set_Detail__c esd1 = new Rental_Apply_Equipment_Set_Detail__c();
            esd1.Rental_Apply__c = ra.Id;
            esd1.Fixture_Set_Detail__c = fsd1.Id;
            esd1.Rental_Num__c = 1;
            esd1.Queue_Number__c = 0;
            esd1.Rental_Apply_Equipment_Set__c = es1.Id;
            esd1.Salesdepartment_before__c = '1.华北营业本部';
            esd1.Internal_asset_location_before__c = '北京 备品中心';
            esd1.Product_category_text__c = 'GI';
            esd1.Equipment_Type_text__c = '产品试用';
            esd1.IndexFromUniqueKey__c = 1;
            esd1.UniqueKey__c = '1:' + es1.Id + ':' + fsd1.Id + ':1';
            esd1.Is_Body__c = true;
            esd1.Shippment_loaner_time__c = datetime.now().addDays(99);

            insert esd1;
        }
    }
    // 测试修理有效申请
    @isTest
    private static void myUnitTestRepair() {
        System.Test.startTest();
        Database.executeBatch(new rollupToRepairBatch(), 100);
        System.Test.stopTest();
        rollupToRepairBatch batch = new rollupToRepairBatch();
        batch.failedCount ++;
        batch.sendFieldEmail();

    }
    @isTest
    private static void myUnitTestRepair1() {
        System.Test.startTest();
        Database.executeBatch(new rollupToRepairBatch(true), 100);
        System.Test.stopTest();
    }
    @isTest
    private static void myUnitTestRepair2() {
        System.Test.startTest();
        Database.executeBatch(new rollupToRepairBatch(''), 100);
        System.Test.stopTest();
    }
    @isTest
    private static void myUnitTestRepair3() {
        list<ID> IDlist = new list<ID>();
        System.Test.startTest();
        Database.executeBatch(new rollupToRepairBatch(IDlist), 100);
        System.Test.stopTest();
    }
}