Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Nov 4, 2015
2 parents 823c2bf + 60b9a69 commit 3f186d9
Show file tree
Hide file tree
Showing 17 changed files with 374 additions and 136 deletions.
2 changes: 1 addition & 1 deletion config/initial-objects/100-report-reconciliation.xml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion config/initial-objects/110-report-user-list.xml

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Expand Up @@ -16,7 +16,10 @@

package com.evolveum.midpoint.model.impl.expr;

import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
import static com.evolveum.midpoint.test.IntegrationTestTools.display;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
Expand All @@ -35,31 +38,41 @@
import com.evolveum.midpoint.model.common.expression.ExpressionFactory;
import com.evolveum.midpoint.model.common.expression.ExpressionUtil;
import com.evolveum.midpoint.model.common.expression.ExpressionVariables;
import com.evolveum.midpoint.model.test.AbstractModelIntegrationTest;
import com.evolveum.midpoint.model.impl.AbstractInternalModelIntegrationTest;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismPropertyValue;
import com.evolveum.midpoint.prism.query.AllFilter;
import com.evolveum.midpoint.prism.query.EqualFilter;
import com.evolveum.midpoint.prism.query.NoneFilter;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.query.QueryJaxbConvertor;
import com.evolveum.midpoint.prism.query.RefFilter;
import com.evolveum.midpoint.prism.query.UndefinedFilter;
import com.evolveum.midpoint.prism.util.PrismAsserts;
import com.evolveum.midpoint.prism.util.PrismTestUtil;
import com.evolveum.midpoint.schema.MidPointPrismContextFactory;
import com.evolveum.midpoint.schema.SearchResultList;
import com.evolveum.midpoint.schema.constants.ExpressionConstants;
import com.evolveum.midpoint.schema.constants.MidPointConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.task.api.TaskManager;
import com.evolveum.midpoint.test.util.TestUtil;
import com.evolveum.midpoint.util.PrettyPrinter;
import com.evolveum.midpoint.util.exception.CommunicationException;
import com.evolveum.midpoint.util.exception.ConfigurationException;
import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SecurityViolationException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType;

