mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 05:01:07 +00:00
CE-1402 Fix (with test) applying field filter behaviors
This commit is contained in:
@ -159,6 +159,7 @@ public class ValueBehaviorApplier
|
||||
}
|
||||
}
|
||||
|
||||
QFilterCriteria criteriaToUse = criteria;
|
||||
if(field != null)
|
||||
{
|
||||
for(FieldBehavior<?> fieldBehavior : CollectionUtils.nonNullCollection(field.getBehaviors()))
|
||||
@ -175,23 +176,20 @@ public class ValueBehaviorApplier
|
||||
// call to apply the behavior on the criteria - which will return a //
|
||||
// new criteria if any values are changed, else the input criteria //
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
QFilterCriteria newCriteria = apply(criteria, instance, table, field, filterBehavior);
|
||||
criteriaToUse = apply(criteriaToUse, instance, table, field, filterBehavior);
|
||||
|
||||
if(newCriteria != criteria)
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// if the new criteria is not the same as the old criteria, mark that we need to make and return a clone. //
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
if(criteriaToUse != criteria)
|
||||
{
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// if the new criteria is not the same as the old criteria, mark that we need to make and return a clone. //
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
newCriteriaList.add(newCriteria);
|
||||
needToUseClone = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
newCriteriaList.add(criteria);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
newCriteriaList.add(criteriaToUse);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -22,6 +22,7 @@
|
||||
package com.kingsrook.qqq.backend.core.actions.values;
|
||||
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
@ -35,6 +36,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.CaseChangeBehavior;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldBehavior;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldDisplayBehavior;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldFilterBehavior;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||
@ -314,11 +316,87 @@ class ValueBehaviorApplierTest extends BaseTest
|
||||
assertEquals("square", hasCriteriaAndSubFilterUpdated.getCriteria().get(0).getValues().get(0));
|
||||
assertEquals("circle", hasCriteriaAndSubFilterUpdated.getSubFilters().get(0).getCriteria().get(0).getValues().get(0));
|
||||
|
||||
QQueryFilter hasMultiValueCriteriaToUpdate = new QQueryFilter().withCriteria(new QFilterCriteria("name", QCriteriaOperator.EQUALS, "Triangle", "Square"));
|
||||
QQueryFilter hasMultiValueCriteriaToUpdate = new QQueryFilter().withCriteria(new QFilterCriteria("name", QCriteriaOperator.IN, "Triangle", "Square"));
|
||||
QQueryFilter hasMultiValueCriteriaUpdated = ValueBehaviorApplier.applyFieldBehaviorsToFilter(qInstance, table, hasMultiValueCriteriaToUpdate, null);
|
||||
assertNotSame(hasMultiValueCriteriaToUpdate, hasMultiValueCriteriaUpdated);
|
||||
assertEquals(List.of("triangle", "square"), hasMultiValueCriteriaUpdated.getCriteria().get(0).getValues());
|
||||
assertEquals(hasMultiValueCriteriaToUpdate.getSubFilters(), hasMultiValueCriteriaUpdated.getSubFilters());
|
||||
|
||||
QQueryFilter hasMultipleCriteriaOnlyToUpdate = new QQueryFilter()
|
||||
.withCriteria(new QFilterCriteria("name", QCriteriaOperator.EQUALS, "Square"))
|
||||
.withCriteria(new QFilterCriteria("id", QCriteriaOperator.IS_NOT_BLANK));
|
||||
|
||||
QQueryFilter hasMultipleCriteriaOnlyOneUpdated = ValueBehaviorApplier.applyFieldBehaviorsToFilter(qInstance, table, hasMultipleCriteriaOnlyToUpdate, null);
|
||||
assertNotSame(hasMultipleCriteriaOnlyToUpdate, hasMultipleCriteriaOnlyOneUpdated);
|
||||
assertEquals(2, hasMultipleCriteriaOnlyOneUpdated.getCriteria().size());
|
||||
assertEquals(List.of("square"), hasMultipleCriteriaOnlyOneUpdated.getCriteria().get(0).getValues());
|
||||
assertEquals(hasMultipleCriteriaOnlyToUpdate.getSubFilters(), hasMultipleCriteriaOnlyOneUpdated.getSubFilters());
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
// set 2 behaviors on the field - make sure both happen //
|
||||
//////////////////////////////////////////////////////////
|
||||
field.setBehaviors(Set.of(CaseChangeBehavior.TO_LOWER_CASE, new AppendSomethingBehavior("-x")));
|
||||
QQueryFilter criteriaValueToUpdateTwice = new QQueryFilter().withCriteria(new QFilterCriteria("name", QCriteriaOperator.EQUALS, "Triangle"));
|
||||
QQueryFilter criteriaValueUpdatedTwice = ValueBehaviorApplier.applyFieldBehaviorsToFilter(qInstance, table, criteriaValueToUpdateTwice, null);
|
||||
assertNotSame(criteriaValueToUpdateTwice, criteriaValueUpdatedTwice);
|
||||
assertEquals("triangle-x", criteriaValueUpdatedTwice.getCriteria().get(0).getValues().get(0));
|
||||
assertEquals(criteriaValueToUpdateTwice.getSubFilters(), criteriaValueUpdatedTwice.getSubFilters());
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
***************************************************************************/
|
||||
public static class AppendSomethingBehavior implements FieldBehavior<AppendSomethingBehavior>, FieldFilterBehavior<AppendSomethingBehavior>
|
||||
{
|
||||
private String something;
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** Constructor
|
||||
**
|
||||
*******************************************************************************/
|
||||
public AppendSomethingBehavior(String something)
|
||||
{
|
||||
this.something = something;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
***************************************************************************/
|
||||
@Override
|
||||
public Serializable applyToFilterCriteriaValue(Serializable value, QInstance instance, QTableMetaData table, QFieldMetaData field)
|
||||
{
|
||||
return value + something;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
***************************************************************************/
|
||||
@Override
|
||||
public AppendSomethingBehavior getDefault()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
***************************************************************************/
|
||||
@Override
|
||||
public void apply(ValueBehaviorApplier.Action action, List<QRecord> recordList, QInstance instance, QTableMetaData table, QFieldMetaData field)
|
||||
{
|
||||
//////////
|
||||
// noop //
|
||||
//////////
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user