@isTest private class ReceivingNoteDetailSelectControllerTest { static ReceivingNoteTestDataFactory factory; /** @description 安装master数据 */ @testSetup static void setupMasterData(){ factory = new ReceivingNoteTestDataFactory(); factory.setupMasterData(); } /** @param typeStringListString 格式:'备品类型,管理种类;备品类型,管理种类...' @description 造出指定类型的清单数据,并插入数据库 */ static void setupTestData(String typeStringListString){ factory = new ReceivingNoteTestDataFactory(); if(String.isBlank(typeStringListString)){ typeStringListString = '固定资产,个体管理;附属品,个体管理;附属品,数量管理;耗材,数量管理;低值易耗品,数量管理'; } List typeStringList = typeStringListString.split(';'); factory.setupReceivingNoteData(typeStringList); } /** @description 从数据确认画面跳转来的save方法 */ static testMethod void unitTestSaveFromWaitingReceipt(){ setupTestData('固定资产,个体管理'); Id rnId = factory.rnMap.get('固定资产,个体管理').Id; Id rnsId = factory.rnsMap.get('固定资产,个体管理').Id; PageReference ref = new PageReference('/apex/ReceivingNoteDetailSelect?sids=' + rnsId); Test.setCurrentPage(ref); ReceivingNoteDetailSelectController controller = new ReceivingNoteDetailSelectController(); CreateRelationListPagingCmpCtrl cmp = new CreateRelationListPagingCmpCtrl(); cmp.pageController = controller; controller.myComponentController.init(); List rndList = [ SELECT Id FROM ReceivingNoteDetail__c WHERE ReceivingNoteSummary__c =: rnsId ]; // 本来有一条一览明细 // System.assertEquals(1,rndList.size()); Test.startTest(); controller.init(); controller.searchOpp(); // 配套明细有两个 // System.assertEquals(2, controller.viewList.size()); ReceivingNoteDetail__c rnd = (ReceivingNoteDetail__c) controller.viewList[1].sobj; // 第二种配套明细数量调为3 rnd.Rental_Num__c = 3; //add by rentx 20210824 start rnd.Fixture_Set_New_Quantity__c = 3; //add by rentx 20210824 end controller.viewList[0].check = true; controller.viewList[1].check = true; controller.save(); rndList = [ SELECT Id FROM ReceivingNoteDetail__c WHERE ReceivingNoteSummary__c =: rnsId ]; // 原有的1条加上后加的3条,一共有4条一览明细 // System.assertEquals(4,rndList.size()); Test.stopTest(); } /** @description 从验收画面跳转来的save方法:新建明细 */ static testMethod void unitTestSaveFromAcceptanceNew(){ setupTestData('固定资产,个体管理'); Id rnId = factory.rnMap.get('固定资产,个体管理').Id; Id rnsId = factory.rnsMap.get('固定资产,个体管理').Id; PageReference startPage = new PageReference('/apex/ReceivingNoteAcceptance?id=' + rnId); PageReference ref = new PageReference('/apex/ReceivingNoteDetailSelect?sids=' + rnsId+'&returl=' + startPage.getUrl()); Test.setCurrentPage(ref); ReceivingNoteDetailSelectController controller = new ReceivingNoteDetailSelectController(); CreateRelationListPagingCmpCtrl cmp = new CreateRelationListPagingCmpCtrl(); cmp.pageController = controller; controller.myComponentController.init(); List rndList = [ SELECT Id FROM ReceivingNoteDetail__c WHERE ReceivingNoteSummary__c =: rnsId ]; // 本来有一条一览明细 // System.assertEquals(1,rndList.size()); Test.startTest(); controller.init(); controller.searchOpp(); // 配套明细有两个 // System.assertEquals(2, controller.viewList.size()); ReceivingNoteDetail__c rnd = (ReceivingNoteDetail__c) controller.viewList[1].sobj; // 第二种配套明细数量调为1 rnd.Rental_Num__c = 1; //add by rentx 20210824 start rnd.Fixture_Set_New_Quantity__c = 3; //add by rentx 20210824 end controller.viewList[0].check = true; controller.viewList[1].check = true; controller.save(); rndList = [ SELECT Id , Change_Point__c FROM ReceivingNoteDetail__c WHERE ReceivingNoteSummary__c =: rnsId ]; // 原有的1条新建1条,一共有2条一览明细 // System.assertEquals(2,rndList.size()); // System.assertEquals('新建', rndList[1].Change_Point__c); Test.stopTest(); } /** @description 从验收画面跳转来调整附属品:增加明细 */ static testMethod void unitTestSaveFromAcceptanceAdd(){ setupTestData('固定资产,个体管理'); Id rnId = factory.rnMap.get('固定资产,个体管理').Id; Id rnsId = factory.rnsMap.get('固定资产,个体管理').Id; addDetails(rnsId, 1); PageReference startPage = new PageReference('/apex/ReceivingNoteAcceptance?id=' + rnId); PageReference ref = new PageReference('/apex/ReceivingNoteDetailSelect?sids=' + rnsId+'&returl=' + startPage.getUrl()); Test.setCurrentPage(ref); ReceivingNoteDetailSelectController controller = new ReceivingNoteDetailSelectController(); CreateRelationListPagingCmpCtrl cmp = new CreateRelationListPagingCmpCtrl(); cmp.pageController = controller; controller.myComponentController.init(); List rndList = [ SELECT Id FROM ReceivingNoteDetail__c WHERE ReceivingNoteSummary__c =: rnsId ]; // 本来有2条一览明细 // System.assertEquals(2,rndList.size()); Test.startTest(); controller.init(); controller.searchOpp(); // 配套明细有两个 // System.assertEquals(2, controller.viewList.size()); ReceivingNoteDetail__c rnd = (ReceivingNoteDetail__c) controller.viewList[1].sobj; // 第二种配套明细数量调为2 rnd.Rental_Num__c = 2; //add by rentx 20210824 start rnd.Fixture_Set_New_Quantity__c = 2; //add by rentx 20210824 end controller.viewList[0].check = true; controller.viewList[1].check = true; controller.save(); rndList = [ SELECT Id , Change_Point__c FROM ReceivingNoteDetail__c WHERE ReceivingNoteSummary__c =: rnsId ]; // 原有的2条再加上1条,一共有3条一览明细 // System.assertEquals(3,rndList.size()); // System.assertEquals('增加', rndList[2].Change_Point__c); Test.stopTest(); } /** @description 从验收画面跳转来的save方法:减少明细 */ static testMethod void unitTestSaveFromAcceptanceDelete(){ setupTestData('固定资产,个体管理'); Id rnId = factory.rnMap.get('固定资产,个体管理').Id; Id rnsId = factory.rnsMap.get('固定资产,个体管理').Id; addDetails(rnsId, 1); PageReference startPage = new PageReference('/apex/ReceivingNoteAcceptance?id=' + rnId); PageReference ref = new PageReference('/apex/ReceivingNoteDetailSelect?sids=' + rnsId+'&returl=' + startPage.getUrl()); Test.setCurrentPage(ref); ReceivingNoteDetailSelectController controller = new ReceivingNoteDetailSelectController(); CreateRelationListPagingCmpCtrl cmp = new CreateRelationListPagingCmpCtrl(); cmp.pageController = controller; controller.myComponentController.init(); List rndList = [ SELECT Id FROM ReceivingNoteDetail__c WHERE ReceivingNoteSummary__c =: rnsId ]; // 本来有2条一览明细 // System.assertEquals(2,rndList.size()); Test.startTest(); controller.init(); controller.searchOpp(); // 配套明细有两个 System.assertEquals(2, controller.viewList.size()); ReceivingNoteDetail__c rnd = (ReceivingNoteDetail__c) controller.viewList[1].sobj; // 第二种配套明细数量调为0 rnd.Rental_Num__c = 0; //add by rentx 20210824 start rnd.Fixture_Set_New_Quantity__c = 0; //add by rentx 20210824 end controller.viewList[0].check = true; controller.viewList[1].check = true; controller.save(); rndList = [ SELECT Id , Change_Point__c , Delete_Flag__c FROM ReceivingNoteDetail__c WHERE ReceivingNoteSummary__c =: rnsId ]; // 2条减去1条,则第2条明细变更为'删除' // System.assertEquals(2, rndList.size()); // System.assertEquals('删除', rndList[1].Change_Point__c); Test.stopTest(); } static void addDetails(Id rnsId, Integer n){ PageReference ref = new PageReference('/apex/ReceivingNoteDetailSelect?sids=' + rnsId); Test.setCurrentPage(ref); ReceivingNoteDetailSelectController controller = new ReceivingNoteDetailSelectController(); CreateRelationListPagingCmpCtrl cmp = new CreateRelationListPagingCmpCtrl(); cmp.pageController = controller; controller.myComponentController.init(); List rndList = [ SELECT Id FROM ReceivingNoteDetail__c WHERE ReceivingNoteSummary__c =: rnsId ]; // 本来有一条一览明细 System.assertEquals(1,rndList.size()); controller.init(); controller.searchOpp(); // 配套明细有两个 System.assertEquals(2, controller.viewList.size()); ReceivingNoteDetail__c rnd = (ReceivingNoteDetail__c) controller.viewList[1].sobj; // 第二种配套明细数量调为n rnd.Rental_Num__c = n; //add by rentx 20210824 start rnd.Fixture_Set_New_Quantity__c = n; //add by rentx 20210824 end controller.viewList[0].check = true; controller.viewList[1].check = true; controller.save(); rndList = [ SELECT Id FROM ReceivingNoteDetail__c WHERE ReceivingNoteSummary__c =: rnsId ]; // 原有的1条加上后加的n条,一共有n+1条一览明细 // System.assertEquals(n+1,rndList.size()); } /** @description 测试【返回】按钮 */ static testMethod void unitTestGoBack(){ setupTestData('固定资产,个体管理'); Id rnId = factory.rnMap.get('固定资产,个体管理').Id; Id rnsId = factory.rnsMap.get('固定资产,个体管理').Id; PageReference ref = new PageReference('/apex/ReceivingNoteDetailSelect?raesid='+rnsId+'&sids='+rnsId); Test.setCurrentPage(ref); ReceivingNoteDetailSelectController controller = new ReceivingNoteDetailSelectController(); CreateRelationListPagingCmpCtrl cmp = new CreateRelationListPagingCmpCtrl(); cmp.pageController = controller; controller.myComponentController.init(); Test.startTest(); PageReference pg = controller.goBack(); System.assertEquals(rnId, pg.getParameters().get('pt_recid')); System.assertEquals(rnsId, pg.getParameters().get('raesid')); Test.stopTest(); } /** @description 测试发邮件按钮 */ static testMethod void unitTestSendEmail(){ setupTestData('固定资产,个体管理'); Id rnId = factory.rnMap.get('固定资产,个体管理').Id; Id rnsId = factory.rnsMap.get('固定资产,个体管理').Id; PageReference ref = new PageReference('/apex/ReceivingNoteDetailSelect?raesid='+rnsId+'&sids='+rnsId); Test.setCurrentPage(ref); ReceivingNoteDetailSelectController controller = new ReceivingNoteDetailSelectController(); ReceivingNoteSummary__c rns = [select Name, No_Matching_Reminder_Email_Text__c from ReceivingNoteSummary__c WHERE Id=:rnsId ]; System.assertEquals(null, rns.No_Matching_Reminder_Email_Text__c); Test.startTest(); // 初始化 controller.init(); String emailMsg = rns.Name; String emailBody = 'ARE YOU OK?'; ref.getParameters().put('emailBody', emailBody); controller.sendEmail(); ReceivingNoteSummary__c newRns = [select No_Matching_Reminder_Email_Text__c from ReceivingNoteSummary__c WHERE Id=:rnsId ]; System.assertEquals('【自由填写内容】\nARE YOU OK?\n备品配套:\nSB-FS-01', newRns.No_Matching_Reminder_Email_Text__c); Test.stopTest(); } // 配套中的产品与接口来的不一致时,发生变体 static testMethod void unitTestBianti(){ setupTestData('固定资产,个体管理'); Id rnId = factory.rnMap.get('固定资产,个体管理').Id; Id rnsId = factory.rnsMap.get('固定资产,个体管理').Id; factory.fsdList[0].Product2__c = factory.proList[2].Id; update factory.fsdList[0]; factory.proList[0].Default_Fixture_Arrival_Product__c = factory.proList[2].Id; factory.proList[0].Default_Fixture_Arrival_Process__c = '变体'; update factory.proList[0]; PageReference ref = new PageReference('/apex/ReceivingNoteDetailSelect?sids=' + rnsId); Test.setCurrentPage(ref); ReceivingNoteDetailSelectController controller = new ReceivingNoteDetailSelectController(); CreateRelationListPagingCmpCtrl cmp = new CreateRelationListPagingCmpCtrl(); cmp.pageController = controller; controller.myComponentController.init(); List rndList = [ SELECT Id , Default_Fixture_Arrival_Process__c , Default_Fixture_Arrival_Product__c , Fixture_Arrival_Process__c , Fixture_Arrival_Product__c FROM ReceivingNoteDetail__c WHERE ReceivingNoteSummary__c =: rnsId ]; // 本来有一条一览明细 System.assertEquals(1,rndList.size()); System.assertEquals('变体', rndList[0].Default_Fixture_Arrival_Process__c); System.assertEquals(factory.proList[2].Id, rndList[0].Default_Fixture_Arrival_Product__c); System.assertEquals(null, rndList[0].Fixture_Arrival_Process__c); System.assertEquals(null, rndList[0].Fixture_Arrival_Product__c); Test.startTest(); controller.init(); controller.searchOpp(); // 配套明细有两个 System.assertEquals(2, controller.viewList.size()); ReceivingNoteDetail__c rnd = (ReceivingNoteDetail__c) controller.viewList[1].sobj; // 第二种配套明细数量调为3 rnd.Rental_Num__c = 3; //add by rentx 20210824 start rnd.Fixture_Set_New_Quantity__c = 3; //add by rentx 20210824 end controller.viewList[0].check = true; controller.viewList[1].check = true; controller.save(); rndList = [ SELECT Id , Fixture_Arrival_Process__c , Fixture_Arrival_Product__c FROM ReceivingNoteDetail__c WHERE ReceivingNoteSummary__c =: rnsId ]; // 原有的1条加上后加的3条,一共有4条一览明细 // System.assertEquals(4,rndList.size()); // System.assertEquals('变体', rndList[0].Fixture_Arrival_Process__c); // System.assertEquals(factory.proList[2].Id, rndList[0].Fixture_Arrival_Product__c); Test.stopTest(); } }