protected void setUpRuntimeData(DecisionRequirementsDefinition mockDecisionRequirementsDefinition) throws FileNotFoundException, URISyntaxException { repositoryServiceMock = mock(RepositoryService.class); when(processEngine.getRepositoryService()).thenReturn(repositoryServiceMock); when(repositoryServiceMock.getDecisionRequirementsDefinition(eq(MockProvider.EXAMPLE_DECISION_REQUIREMENTS_DEFINITION_ID))).thenReturn(mockDecisionRequirementsDefinition); when(repositoryServiceMock.getDecisionRequirementsModel(eq(MockProvider.EXAMPLE_DECISION_REQUIREMENTS_DEFINITION_ID))).thenReturn(createMockDecisionRequirementsDefinitionDmnXml()); when(repositoryServiceMock.getDecisionRequirementsDiagram(MockProvider.EXAMPLE_DECISION_REQUIREMENTS_DEFINITION_ID)).thenReturn(createMockDecisionRequirementsDiagram()); decisionRequirementsDefinitionQueryMock = mock(DecisionRequirementsDefinitionQuery.class); when(decisionRequirementsDefinitionQueryMock.decisionRequirementsDefinitionKey(MockProvider.EXAMPLE_DECISION_REQUIREMENTS_DEFINITION_KEY)).thenReturn(decisionRequirementsDefinitionQueryMock); when(decisionRequirementsDefinitionQueryMock.tenantIdIn(anyString())).thenReturn(decisionRequirementsDefinitionQueryMock); when(decisionRequirementsDefinitionQueryMock.withoutTenantId()).thenReturn(decisionRequirementsDefinitionQueryMock); when(decisionRequirementsDefinitionQueryMock.latestVersion()).thenReturn(decisionRequirementsDefinitionQueryMock); when(decisionRequirementsDefinitionQueryMock.singleResult()).thenReturn(mockDecisionRequirementsDefinition); when(decisionRequirementsDefinitionQueryMock.list()).thenReturn(Collections.singletonList(mockDecisionRequirementsDefinition)); when(repositoryServiceMock.createDecisionRequirementsDefinitionQuery()).thenReturn(decisionRequirementsDefinitionQueryMock); }
@Test public void queryAuthenticatedTenant() { identityService.setAuthentication("user", null, Arrays.asList(TENANT_ONE)); DecisionRequirementsDefinitionQuery query = repositoryService.createDecisionRequirementsDefinitionQuery(); assertThat(query.count(), is(2L)); assertThat(query.tenantIdIn(TENANT_ONE).count(), is(1L)); assertThat(query.tenantIdIn(TENANT_TWO).count(), is(0L)); assertThat(query.tenantIdIn(TENANT_ONE, TENANT_TWO).includeDecisionRequirementsDefinitionsWithoutTenantId().count(), is(2L)); }
@Test public void queryByTenantId() { DecisionRequirementsDefinitionQuery query = repositoryService .createDecisionRequirementsDefinitionQuery() .tenantIdIn(TENANT_ONE); assertThat(query.count(), is(1L)); query = repositoryService. createDecisionRequirementsDefinitionQuery() .tenantIdIn(TENANT_TWO); assertThat(query.count(), is(1L)); }
@Override public DecisionRequirementsDefinitionResource getDecisionRequirementsDefinitionByKeyAndTenantId(String decisionRequirementsDefinitionKey, String tenantId) { DecisionRequirementsDefinition decisionRequirementsDefinition = getProcessEngine().getRepositoryService() .createDecisionRequirementsDefinitionQuery() .decisionRequirementsDefinitionKey(decisionRequirementsDefinitionKey) .tenantIdIn(tenantId).latestVersion().singleResult(); if (decisionRequirementsDefinition == null) { String errorMessage = String.format("No matching decision requirements definition with key: %s and tenant-id: %s", decisionRequirementsDefinitionKey, tenantId); throw new RestException(Status.NOT_FOUND, errorMessage); } else { return getDecisionRequirementsDefinitionById(decisionRequirementsDefinition.getId()); } }
@Override public DecisionRequirementsDefinitionResource getDecisionRequirementsDefinitionByKeyAndTenantId(String decisionRequirementsDefinitionKey, String tenantId) { DecisionRequirementsDefinition decisionRequirementsDefinition = getProcessEngine().getRepositoryService() .createDecisionRequirementsDefinitionQuery() .decisionRequirementsDefinitionKey(decisionRequirementsDefinitionKey) .tenantIdIn(tenantId).latestVersion().singleResult(); if (decisionRequirementsDefinition == null) { String errorMessage = String.format("No matching decision requirements definition with key: %s and tenant-id: %s", decisionRequirementsDefinitionKey, tenantId); throw new RestException(Status.NOT_FOUND, errorMessage); } else { return getDecisionRequirementsDefinitionById(decisionRequirementsDefinition.getId()); } }
@Test public void queryByTenantIds() { DecisionRequirementsDefinitionQuery query = repositoryService .createDecisionRequirementsDefinitionQuery() .tenantIdIn(TENANT_ONE, TENANT_TWO); assertThat(query.count(), is(2L)); }
@Test public void queryByNonExistingTenantId() { DecisionRequirementsDefinitionQuery query = repositoryService .createDecisionRequirementsDefinitionQuery() .tenantIdIn("nonExisting"); assertThat(query.count(), is(0L)); }
@Test public void failQueryByTenantIdNull() { thrown.expect(NullValueException.class); repositoryService.createDecisionRequirementsDefinitionQuery() .tenantIdIn((String) null); }
@Test public void querySortingDesc() { // exclude definitions without tenant id because of database-specific ordering List<DecisionRequirementsDefinition> DecisionRequirementsDefinitions = repositoryService .createDecisionRequirementsDefinitionQuery() .tenantIdIn(TENANT_ONE, TENANT_TWO) .orderByTenantId() .desc() .list(); assertThat(DecisionRequirementsDefinitions.size(), is(2)); assertThat(DecisionRequirementsDefinitions.get(0).getTenantId(), is(TENANT_TWO)); assertThat(DecisionRequirementsDefinitions.get(1).getTenantId(), is(TENANT_ONE)); }
@Test public void queryAuthenticatedTenants() { identityService.setAuthentication("user", null, Arrays.asList(TENANT_ONE, TENANT_TWO)); DecisionRequirementsDefinitionQuery query = repositoryService.createDecisionRequirementsDefinitionQuery(); assertThat(query.count(), is(3L)); assertThat(query.tenantIdIn(TENANT_ONE).count(), is(1L)); assertThat(query.tenantIdIn(TENANT_TWO).count(), is(1L)); assertThat(query.withoutTenantId().count(), is(1L)); }
@Test public void querySortingAsc() { // exclude definitions without tenant id because of database-specific ordering List<DecisionRequirementsDefinition> DecisionRequirementsDefinitions = repositoryService .createDecisionRequirementsDefinitionQuery() .tenantIdIn(TENANT_ONE, TENANT_TWO) .orderByTenantId() .asc() .list(); assertThat(DecisionRequirementsDefinitions.size(), is(2)); assertThat(DecisionRequirementsDefinitions.get(0).getTenantId(), is(TENANT_ONE)); assertThat(DecisionRequirementsDefinitions.get(1).getTenantId(), is(TENANT_TWO)); }
@Test public void queryByTenantIdsIncludeDefinitionsWithoutTenantId() { DecisionRequirementsDefinitionQuery query = repositoryService .createDecisionRequirementsDefinitionQuery() .tenantIdIn(TENANT_ONE) .includeDecisionRequirementsDefinitionsWithoutTenantId(); assertThat(query.count(), is(2L)); query = repositoryService .createDecisionRequirementsDefinitionQuery() .tenantIdIn(TENANT_TWO) .includeDecisionRequirementsDefinitionsWithoutTenantId(); assertThat(query.count(), is(2L)); query = repositoryService .createDecisionRequirementsDefinitionQuery() .tenantIdIn(TENANT_ONE, TENANT_TWO) .includeDecisionRequirementsDefinitionsWithoutTenantId(); assertThat(query.count(), is(3L)); }
@Test public void testQueryAuthenticatedTenant() { DecisionRequirementsDefinition decisionRequirementsDefinition = repositoryService.createDecisionRequirementsDefinitionQuery() .tenantIdIn(TENANT_ONE) .singleResult(); identityService.setAuthentication(USER_ID, null, Arrays.asList(TENANT_ONE)); HistoricDecisionInstanceStatisticsQuery query = historyService. createHistoricDecisionInstanceStatisticsQuery(decisionRequirementsDefinition.getId()); assertThat(query.count(), is(3L)); }
@Test public void decisionRequirementsDefinitionRetrievalByKeyAndTenantId() throws FileNotFoundException, URISyntaxException { DecisionRequirementsDefinition mockDefinition = MockProvider.mockDecisionRequirementsDefinition().tenantId(MockProvider.EXAMPLE_TENANT_ID).build(); setUpRuntimeData(mockDefinition); given() .pathParam("key", MockProvider.EXAMPLE_DECISION_REQUIREMENTS_DEFINITION_KEY) .pathParam("tenant-id", MockProvider.EXAMPLE_TENANT_ID) .then() .expect() .statusCode(Status.OK.getStatusCode()) .body("id", equalTo(MockProvider.EXAMPLE_DECISION_REQUIREMENTS_DEFINITION_ID)) .body("key", equalTo(MockProvider.EXAMPLE_DECISION_REQUIREMENTS_DEFINITION_KEY)) .body("category", equalTo(MockProvider.EXAMPLE_DECISION_REQUIREMENTS_DEFINITION_CATEGORY)) .body("name", equalTo(MockProvider.EXAMPLE_DECISION_REQUIREMENTS_DEFINITION_NAME)) .body("deploymentId", equalTo(MockProvider.EXAMPLE_DEPLOYMENT_ID)) .body("version", equalTo(MockProvider.EXAMPLE_DECISION_REQUIREMENTS_DEFINITION_VERSION)) .body("resource", equalTo(MockProvider.EXAMPLE_DECISION_REQUIREMENTS_DEFINITION_RESOURCE_NAME)) .body("tenantId", equalTo(MockProvider.EXAMPLE_TENANT_ID)) .when() .get(SINGLE_DECISION_REQUIREMENTS_DEFINITION_KEY_AND_TENANT_ID_URL); verify(decisionRequirementsDefinitionQueryMock).tenantIdIn(MockProvider.EXAMPLE_TENANT_ID); verify(repositoryServiceMock).getDecisionRequirementsDefinition(MockProvider.EXAMPLE_DECISION_REQUIREMENTS_DEFINITION_ID); }
@Test public void testQueryNoAuthenticatedTenants() { DecisionRequirementsDefinition decisionRequirementsDefinition = repositoryService.createDecisionRequirementsDefinitionQuery() .tenantIdIn(TENANT_ONE) .singleResult(); identityService.setAuthentication(USER_ID, null, null); HistoricDecisionInstanceStatisticsQuery query = historyService. createHistoricDecisionInstanceStatisticsQuery(decisionRequirementsDefinition.getId()); assertThat(query.count(), is(0L)); }
@Test public void queryByLatestWithTenantIdsIncludeDefinitionsWithoutTenantId() { // deploy a second version without tenant id testRule.deploy(DMN); // deploy a third version for tenant one testRule.deployForTenant(TENANT_ONE, DMN); testRule.deployForTenant(TENANT_ONE, DMN); DecisionRequirementsDefinitionQuery query = repositoryService .createDecisionRequirementsDefinitionQuery() .decisionRequirementsDefinitionKey(DECISION_REQUIREMENTS_DEFINITION_KEY) .latestVersion() .tenantIdIn(TENANT_ONE, TENANT_TWO) .includeDecisionRequirementsDefinitionsWithoutTenantId(); assertThat(query.count(), is(3L)); Map<String, DecisionRequirementsDefinition> definitionsForTenant = getDecisionRequirementsDefinitionsForTenant(query.list()); assertThat(definitionsForTenant.get(TENANT_ONE).getVersion(), is(3)); assertThat(definitionsForTenant.get(TENANT_TWO).getVersion(), is(1)); assertThat(definitionsForTenant.get(null).getVersion(), is(2)); }
@Test public void queryByLatestWithTenantIds() { // deploy a second version for tenant one testRule.deployForTenant(TENANT_ONE, DMN); DecisionRequirementsDefinitionQuery query = repositoryService .createDecisionRequirementsDefinitionQuery() .decisionRequirementsDefinitionKey(DECISION_REQUIREMENTS_DEFINITION_KEY) .latestVersion() .tenantIdIn(TENANT_ONE, TENANT_TWO) .orderByTenantId() .asc(); // one definition for each tenant assertThat(query.count(), is(2L)); Map<String, DecisionRequirementsDefinition> definitionsForTenant = getDecisionRequirementsDefinitionsForTenant(query.list()); assertThat(definitionsForTenant.get(TENANT_ONE).getVersion(), is(2)); assertThat(definitionsForTenant.get(TENANT_TWO).getVersion(), is(1)); }
@Test public void testQueryDisabledTenantCheck() { DecisionRequirementsDefinition decisionRequirementsDefinition = repositoryService.createDecisionRequirementsDefinitionQuery() .tenantIdIn(TENANT_ONE) .singleResult(); engineRule.getProcessEngineConfiguration().setTenantCheckEnabled(false); identityService.setAuthentication(USER_ID, null, null); HistoricDecisionInstanceStatisticsQuery query = historyService. createHistoricDecisionInstanceStatisticsQuery(decisionRequirementsDefinition.getId()); assertThat(query.count(), is(3L)); }
@Test public void queryByKey() { DecisionRequirementsDefinitionQuery query = repositoryService .createDecisionRequirementsDefinitionQuery() .decisionRequirementsDefinitionKey(DECISION_REQUIREMENTS_DEFINITION_KEY); // one definition for each tenant assertThat(query.count(), is(3L)); query = repositoryService .createDecisionRequirementsDefinitionQuery() .decisionRequirementsDefinitionKey(DECISION_REQUIREMENTS_DEFINITION_KEY) .withoutTenantId(); // one definition without tenant id assertThat(query.count(), is(1L)); query = repositoryService .createDecisionRequirementsDefinitionQuery() .decisionRequirementsDefinitionKey(DECISION_REQUIREMENTS_DEFINITION_KEY) .tenantIdIn(TENANT_ONE); // one definition for tenant one assertThat(query.count(), is(1L)); }
@Test public void testDecisionRequirementDefinitionTenantIdList() { List<DecisionRequirementsDefinition> decisionRequirementsDefinitions = Arrays.asList( MockProvider.mockDecisionRequirementsDefinition().tenantId(MockProvider.EXAMPLE_TENANT_ID).build(), MockProvider.createAnotherMockDecisionRequirementsDefinition()); mockedQuery = createMockQuery(decisionRequirementsDefinitions); Response response = given() .queryParam("tenantIdIn", MockProvider.EXAMPLE_TENANT_ID_LIST) .then().expect() .statusCode(Status.OK.getStatusCode()) .when() .get(DECISION_REQUIREMENTS_DEFINITION_QUERY_URL); verify(mockedQuery).tenantIdIn(MockProvider.EXAMPLE_TENANT_ID, MockProvider.ANOTHER_EXAMPLE_TENANT_ID); verify(mockedQuery).list(); String content = response.asString(); List<String> definitions = from(content).getList(""); assertThat(definitions).hasSize(2); String returnedTenantId1 = from(content).getString("[0].tenantId"); String returnedTenantId2 = from(content).getString("[1].tenantId"); assertThat(returnedTenantId1).isEqualTo(MockProvider.EXAMPLE_TENANT_ID); assertThat(returnedTenantId2).isEqualTo(MockProvider.ANOTHER_EXAMPLE_TENANT_ID); }