@isTest
private class CheckAllOlympusAssetControllerTest {
     private static void createAssetData() {
        TestDataUtility.CreatePIPolicyConfigurations(new string[]{'Agency_Contact__c','Contact'});
        // OLY_OCM-643 追加EscapeNFM001Trigger
        ControllerUtil.EscapeNFM001Trigger = true;
        // 省
        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;
        // 经销商
        Contact contact2 = new Contact();
        contact2.AccountId = dep.Id;
        contact2.FirstName = '責任者';
        contact2.LastName = 'test1经销商';
        insert contact2;
        // 产品
        Product2 pro1 = new Product2(Name='name01',IsActive=true,Family='GI',
                Fixture_Model_No__c='n01',Serial_Lot_No__c='S/N tracing',
                Fixture_Model_No_T__c = 'n01', Asset_Model_No__c = 'Pro1',
                ProductCode_Ext__c='pc01',Manual_Entry__c=false);
        Product2 pro2 = new Product2(Name='name02',IsActive=true,Family='GI',
                Fixture_Model_No__c='n02',Serial_Lot_No__c='Lot tracing',
                Fixture_Model_No_T__c = 'n02', Asset_Model_No__c = 'Pro2',
                ProductCode_Ext__c='pc02',Manual_Entry__c=false);
        Product2 pro3 = new Product2(Name='name03',IsActive=true,Family='GI',
                Fixture_Model_No__c='n03',Serial_Lot_No__c='Lot tracing',
                Fixture_Model_No_T__c = 'n03', Asset_Model_No__c = 'Pro3',
                ProductCode_Ext__c='pc03',Manual_Entry__c=false);
        insert new Product2[] {pro1, pro2, pro3};
        // 保有设备1 (主体) 主体只能是个体管理
        List<Asset> assetTestList = new List<Asset>();
        Asset asset1 = new Asset();
        asset1.RecordTypeId = System.Label.Asset_RecordType;
        asset1.Asset_Owner__c = 'Olympus';
        asset1.SerialNumber = 'asset1';
        asset1.Name = 'asset1';
        asset1.AccountId = dep.Id;
        asset1.Department_Class__c = strategicDep[0].Id;
        asset1.Hospital__c = hospital.Id;
        asset1.Product2Id = pro1.Id;
        asset1.Quantity = 1;
        asset1.Status = '使用中';
        asset1.Manage_type__c = '个体管理';
        asset1.Loaner_accsessary__c = false;
        asset1.Delete_Flag__c = false;
        asset1.AssetManageConfirm__c = true;
        asset1.Freeze_sign__c = false;
        asset1.Out_of_wh__c = 0;
        asset1.Salesdepartment__c = '9.MA本部';
        asset1.Internal_asset_location__c = '北京 备品中心';
        asset1.Product_category__c = 'GI';
        asset1.Equipment_Type__c = '产品试用';
        asset1.SalesProvince__c = '北京';
        asset1.CompanyOfEquipment__c = '北京';
        asset1.Internal_Asset_number__c = '0001';
        asset1.WH_location__c = '货架号1';
        assetTestList.add(asset1);
        // 保有设备2 (附属品 数量管理)
        Asset asset2 = new Asset();
        asset2.RecordTypeId = System.Label.Asset_RecordType;
        asset2.Asset_Owner__c = 'Olympus';
        asset2.SerialNumber = 'asset2';
        asset2.Name = 'asset2';
        asset2.AccountId = dep.Id;
        asset2.Department_Class__c = strategicDep[0].Id;
        asset2.Hospital__c = hospital.Id;
        asset2.Product2Id = pro2.Id;
        asset2.Quantity = 10;
        asset2.Status = '使用中';
        asset2.Manage_type__c = '数量管理';
        asset2.Loaner_accsessary__c = true;
        asset2.Delete_Flag__c = false;
        asset2.AssetManageConfirm__c = true;
        asset2.Freeze_sign__c = false;
        asset2.Out_of_wh__c = 3;
        asset2.Frozen_Quantity__c = 2;
        asset2.Salesdepartment__c = '1.华北营业本部';
        asset2.Internal_asset_location__c = '北京 备品中心';
        asset2.Product_category__c = 'GI';
        asset2.Equipment_Type__c = '产品试用';
        asset2.SalesProvince__c = '北京';
        asset2.CompanyOfEquipment__c = '北京';
        asset2.Internal_Asset_number__c = '0002';
        asset2.WH_location__c = '货架号2';
        assetTestList.add(asset2);
        insert assetTestList;
        List<Asset> assetList = [SELECT Id, Asset_Owner__c FROM Asset 
                                 WHERE Asset_Owner__c = 'Olympus' 
                                 AND Delete_Flag__c = false 
                                 AND AssetManageConfirm__c = true 
                                 ORDER BY Id asc nulls first 
                                ];
        System.assertEquals(2, assetList.size());
        System.assertEquals('Olympus', assetList[0].Asset_Owner__c);
        // asset2 修理 草案中
        Repair__c repair = new Repair__c();
        repair.Service_Repair_No__c = 'repair';
        repair.Status__c = '草案中';
        repair.Hospital__c = hospital.Id;
        repair.Account__c = dep.Id;
        repair.Department_Class__c = strategicDep[0].id;
        repair.Delivered_Product__c = asset2.Id;
        insert repair;
    }
    // 测试初始化页面
    @isTest static void testPageInitAsset() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', null);
        page.getParameters().put('assertCondition', null);
        page.getParameters().put('fromQuickBarFlag', null);
        System.Test.setCurrentPage(page);
        System.Test.StartTest();

        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();

