@Test
public void testExecuteReportOneContractMoreRolesWithValidity() throws JsonParseException, JsonMappingException, IOException {

	String roleCode = "test-" + System.currentTimeMillis(); 
	IdmTreeNodeDto treeNode = getHelper().createTreeNode();
	IdmIdentityDto identity = getHelper().createIdentity(new GuardedString());
	IdmIdentityContractDto contact = getHelper().createContract(identity, treeNode);
	
	IdmRoleDto role = getHelper().createRole(roleCode);
	getHelper().createIdentityRole(contact, role, LocalDate.now().minusDays(40), LocalDate.now().plusDays(40));
	getHelper().createIdentityRole(contact, role, LocalDate.now().minusDays(30), LocalDate.now().plusDays(30));
	getHelper().createIdentityRole(contact, role, LocalDate.now().minusDays(20), LocalDate.now().plusDays(20));
	getHelper().createIdentityRole(contact, role, LocalDate.now().minusDays(10), LocalDate.now().plusDays(10));
	RptReportDto report = new RptReportDto(UUID.randomUUID());
	report.setExecutorName(reportExecutor.getName());
	IdmFormDto filter = new IdmFormDto();
	IdmFormDefinitionDto definition = reportExecutor.getFormDefinition();
	IdmFormValueDto treeNodeParameter = new IdmFormValueDto(definition.getMappedAttributeByCode(IdentityRoleByIdentityDeduplicationExecutor.PARAMETER_TREE_NODE));
	treeNodeParameter.setValue(treeNode.getId());
	filter.getValues().add(treeNodeParameter);
	filter.setFormDefinition(definition.getId());
	report.setFilter(filter);
	report = reportExecutor.generate(report);
	Assert.assertNotNull(report.getData());
	List<RptIdentityRoleByRoleDeduplicationDto> reportItems = mapper.readValue(
			attachmentManager.getAttachmentData(report.getData()), 
			new TypeReference<List<RptIdentityRoleByRoleDeduplicationDto>>(){});
	assertEquals(1, reportItems.size());
	RptIdentityRoleByRoleDeduplicationDto item = reportItems.get(0);
	List<RptIdentityRoleByRoleDeduplicationDuplicityDto> duplicities = item.getDuplicity();
	assertEquals(3, duplicities.size());
	for (RptIdentityRoleByRoleDeduplicationDuplicityDto duplicity : duplicities) {
		assertEquals(role.getId(), duplicity.getRole().getId());
		if (duplicity.getValidTill().isEqual(duplicity.getValidFrom())) {
			fail();
		}
		if (!duplicity.getValidTill().isBefore(LocalDate.now().plusDays(35))) {
			fail();
		}
		if (!duplicity.getValidFrom().isAfter(LocalDate.now().minusDays(35))) {
			fail();
		}
	}
	attachmentManager.deleteAttachments(report);
}