@ContextConfiguration(locations = { "classpath:ctx-model-test-main.xml" })
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
public class TestFilterExpression extends AbstractModelIntegrationTest {
public class TestFilterExpression extends AbstractInternalModelIntegrationTest {

private static final String TEST_DIR = "src/test/resources/expr";

Expand All @@ -76,28 +89,62 @@ public void setup() throws SchemaException, SAXException, IOException {
}

@Test
public void testEvaluateExpressionToUndefinedFilter() throws Exception {
final String TEST_NAME = "testEvaluateExpressionToUndefinedFilter";
evaluateExpressionAssertFilter(TEST_NAME, "expression-to-undefined-filter.xml", UndefinedFilter.class);
public void test100EvaluateExpressionEmployeeTypeUndefinedFilter() throws Exception {
final String TEST_NAME = "testEvaluateExpressionEmployeeTypeUndefinedFilter";
TestUtil.displayTestTile(TEST_NAME);

// GIVEN
OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME);
Task task = taskManager.createTaskInstance(TEST_NAME);

ObjectFilter filter = evaluateExpressionAssertFilter("expression-employeeType-undefined-filter.xml",
null, UndefinedFilter.class, task, result);

executeFilter(filter, 5, task, result);
}

@Test
public void testEvaluateExpressionToNoneFilter() throws Exception {
final String TEST_NAME = "testEvaluateExpressionToNoneFilter";
evaluateExpressionAssertFilter(TEST_NAME, "expression-to-none-filter.xml", NoneFilter.class);
public void test110EvaluateExpressionEmployeeTypeNoneFilter() throws Exception {
final String TEST_NAME = "testEvaluateExpressionEmployeeTypeNoneFilter";
TestUtil.displayTestTile(TEST_NAME);

// GIVEN
OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME);
Task task = taskManager.createTaskInstance(TEST_NAME);

ObjectFilter filter = evaluateExpressionAssertFilter("expression-employeeType-none-filter.xml",
null, NoneFilter.class, task, result);

executeFilter(filter, 0, task, result);
}

@Test
public void testEvaluateExpressionToAllFilter() throws Exception {
final String TEST_NAME = "testEvaluateExpressionToAllFilter";
evaluateExpressionAssertFilter(TEST_NAME, "expression-to-all-filter.xml", AllFilter.class);
public void test120EvaluateExpressionEmployeeTypeAllFilter() throws Exception {
final String TEST_NAME = "testEvaluateExpressionEmployeeTypeAllFilter";
TestUtil.displayTestTile(TEST_NAME);

// GIVEN
OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME);
Task task = taskManager.createTaskInstance(TEST_NAME);

ObjectFilter filter = evaluateExpressionAssertFilter("expression-employeeType-all-filter.xml",
null, AllFilter.class, task, result);

executeFilter(filter, 5, task, result);
}

@Test
public void testEvaluateExpressionToError() throws Exception {
final String TEST_NAME = "testEvaluateExpressionToError";
public void test130EvaluateExpressionEmployeeTypeError() throws Exception {
final String TEST_NAME = "testEvaluateExpressionEmployeeTypeError";
TestUtil.displayTestTile(TEST_NAME);

// GIVEN
OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME);
Task task = taskManager.createTaskInstance(TEST_NAME);

try {
evaluateExpressionAssertFilter(TEST_NAME, "expression-to-error.xml", NoneFilter.class);
evaluateExpressionAssertFilter("expression-employeeType-error.xml",
null, NoneFilter.class, task, result);
AssertJUnit.fail("Unexpected success");
} catch (ExpressionEvaluationException e) {
// this is expected
Expand All @@ -107,39 +154,149 @@ public void testEvaluateExpressionToError() throws Exception {


@Test
public void testEvaluateExpressionToEmptyFilter() throws Exception {
final String TEST_NAME = "testEvaluateExpressionToEmptyFilter";
public void test140EvaluateExpressionEmployeeTypeEmptyFilter() throws Exception {
final String TEST_NAME = "testEvaluateExpressionEmployeeTypeEmptyFilter";
TestUtil.displayTestTile(TEST_NAME);

// GIVEN
OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME);
Task task = taskManager.createTaskInstance(TEST_NAME);

ObjectFilter evaluatedFilter = evaluateExpressionAssertFilter(TEST_NAME, "expression-to-empty-filter.xml", EqualFilter.class);
ObjectFilter filter = evaluateExpressionAssertFilter("expression-employeeType-empty-filter.xml",
null, EqualFilter.class, task, result);

EqualFilter equalFilter = (EqualFilter) evaluatedFilter;
EqualFilter equalFilter = (EqualFilter) filter;
AssertJUnit.assertNull("Expected NO values in filter, but found " + equalFilter.getValues(), equalFilter.getValues());

executeFilter(filter, 4, task, result);
}

@Test
public void testEvaluateExpressionDefaults() throws Exception {
final String TEST_NAME = "testEvaluateExpressionDefaults";
public void test150EvaluateExpressionEmployeeTypeDefaultsNull() throws Exception {
final String TEST_NAME = "test150EvaluateExpressionEmployeeTypeDefaultsNull";
TestUtil.displayTestTile(TEST_NAME);

// GIVEN
OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME);
Task task = taskManager.createTaskInstance(TEST_NAME);


ObjectFilter evaluatedFilter = evaluateExpressionAssertFilter(TEST_NAME, "expression-filter-defaults.xml", EqualFilter.class);
ObjectFilter filter = evaluateExpressionAssertFilter("expression-employeeType-filter-defaults.xml",
null, EqualFilter.class, task, result);

EqualFilter equalFilter = (EqualFilter) evaluatedFilter;
EqualFilter equalFilter = (EqualFilter) filter;
AssertJUnit.assertNull("Expected NO values in filter, but found " + equalFilter.getValues(), equalFilter.getValues());

executeFilter(filter, 4, task, result);
}

public ObjectFilter evaluateExpressionAssertFilter(final String TEST_NAME, String filename, Class<? extends ObjectFilter> expectedType) throws SchemaException, IOException, ObjectNotFoundException, ExpressionEvaluationException {
@Test
public void test152EvaluateExpressionEmployeeTypeDefaultsCaptain() throws Exception {
final String TEST_NAME = "test152EvaluateExpressionEmployeeTypeDefaultsCaptain";
TestUtil.displayTestTile(TEST_NAME);
PrismContext prismContext = PrismTestUtil.getPrismContext();

// GIVEN
OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME);
Task task = taskManager.createTaskInstance(TEST_NAME);

ObjectFilter filter = evaluateExpressionAssertFilter("expression-employeeType-filter-defaults.xml",
"CAPTAIN", EqualFilter.class, task, result);

EqualFilter equalFilter = (EqualFilter) filter;
PrismAsserts.assertValues("Wrong values in filter", equalFilter.getValues(), "CAPTAIN");

executeFilter(filter, 1, task, result);
}


@Test
public void test200EvaluateExpressionLinkRefDefaultsNull() throws Exception {
final String TEST_NAME = "test200EvaluateExpressionLinkRefDefaultsNull";
TestUtil.displayTestTile(TEST_NAME);

// GIVEN
OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME);
Task task = taskManager.createTaskInstance(TEST_NAME);

ObjectFilter filter = evaluateExpressionAssertFilter("expression-linkref-filter-defaults.xml",
null, RefFilter.class, task, result);

RefFilter refFilter = (RefFilter) filter;
AssertJUnit.assertNull("Expected NO values in filter, but found " + refFilter.getValues(), refFilter.getValues());

executeFilter(filter, 2, task, result);
}

@Test
public void test202EvaluateExpressionLinkRefObjectReferenceTypeDefaultsNull() throws Exception {
final String TEST_NAME = "test202EvaluateExpressionLinkRefObjectReferenceTypeDefaultsNull";
TestUtil.displayTestTile(TEST_NAME);

// GIVEN
OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME);
Task task = taskManager.createTaskInstance(TEST_NAME);

ObjectFilter filter = evaluateExpressionAssertFilter("expression-linkref-object-reference-type-filter-defaults.xml",
null, RefFilter.class, task, result);

RefFilter refFilter = (RefFilter) filter;
AssertJUnit.assertNull("Expected NO values in filter, but found " + refFilter.getValues(), refFilter.getValues());

executeFilter(filter, 2, task, result);
}

@Test
public void test210EvaluateExpressionLinkRefDefaultsVal() throws Exception {
final String TEST_NAME = "test210EvaluateExpressionLinkRefDefaultsVal";
TestUtil.displayTestTile(TEST_NAME);

// GIVEN
OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME);
Task task = taskManager.createTaskInstance(TEST_NAME);

ObjectFilter filter = evaluateExpressionAssertFilter("expression-linkref-filter-defaults.xml",
ACCOUNT_SHADOW_GUYBRUSH_OID, RefFilter.class, task, result);

RefFilter refFilter = (RefFilter) filter;
assertEquals("Wrong number of values in filter: " + refFilter.getValues(), 1, refFilter.getValues().size());

executeFilter(filter, 1, task, result);
}

@Test
public void test212EvaluateExpressionLinkRefObjectReferenceTypeDefaultsVal() throws Exception {
final String TEST_NAME = "test212EvaluateExpressionLinkRefObjectReferenceTypeDefaultsVal";
TestUtil.displayTestTile(TEST_NAME);

// GIVEN
OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME);
Task task = taskManager.createTaskInstance(TEST_NAME);

ObjectFilter filter = evaluateExpressionAssertFilter("expression-linkref-object-reference-type-filter-defaults.xml",
ACCOUNT_SHADOW_GUYBRUSH_OID, RefFilter.class, task, result);

RefFilter refFilter = (RefFilter) filter;
assertEquals("Wrong number of values in filter: " + refFilter.getValues(), 1, refFilter.getValues().size());

executeFilter(filter, 1, task, result);
}


private ObjectFilter evaluateExpressionAssertFilter(String filename,
String input, Class<? extends ObjectFilter> expectedType,
Task task, OperationResult result) throws SchemaException, IOException, ObjectNotFoundException, ExpressionEvaluationException {
PrismContext prismContext = PrismTestUtil.getPrismContext();

SearchFilterType filterType = PrismTestUtil.parseAtomicValue(new File(TEST_DIR, filename), SearchFilterType.COMPLEX_TYPE);

ObjectFilter filter = QueryJaxbConvertor.createObjectFilter(UserType.class, filterType, prismContext);

Map<QName, Object> params = new HashMap<>();
params.put(UserType.F_NAME, null);
PrismPropertyValue<String> pval = null;
if (input != null) {
pval = new PrismPropertyValue<String>(input);
}
params.put(ExpressionConstants.VAR_INPUT, pval);

ExpressionVariables variables = new ExpressionVariables();
variables.addVariableDefinitions(params);
Expand All @@ -149,9 +306,17 @@ public ObjectFilter evaluateExpressionAssertFilter(final String TEST_NAME, Strin
"evaluating filter with null value not allowed", task, result);

// THEN
display("Evaluated filter", evaluatedFilter);
AssertJUnit.assertTrue("Expression should be evaluated to "+expectedType+", but was "+evaluatedFilter, expectedType.isAssignableFrom(evaluatedFilter.getClass()));

return evaluatedFilter;
}

private void executeFilter(ObjectFilter filter, int expectedNumberOfResults, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException {
ObjectQuery query = ObjectQuery.createObjectQuery(filter);
SearchResultList<PrismObject<UserType>> objects = modelService.searchObjects(UserType.class, query, null, task, result);
display("Found objects", objects);
assertEquals("Wrong number of results (found: "+objects+")", expectedNumberOfResults, objects.size());
}

}
Expand Up @@ -16,11 +16,11 @@
-->

<filter xmlns="http://prism.evolveum.com/xml/ns/public/query-3" xmlns:c='http://midpoint.evolveum.com/xml/ns/public/common/common-3'>
<equal>
<path>name</path>
<c:expression>
<c:queryInterpretationOfNoValue>filterEqualNull</c:queryInterpretationOfNoValue>
<c:path>c:name</c:path>
</c:expression>
</equal>
</filter>
<equal>
<path>name</path>
<c:expression>
<c:queryInterpretationOfNoValue>filterAll</c:queryInterpretationOfNoValue>
<c:path>$input</c:path>
</c:expression>
</equal>
</filter>
Expand Up @@ -15,12 +15,12 @@
~ limitations under the License.
-->

<filter xmlns="http://prism.evolveum.com/xml/ns/public/query-3" xmlns:c='http://midpoint.evolveum.com/xml/ns/public/common/common-3'>
<equal>
<path>name</path>
<c:expression>
<c:queryInterpretationOfNoValue>error</c:queryInterpretationOfNoValue>
<c:path>c:name</c:path>
</c:expression>
</equal>
</filter>
<filter xmlns="http://prism.evolveum.com/xml/ns/public/query-3" xmlns:c='http://midpoint.evolveum.com/xml/ns/public/common/common-3'>
<equal>
<path>employeeType</path>
<c:expression>
<c:queryInterpretationOfNoValue>filterEqualNull</c:queryInterpretationOfNoValue>
<c:path>$input</c:path>
</c:expression>
</equal>
</filter>
Expand Up @@ -15,12 +15,12 @@
~ limitations under the License.
-->

<filter xmlns="http://prism.evolveum.com/xml/ns/public/query-3" xmlns:c='http://midpoint.evolveum.com/xml/ns/public/common/common-3'>
<equal>
<path>name</path>
<c:expression>
<c:queryInterpretationOfNoValue>filterAll</c:queryInterpretationOfNoValue>
<c:path>c:name</c:path>
</c:expression>
</equal>
</filter>
<filter xmlns="http://prism.evolveum.com/xml/ns/public/query-3" xmlns:c='http://midpoint.evolveum.com/xml/ns/public/common/common-3'>
<equal>
<path>employeeType</path>
<c:expression>
<c:queryInterpretationOfNoValue>error</c:queryInterpretationOfNoValue>
<c:path>$input</c:path>
</c:expression>
</equal>
</filter>
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<!--
~ Copyright (c) 2010-2014 Evolveum
~ Copyright (c) 2010-2015 Evolveum
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
Expand All @@ -16,10 +16,10 @@
-->

<filter xmlns="http://prism.evolveum.com/xml/ns/public/query-3" xmlns:c='http://midpoint.evolveum.com/xml/ns/public/common/common-3'>
<equal>
<path>name</path>
<c:expression>
<c:path>c:name</c:path>
</c:expression>
</equal>
</filter>
<equal>
<path>employeeType</path>
<c:expression>
<c:path>$input</c:path>
</c:expression>
</equal>
</filter>

0 comments on commit 3f186d9

Please sign in to comment.