Skip to content
Snippets Groups Projects
Commit d98d58ec authored by Ritchie Nithoo's avatar Ritchie Nithoo
Browse files

[US FOX-264] Add method to get rule duration based on rule identifier

parent 6987ea53
No related branches found
No related tags found
1 merge request!1Feature/design/1
...@@ -37,26 +37,40 @@ ...@@ -37,26 +37,40 @@
package fr.gouv.vitamui.commons.vitam.api.administration; package fr.gouv.vitamui.commons.vitam.api.administration;
import java.io.InputStream; import java.io.InputStream;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import fr.gouv.vitam.access.external.client.AdminExternalClient; import fr.gouv.vitam.access.external.client.AdminExternalClient;
import fr.gouv.vitam.access.external.common.exception.AccessExternalClientException; import fr.gouv.vitam.access.external.common.exception.AccessExternalClientException;
import fr.gouv.vitam.common.client.VitamContext; import fr.gouv.vitam.common.client.VitamContext;
import fr.gouv.vitam.common.database.builder.query.QueryHelper;
import fr.gouv.vitam.common.database.builder.request.exception.InvalidCreateOperationException;
import fr.gouv.vitam.common.database.builder.request.single.Select;
import fr.gouv.vitam.common.exception.InvalidParseOperationException; import fr.gouv.vitam.common.exception.InvalidParseOperationException;
import fr.gouv.vitam.common.exception.VitamClientException; import fr.gouv.vitam.common.exception.VitamClientException;
import fr.gouv.vitam.common.model.RequestResponse; import fr.gouv.vitam.common.model.RequestResponse;
import fr.gouv.vitam.common.model.administration.FileRulesModel; import fr.gouv.vitam.common.model.administration.FileRulesModel;
import fr.gouv.vitamui.commons.api.exception.UnexpectedDataException;
import fr.gouv.vitamui.commons.vitam.api.dto.RuleNodeResponseDto;
import fr.gouv.vitamui.commons.vitam.api.model.RuleMeasurementEnum;
public class RuleService { public class RuleService {
private final AdminExternalClient adminExternalClient; private final AdminExternalClient adminExternalClient;
private ObjectMapper objectMapper;
@Autowired @Autowired
public RuleService(final AdminExternalClient adminExternalClient) { public RuleService(final AdminExternalClient adminExternalClient) {
this.adminExternalClient = adminExternalClient; this.adminExternalClient = adminExternalClient;
objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
} }
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
...@@ -68,4 +82,24 @@ public class RuleService { ...@@ -68,4 +82,24 @@ public class RuleService {
public RequestResponse<FileRulesModel> findRules(final VitamContext vitamContext, final JsonNode select) throws VitamClientException { public RequestResponse<FileRulesModel> findRules(final VitamContext vitamContext, final JsonNode select) throws VitamClientException {
return adminExternalClient.findRules(vitamContext, select); return adminExternalClient.findRules(vitamContext, select);
} }
public Optional<Long> findRulesDurationByRuleId(final VitamContext vitamContext, final String ruleId)
throws VitamClientException, InvalidCreateOperationException, JsonProcessingException {
final Select select = new Select();
select.setQuery(QueryHelper.eq("RuleId", ruleId));
RequestResponse<FileRulesModel> rulesVitamResponse =
this.findRules(vitamContext, select.getFinalSelect());
if (rulesVitamResponse.isOk()) {
RuleNodeResponseDto ruleNodeResponseDto = objectMapper
.treeToValue(rulesVitamResponse.toJsonNode(), RuleNodeResponseDto.class);
FileRulesModel rule = ruleNodeResponseDto.getResults().get(0);
if (RuleMeasurementEnum.YEAR.equals(RuleMeasurementEnum.getEnumFromType(rule.getRuleMeasurement()))) {
return Optional.of(Long.parseLong(rule.getRuleDuration()));
}
else {
throw new UnexpectedDataException("The rule duration measurement should be in years.");
}
}
return Optional.empty();
}
} }
package fr.gouv.vitamui.commons.vitam.api.administration;
import static org.mockito.Mockito.when;
import java.util.Optional;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import fr.gouv.vitam.access.external.client.AdminExternalClient;
import fr.gouv.vitam.common.client.VitamContext;
import fr.gouv.vitam.common.database.builder.request.exception.InvalidCreateOperationException;
import fr.gouv.vitam.common.exception.VitamClientException;
import fr.gouv.vitam.common.model.RequestResponseOK;
import fr.gouv.vitam.common.model.administration.FileRulesModel;
import fr.gouv.vitamui.commons.api.exception.UnexpectedDataException;
import fr.gouv.vitamui.commons.vitam.api.model.RuleMeasurementEnum;
public class RuleServiceTest {
@Mock
private AdminExternalClient adminExternalClient;
@InjectMocks
private RuleService ruleService;
private static final String RULE_ID = "FC-1";
private static final int TENANT_IDENTIFIER = 9;
private static final Long RULE_DURATION = 10L;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testfindRulesDurationByRuleId() throws VitamClientException, JsonProcessingException, InvalidCreateOperationException {
// Prepare
final var fileRule = buildFileRuleModel(RuleMeasurementEnum.YEAR);
final var requestResponseOk = new RequestResponseOK<FileRulesModel>().addResult(fileRule);
when(adminExternalClient.findRules(Mockito.any(VitamContext.class), Mockito.any(JsonNode.class))).thenReturn(requestResponseOk);
// Do
Optional<Long> ruleDuration = ruleService.findRulesDurationByRuleId(new VitamContext(TENANT_IDENTIFIER), RULE_ID);
// Verify
Assertions.assertTrue(ruleDuration.isPresent(), "The rule duration should be present");
Assertions.assertEquals(RULE_DURATION, ruleDuration.get(), "The rule duration value should match the duration");
}
@Test
public void testfindRulesDurationByRuleId_with_rule_duration_in_months()
throws VitamClientException, JsonProcessingException, InvalidCreateOperationException {
// Prepare
final var fileRule = buildFileRuleModel(RuleMeasurementEnum.MONTH);
final var requestResponseOk = new RequestResponseOK<FileRulesModel>().addResult(fileRule);
when(adminExternalClient.findRules(Mockito.any(VitamContext.class), Mockito.any(JsonNode.class))).thenReturn(requestResponseOk);
// Do and Verify
var thrownException = Assertions.assertThrows(UnexpectedDataException.class, () -> {
ruleService.findRulesDurationByRuleId(new VitamContext(TENANT_IDENTIFIER), RULE_ID);
});
Assertions.assertEquals("The rule duration measurement should be in years.", thrownException.getMessage(),
"The exception message should match");
}
@After
public void destroy() {
ruleService = null;
adminExternalClient = null;
}
private static FileRulesModel buildFileRuleModel(RuleMeasurementEnum ruleMeasurementEnum) {
final var rule = new FileRulesModel();
rule.setRuleId(RULE_ID);
rule.setRuleDuration(RULE_DURATION.toString());
rule.setRuleMeasurement(ruleMeasurementEnum.getType());
return rule;
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment