private ValidationMessages restoreXmlModel(String xml, @Nullable final String languageKey) { checkPermission(); ValidationMessages validationMessages = ValidationMessages.create(); Date updateDate = new Date(system2.now()); DbSession session = dbClient.openSession(false); try { List<CharacteristicDto> allCharacteristicDtos = restoreCharacteristics(characteristicsXMLImporter.importXML(xml), updateDate, session); restoreRules( allCharacteristicDtos, rules(languageKey, session), rulesXMLImporter.importXML(xml, validationMessages), validationMessages, updateDate, session); session.commit(); } catch (IllegalArgumentException e) { LOG.debug("Error when restoring the model", e); validationMessages.addErrorText(e.getMessage()); } finally { MyBatis.closeQuietly(session); } return validationMessages; }
@Test public void restore_from_xml_add_warning_message_when_rule_from_xml_is_not_found() { when(characteristicsXMLImporter.importXML(anyString())) .thenReturn( new DebtModel() .addRootCharacteristic( new DefaultDebtCharacteristic() .setKey("PORTABILITY") .setName("Portability") .setOrder(1)) .addSubCharacteristic( new DefaultDebtCharacteristic().setKey("COMPILER").setName("Compiler"), "PORTABILITY")); when(dao.selectEnabledCharacteristics(session)) .thenReturn( newArrayList( new CharacteristicDto() .setId(1) .setKey("PORTABILITY") .setName("Portability") .setOrder(1) .setCreatedAt(oldDate), new CharacteristicDto() .setId(2) .setKey("COMPILER") .setName("Compiler") .setParentId(1) .setCreatedAt(oldDate))); when(rulesXMLImporter.importXML(anyString(), any(ValidationMessages.class))) .thenReturn( newArrayList( new RuleDebt() .setRuleKey(RuleKey.of("squid", "UselessImportCheck")) .setSubCharacteristicKey("COMPILER") .setFunction(DebtRemediationFunction.Type.LINEAR.name()) .setCoefficient("2h"))); when(ruleDao.selectEnabledAndNonManual(session)).thenReturn(Collections.<RuleDto>emptyList()); assertThat(debtModelBackup.restoreFromXml("<xml/>").getWarnings()).hasSize(1); verifyZeroInteractions(ruleOperations); verify(ruleDao).selectEnabledAndNonManual(session); verify(session).commit(); }
@Test public void restore_from_xml_and_language() { when(characteristicsXMLImporter.importXML(anyString())) .thenReturn( new DebtModel() .addRootCharacteristic( new DefaultDebtCharacteristic() .setKey("PORTABILITY") .setName("Portability") .setOrder(1)) .addSubCharacteristic( new DefaultDebtCharacteristic().setKey("COMPILER").setName("Compiler"), "PORTABILITY")); CharacteristicDto compiler = new CharacteristicDto() .setId(2) .setKey("COMPILER") .setName("Compiler") .setParentId(1) .setCreatedAt(oldDate); when(dao.selectEnabledCharacteristics(session)) .thenReturn( newArrayList( new CharacteristicDto() .setId(1) .setKey("PORTABILITY") .setName("Portability") .setOrder(1) .setCreatedAt(oldDate), compiler)); when(rulesXMLImporter.importXML(anyString(), any(ValidationMessages.class))) .thenReturn( newArrayList( new RuleDebt() .setRuleKey(RuleKey.of("squid", "UselessImportCheck")) .setSubCharacteristicKey("COMPILER") .setFunction(DebtRemediationFunction.Type.LINEAR.name()) .setCoefficient("2h"))); when(ruleDao.selectEnabledAndNonManual(session)) .thenReturn( newArrayList( new RuleDto() .setId(1) .setRepositoryKey("squid") .setRuleKey("UselessImportCheck") .setLanguage("java") .setDefaultSubCharacteristicId(10) .setDefaultRemediationFunction(DebtRemediationFunction.Type.LINEAR.toString()) .setDefaultRemediationCoefficient("2h"), // Should be ignored new RuleDto() .setId(2) .setRepositoryKey("checkstyle") .setLanguage("java2") .setSubCharacteristicId(3) .setRemediationFunction(DebtRemediationFunction.Type.LINEAR.toString()) .setRemediationCoefficient("2h"))); debtModelBackup.restoreFromXml("<xml/>", "java"); verify(ruleOperations) .updateRule( ruleCaptor.capture(), eq(compiler), eq("LINEAR"), eq("2h"), isNull(String.class), eq(session)); verify(ruleDao).selectEnabledAndNonManual(session); verify(session).commit(); }
@Test public void restore_from_xml_add_error_message_when_illegal_argument_exception() { when(characteristicsXMLImporter.importXML(anyString())) .thenReturn( new DebtModel() .addRootCharacteristic( new DefaultDebtCharacteristic() .setKey("PORTABILITY") .setName("Portability") .setOrder(1)) .addSubCharacteristic( new DefaultDebtCharacteristic().setKey("COMPILER").setName("Compiler"), "PORTABILITY")); when(dao.selectEnabledCharacteristics(session)) .thenReturn( newArrayList( new CharacteristicDto() .setId(1) .setKey("PORTABILITY") .setName("Portability") .setOrder(1) .setCreatedAt(oldDate), new CharacteristicDto() .setId(2) .setKey("COMPILER") .setName("Compiler") .setParentId(1) .setCreatedAt(oldDate))); when(rulesXMLImporter.importXML(anyString(), any(ValidationMessages.class))) .thenReturn( newArrayList( new RuleDebt() .setRuleKey(RuleKey.of("squid", "UselessImportCheck")) .setSubCharacteristicKey("COMPILER") .setFunction(DebtRemediationFunction.Type.LINEAR.name()) .setCoefficient("2h"))); when(ruleDao.selectEnabledAndNonManual(session)) .thenReturn( newArrayList( new RuleDto() .setId(1) .setRepositoryKey("squid") .setRuleKey("UselessImportCheck") .setDefaultSubCharacteristicId(3) .setDefaultRemediationFunction("LINEAR") .setDefaultRemediationCoefficient("2h") // .setCreatedAt(oldDate).setUpdatedAt(oldDate) )); when(ruleOperations.updateRule( any(RuleDto.class), any(CharacteristicDto.class), anyString(), anyString(), anyString(), eq(session))) .thenThrow(IllegalArgumentException.class); assertThat(debtModelBackup.restoreFromXml("<xml/>").getErrors()).hasSize(1); verify(ruleDao).selectEnabledAndNonManual(session); verify(session, never()).commit(); }
@Test public void restore_from_xml_and_language_with_rule_not_in_xml() { when(characteristicsXMLImporter.importXML(anyString())) .thenReturn( new DebtModel() .addRootCharacteristic( new DefaultDebtCharacteristic() .setKey("PORTABILITY") .setName("Portability") .setOrder(1)) .addSubCharacteristic( new DefaultDebtCharacteristic().setKey("COMPILER").setName("Compiler"), "PORTABILITY")); when(dao.selectEnabledCharacteristics(session)) .thenReturn( newArrayList( new CharacteristicDto() .setId(1) .setKey("PORTABILITY") .setName("Portability updated") .setOrder(2) .setCreatedAt(oldDate), new CharacteristicDto() .setId(2) .setKey("COMPILER") .setName("Compiler updated") .setParentId(1) .setCreatedAt(oldDate))); when(rulesXMLImporter.importXML(anyString(), any(ValidationMessages.class))) .thenReturn(Collections.<RuleDebt>emptyList()); when(ruleDao.selectEnabledAndNonManual(session)) .thenReturn( newArrayList( // Rule does not exits in XML -> debt will be disabled new RuleDto() .setId(1) .setRepositoryKey("squid") .setRuleKey("UselessImportCheck") .setLanguage("java") .setDefaultSubCharacteristicId(2) .setDefaultRemediationFunction("LINEAR") .setDefaultRemediationCoefficient("2h") .setSubCharacteristicId(2) .setRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.toString()) .setRemediationCoefficient("2h") .setRemediationOffset("15min"))); debtModelBackup.restoreFromXml("<xml/>", "java"); verify(ruleOperations) .updateRule( ruleCaptor.capture(), isNull(CharacteristicDto.class), isNull(String.class), isNull(String.class), isNull(String.class), eq(session)); verify(ruleDao).selectEnabledAndNonManual(session); verify(session).commit(); }