        List<SelectOption> internalAssetLocationOpts = checkAssetControllerTest.internalAssetLocationOptionList;
        List<SelectOption> internalAssetDataLocationOpts = checkAssetControllerTest.internalAssetDataLocationOptionList;
        checkAssetControllerTest.getAppliedSelectOptionList();
        checkAssetControllerTest.getAllAssetDataListSize();
        List<SelectOption> assetStatusOptionListTest = checkAssetControllerTest.assetStatusOptionList;
        List<SelectOption> bodyOrAccessoryOptionListTest = checkAssetControllerTest.bodyOrAccessoryOptionList;
        List<SelectOption> limitOptsTest = checkAssetControllerTest.limitOpts;
        Integer leftLabelSizeTest = checkAssetControllerTest.leftLabelSize;
        String COMMATest = checkAssetControllerTest.COMMA;
        String CRLFTest = checkAssetControllerTest.CRLF;


        checkAssetControllerTest.checkAssetBtn();
        System.Test.StopTest();
        System.assertEquals(2, checkAssetControllerTest.allAssetInfoList.size());
    }
    // 查看全部保有设备
    @isTest static void testCheckAllOlympusAsset() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'all');
        page.getParameters().put('fromQuickBarFlag', 'true');
        System.Test.setCurrentPage(page);

        System.Test.StartTest();
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        checkAssetControllerTest.checkAssetBtn();
        System.Test.StopTest();

        System.assertEquals(2, checkAssetControllerTest.allAssetInfoList.size());
    }
    // 查看有效库存
    @isTest static void testCheckConsumableOlympusAsset() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'consumable');
        page.getParameters().put('fromQuickBarFlag', 'true');
        System.Test.setCurrentPage(page);

        System.Test.StartTest();
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        checkAssetControllerTest.checkAssetBtn();
        System.Test.StopTest();

        System.assertEquals(2, checkAssetControllerTest.allAssetInfoList.size());
    }
    // 查看借出分配数
    @isTest static void testCheckLendingOlympusAsset() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'lending');
        page.getParameters().put('fromQuickBarFlag', 'true');
        System.Test.setCurrentPage(page);

        System.Test.StartTest();
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        checkAssetControllerTest.checkAssetBtn();
        System.Test.StopTest();

        System.assertEquals(1, checkAssetControllerTest.allAssetInfoList.size());
    }
    // 查看修理中保有设备
    @isTest static void testCheckRepairingOlympusAsset() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'repairing');
        page.getParameters().put('fromQuickBarFlag', 'true');
        System.Test.setCurrentPage(page);

        System.Test.StartTest();
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        checkAssetControllerTest.checkAssetBtn();
        System.Test.StopTest();

        System.assertEquals(1, checkAssetControllerTest.allAssetInfoList.size());
    }
    // 查看待报废保有设备
    @isTest static void testCheckScrappingOlympusAsset() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'scrapping');
        page.getParameters().put('fromQuickBarFlag', 'true');
        System.Test.setCurrentPage(page);

        System.Test.StartTest();
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        checkAssetControllerTest.checkAssetBtn();
        System.Test.StopTest();

        System.assertEquals(0, checkAssetControllerTest.allAssetInfoList.size());
    }
    // 查看已报废保有设备
    @isTest static void testCheckScrappedOlympusAsset() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'scrapped');
        page.getParameters().put('fromQuickBarFlag', 'true');
        System.Test.setCurrentPage(page);

        System.Test.StartTest();
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        checkAssetControllerTest.checkAssetBtn();
        System.Test.StopTest();

        System.assertEquals(0, checkAssetControllerTest.allAssetInfoList.size());
    }
    // 查看已消耗的保有设备
    @isTest static void testCheckConsumedOlympusAsset() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'consumed');
        page.getParameters().put('fromQuickBarFlag', 'true');
        System.Test.setCurrentPage(page);

        System.Test.StartTest();
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        checkAssetControllerTest.checkAssetBtn();
        System.Test.StopTest();

        System.assertEquals(0, checkAssetControllerTest.allAssetInfoList.size());
    }
    // 查看即将到期的保有设备
    @isTest static void testCheckSoonExpiredOlympusAsset() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'soonExpired');
        page.getParameters().put('fromQuickBarFlag', 'true');
        System.Test.setCurrentPage(page);

        System.Test.StartTest();
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        checkAssetControllerTest.checkAssetBtn();
        System.Test.StopTest();

        System.assertEquals(0, checkAssetControllerTest.allAssetInfoList.size());
    }
    // 查看已过期的保有设备
    @isTest static void testCheckExpiredOlympusAsset() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'expired');
        page.getParameters().put('fromQuickBarFlag', 'true');
        System.Test.setCurrentPage(page);

        System.Test.StartTest();
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        checkAssetControllerTest.checkAssetBtn();
        System.Test.StopTest();

        System.assertEquals(0, checkAssetControllerTest.allAssetInfoList.size());
    }
    // 清空检索条件
    @isTest static void testClearSearchCondition() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'all');
        page.getParameters().put('fromQuickBarFlag', 'true');
        System.Test.setCurrentPage(page);

        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();

        checkAssetControllerTest.searchB.internal_asset_location = checkAssetControllerTest.internalAssetLocationLogin; // 备品存放地
        checkAssetControllerTest.searchB.fixture_Model_No = '北京 备品中心';  // 备品配套明细型号
        checkAssetControllerTest.searchB.wh_location = 'IMH-20';  // 货架号
        checkAssetControllerTest.searchB.fixture_Status = '可分配';  // 备品状态
        checkAssetControllerTest.searchB.equipmentSet_Managment_Code = 'test';  // 备品管理编码
        checkAssetControllerTest.searchB.internal_Asset_number = 'test';  // 固定资产号
        checkAssetControllerTest.searchB.serialNumber = 'test';  // 机身号
        checkAssetControllerTest.searchB.companyOfEquipment = '北京';  // 分公司号
        checkAssetControllerTest.searchB.bodyOrAccessory = '主体';  // 主体/附属品
        checkAssetControllerTest.searchB.product_category = 'GI';  // 产品分类
        checkAssetControllerTest.searchB.equipment_Type = '产品适用';  // 备品分类
        checkAssetControllerTest.searchB.manage_type = '数量管理';  // 管理种类
        checkAssetControllerTest.searchB.salesdepartment = '0.备品中心';  // 所在地区(本部)
        checkAssetControllerTest.searchB.salesProvince = '北京';  // 所在地区(省)
        checkAssetControllerTest.searchB.consumable_Guaranteen_endStr = NULL;  // 消耗品有效期至

        System.Test.StartTest();
        checkAssetControllerTest.clearAllSearchConditionWhenCancel();
        System.Test.StopTest();

        System.assertEquals(checkAssetControllerTest.internalAssetLocationLogin, checkAssetControllerTest.searchB.internal_asset_location); // 备品存放地
        System.assertEquals('', checkAssetControllerTest.searchB.fixture_Model_No);  // 备品配套明细型号
        System.assertEquals('', checkAssetControllerTest.searchB.wh_location);  // 货架号
        System.assertEquals('', checkAssetControllerTest.searchB.fixture_Status);  // 备品状态
        System.assertEquals('', checkAssetControllerTest.searchB.equipmentSet_Managment_Code);  // 备品管理编码
        System.assertEquals('', checkAssetControllerTest.searchB.internal_Asset_number);
        System.assertEquals('', checkAssetControllerTest.searchB.serialNumber);
        System.assertEquals('', checkAssetControllerTest.searchB.companyOfEquipment);
        System.assertEquals('', checkAssetControllerTest.searchB.product_category);
        System.assertEquals('', checkAssetControllerTest.searchB.equipment_Type);
        System.assertEquals('', checkAssetControllerTest.searchB.manage_type);
        System.assertEquals('', checkAssetControllerTest.searchB.salesdepartment);
        System.assertEquals('', checkAssetControllerTest.searchB.salesProvince);
        System.assertEquals('', checkAssetControllerTest.searchB.consumable_Guaranteen_endStr);
        System.assertEquals(null, checkAssetControllerTest.searchB.consumable_Guaranteen_end);
    }

    // 适用按钮Msg
    @isTest static void testApplyMsgBtn() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'all');
        page.getParameters().put('fromQuickBarFlag', 'true');

        page.getParameters().put('applyMsg', '其他选项: 所在地区(省)中无此选项值天津111，无法更新。');
        page.getParameters().put('applyMsgType', 'Fail');
        page.getParameters().put('applyErrorLabel', NULL);

        System.Test.setCurrentPage(page);

        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();

        System.Test.StartTest();
        checkAssetControllerTest.showApplyMsg();
        System.Test.StopTest();
    }

    // 保存按钮
    @isTest static void testSaveBtn() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'all');
        page.getParameters().put('fromQuickBarFlag', 'true');

        System.Test.setCurrentPage(page);
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();

        for (Integer i = 0; i < checkAssetControllerTest.allAssetInfoList.size(); i++) {
            checkAssetControllerTest.allAssetInfoList[i].isCheck = true;
        }
        System.assertEquals('北京 备品中心', checkAssetControllerTest.allAssetInfoList[0].assetQuertResult.Internal_asset_location__c);
        System.assertEquals('北京 备品中心', checkAssetControllerTest.allAssetInfoList[1].assetQuertResult.Internal_asset_location__c);
        checkAssetControllerTest.allAssetInfoList[0].assetQuertResult.Internal_asset_location__c = '上海 备品中心';
        checkAssetControllerTest.allAssetInfoList[1].assetQuertResult.Internal_asset_location__c = '广州 备品中心';

        System.Test.StartTest();
        checkAssetControllerTest.saveBtn();
        System.Test.StopTest();

        List<Asset> afterSaveAsset = [SELECT Id, Internal_asset_location__c FROM Asset 
                                      WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                                      AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, afterSaveAsset.size());
        System.assertEquals('上海 备品中心', afterSaveAsset[0].Internal_asset_location__c);
        System.assertEquals('广州 备品中心', afterSaveAsset[1].Internal_asset_location__c);
    }

    // 清空打钩项
    @isTest static void testClearAllCheckedBtn() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'all');
        page.getParameters().put('fromQuickBarFlag', 'true');

        System.Test.setCurrentPage(page);
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        for (Integer i = 0; i < checkAssetControllerTest.allAssetInfoList.size(); i++) {
            checkAssetControllerTest.allAssetInfoList[i].isCheck = true;
        }

        System.Test.StartTest();
        checkAssetControllerTest.clearAllCheckedBtn();
        System.Test.StopTest();

        System.assertEquals(2, checkAssetControllerTest.allAssetInfoList.size());
        System.assertEquals(false, checkAssetControllerTest.allAssetInfoList[0].isCheck);
        System.assertEquals(false, checkAssetControllerTest.allAssetInfoList[1].isCheck);
    }

    // 排序测试
    @isTest static void testSortTableBtn() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'all');
        page.getParameters().put('fromQuickBarFlag', 'true');
        page.getParameters().put('sortKey', '2');

        System.Test.setCurrentPage(page);
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();

        System.assertEquals(2, checkAssetControllerTest.allAssetInfoList.size());
        System.assertEquals('9.MA本部', checkAssetControllerTest.allAssetInfoList[0].assetQuertResult.Salesdepartment__c);
        System.assertEquals('1.华北营业本部', checkAssetControllerTest.allAssetInfoList[1].assetQuertResult.Salesdepartment__c);

        System.Test.StartTest();
        checkAssetControllerTest.sortTable();
        System.Test.StopTest();

        System.assertEquals(2, checkAssetControllerTest.allAssetInfoList.size());
        System.assertEquals('1.华北营业本部', checkAssetControllerTest.allAssetInfoList[0].assetQuertResult.Salesdepartment__c);
        System.assertEquals('9.MA本部', checkAssetControllerTest.allAssetInfoList[1].assetQuertResult.Salesdepartment__c);
    }

    // import CSV测试
    @isTest static void testImportCsv() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        String targetAssetId = pAsset[0].Id;
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'all');
        page.getParameters().put('fromQuickBarFlag', 'true');
        String csvStr = '';
        csvStr += 'Id,Internal_asset_location__c,Salesdepartment__c,SalesProvince__c,Fixture_Model_No_F__c,CompanyOfEquipment__c,Internal_Asset_number__c,Internal_Asset_number_key__c,';
        csvStr += 'SerialNumber,Product_category__c,Equipment_Type__c,Consumable_Guaranteen_end__c,Manage_type__c,Loaner_accsessary__c,EquipmentSet_Managment_Code__c,AssetManageConfirm__c,Fixture_QRCode__c,';
        csvStr += 'WH_location__c,Quantity,You_Xiao_Ku_Cun__c,Ji_Zhong_Guan_Li_Ku_Cun__c,Out_of_wh__c,Rental_Count__c,Frozen_Quantity__c,Abandoned_RealThing__c,Abandoned_Inventory__c,Repairing_Count__c,';
        csvStr += 'Fixture_Status__c,Main_OneToOne__c,Status';
        csvStr += '\r\n';
        csvStr += 'Id（不可修改）,备品存放地,所在地区(本部),所在地区(省),备品配套明细型号（不可修改）,备品所属公司,固定资产编号,固定资产编号(Key)（不可修改）,シリアル番号,产品分类(GI/SP),备品分类,消耗品有效期至,';
        csvStr += '管理种类,备品用途附属品,备品管理编码,备品中心确认,备品QRCode（不可修改）,货架号,数量,有效库存（不可修改）,集中管理库存（不可修改）,借出_分配_数,已借出数,冻结数,待废弃数(实物),待废弃数(丢失/盘亏),修理中件数（不可修改）,备品状态（不可修改）,一对一保管主体,状态';
        csvStr += '\r\n';
        csvStr += targetAssetId;
        csvStr += ',上海 备品中心,3.西北营业本部,沈阳,IMH-20,上海,8765_4211,51128765_4211,3,GI,产品试用,,个体管理,';
        csvStr += 'true,51138765_4 _1,true,51128765_4211,N10,1.00,0,0,0,0,,,,0,无库存,true,使用中';
        csvStr += '\r\n';
        page.getParameters().put('csvData', csvStr);

        System.Test.setCurrentPage(page);
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();

        System.assertEquals(2, checkAssetControllerTest.allAssetInfoList.size());
        System.assertEquals('9.MA本部', checkAssetControllerTest.allAssetInfoList[0].assetQuertResult.Salesdepartment__c);
        System.assertEquals('1.华北营业本部', checkAssetControllerTest.allAssetInfoList[1].assetQuertResult.Salesdepartment__c);

        System.Test.StartTest();
        checkAssetControllerTest.importCSVFile();
        System.Test.StopTest();

        System.assertEquals(1, checkAssetControllerTest.allAssetInfoList.size());
        System.assertEquals(true, checkAssetControllerTest.allAssetInfoList[0].isCheck);
        System.assertEquals('3.西北营业本部', checkAssetControllerTest.allAssetInfoList[0].assetQuertResult.Salesdepartment__c);
    }
    // 翻页到首页测试
    @isTest static void testFirstPage() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        String targetAssetId = pAsset[0].Id;
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'all');
        page.getParameters().put('fromQuickBarFlag', 'true');

        System.Test.setCurrentPage(page);
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        checkAssetControllerTest.recordNumChange();

        System.assertEquals(2, checkAssetControllerTest.allAssetInfoList.size());
        System.assertEquals('9.MA本部', checkAssetControllerTest.allAssetInfoList[0].assetQuertResult.Salesdepartment__c);
        System.assertEquals('1.华北营业本部', checkAssetControllerTest.allAssetInfoList[1].assetQuertResult.Salesdepartment__c);

        System.Test.StartTest();
        checkAssetControllerTest.firstPage();
        System.Test.StopTest();

        System.assertEquals(2, checkAssetControllerTest.totalNum);
        System.assertEquals(1, checkAssetControllerTest.totalPage);

    }

    // 向后翻页
    @isTest static void testNextPage() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        String targetAssetId = pAsset[0].Id;
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'all');
        page.getParameters().put('fromQuickBarFlag', 'true');

        System.Test.setCurrentPage(page);
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        checkAssetControllerTest.recordNumChange();

        System.assertEquals(2, checkAssetControllerTest.allAssetInfoList.size());
        System.assertEquals('9.MA本部', checkAssetControllerTest.allAssetInfoList[0].assetQuertResult.Salesdepartment__c);
        System.assertEquals('1.华北营业本部', checkAssetControllerTest.allAssetInfoList[1].assetQuertResult.Salesdepartment__c);

        System.Test.StartTest();
        checkAssetControllerTest.nextPage();
        System.Test.StopTest();

        System.assertEquals(2, checkAssetControllerTest.totalNum);
        System.assertEquals(1, checkAssetControllerTest.totalPage);

    }
    // 翻页到尾页
        @isTest static void testEndPage() {
        createAssetData();

        List<Asset> pAsset = [SELECT Id FROM Asset 
                              WHERE Asset_Owner__c = 'Olympus' AND Delete_Flag__c = false 
                              AND AssetManageConfirm__c = true  ORDER BY Id asc nulls first ];
        System.assertEquals(2, pAsset.size());
        String targetAssetId = pAsset[0].Id;
        PageReference page = new PageReference('/apex/CheckAllOlympusAsset');
        page.getParameters().put('searchType', 'all');
        page.getParameters().put('assertCondition', 'all');
        page.getParameters().put('fromQuickBarFlag', 'true');

        System.Test.setCurrentPage(page);
        CheckAllOlympusAssetController checkAssetControllerTest = new CheckAllOlympusAssetController();
        checkAssetControllerTest.init();
        checkAssetControllerTest.recordNumChange();
        List<SelectOption> companyOfEquipmentOpts = checkAssetControllerTest.companyOfEquipmentOpts;
        List<SelectOption> product_categoryOpts = checkAssetControllerTest.product_categoryOpts;
        List<SelectOption> equipment_TypeOpts = checkAssetControllerTest.equipment_TypeOpts;
        List<SelectOption> manage_typeOpts = checkAssetControllerTest.manage_typeOpts;
        List<SelectOption> salesdepartmentOpts = checkAssetControllerTest.salesdepartmentOpts;
        List<SelectOption> salesProvinceOpts = checkAssetControllerTest.salesProvinceOpts;

        System.assertEquals(2, checkAssetControllerTest.allAssetInfoList.size());
        System.assertEquals('9.MA本部', checkAssetControllerTest.allAssetInfoList[0].assetQuertResult.Salesdepartment__c);
        System.assertEquals('1.华北营业本部', checkAssetControllerTest.allAssetInfoList[1].assetQuertResult.Salesdepartment__c);

        System.Test.StartTest();
        checkAssetControllerTest.endPage();
        System.Test.StopTest();

        System.assertEquals(2, checkAssetControllerTest.totalNum);
        System.assertEquals(1, checkAssetControllerTest.totalPage);

    }
}