From e5b3863499f7a8c2c49b22407360e51f011db0fe Mon Sep 17 00:00:00 2001 From: Hechmi Dammak Date: Thu, 31 Aug 2023 11:36:34 +0100 Subject: [PATCH] ALFREDAPI-531 fix facet qname splitting (cherry picked from commit 62f86f838d9532c00170888c4a9f3124481deb40) --- CHANGELOG.md | 1 + .../search/SearchFacetsServiceImpl.java | 6 +-- .../search/SearchFacetServiceUnitTest.java | 54 +++++++++++++++---- 3 files changed, 47 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a64e98a..1786c4be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Changed ### Fixed +* [ALFREDAPI-531](https://xenitsupport.jira.com/browse/ALFREDAPI-531): Fix facet qname splitting for dates * [ALFREDAPI-520](https://xenitsupport.jira.com/browse/ALFREDAPI-520): Enforce encoding on bulk json responses to guarantee clean text ### Removed diff --git a/apix-impl/src/main/java/eu/xenit/apix/alfresco/search/SearchFacetsServiceImpl.java b/apix-impl/src/main/java/eu/xenit/apix/alfresco/search/SearchFacetsServiceImpl.java index 6201ee3a..cc505c9e 100644 --- a/apix-impl/src/main/java/eu/xenit/apix/alfresco/search/SearchFacetsServiceImpl.java +++ b/apix-impl/src/main/java/eu/xenit/apix/alfresco/search/SearchFacetsServiceImpl.java @@ -248,8 +248,8 @@ private Map> getFacetResults(SearchParameters sp // facetTokenName => @{http://www.alfresco.org/model/content/1.0}created // qName => {http://www.alfresco.org/model/content/1.0}created // 7 => {!afts} - key = key.substring(7); - String facetTokenName = key.substring(0, key.lastIndexOf(':')); + key = key.replace("{!afts}",""); + String facetTokenName = key.substring(0, key.indexOf(":[")); String qName = facetTokenToQname(facetTokenName); // Retrieve the previous facet queries @@ -260,7 +260,7 @@ private Map> getFacetResults(SearchParameters sp // Get the handler for this qName FacetLabelDisplayHandler handler = facetLabelDisplayHandlerRegistry.getDisplayHandler(facetTokenName); - String val = key.substring(key.indexOf('}') + key.substring(key.indexOf('}')).indexOf(':') + 1); + String val = key.substring( key.indexOf(":[") + 1); FacetLabel facetLabel = (handler == null) ? new FacetLabel(val, val, -1) : handler.getDisplayLabel(key); // See if we have a nice textual version of this label diff --git a/apix-impl/src/test/java/eu/xenit/apix/tests/search/SearchFacetServiceUnitTest.java b/apix-impl/src/test/java/eu/xenit/apix/tests/search/SearchFacetServiceUnitTest.java index 1a5f9670..f871bb21 100644 --- a/apix-impl/src/test/java/eu/xenit/apix/tests/search/SearchFacetServiceUnitTest.java +++ b/apix-impl/src/test/java/eu/xenit/apix/tests/search/SearchFacetServiceUnitTest.java @@ -1,21 +1,11 @@ package eu.xenit.apix.tests.search; -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - import eu.xenit.apix.alfresco.search.SearchFacetsService; import eu.xenit.apix.alfresco.search.SearchFacetsServiceImpl; import eu.xenit.apix.search.FacetSearchResult; import eu.xenit.apix.search.FacetSearchResult.FacetValue; import eu.xenit.apix.search.SearchQuery.FacetOptions; import eu.xenit.apix.translation.ITranslationService; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - import org.alfresco.repo.dictionary.constraint.ListOfValuesConstraint; import org.alfresco.repo.search.impl.solr.facet.SolrFacetHelper; import org.alfresco.repo.search.impl.solr.facet.SolrFacetService; @@ -34,6 +24,17 @@ import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + public class SearchFacetServiceUnitTest { @Autowired @@ -110,7 +111,11 @@ public void initMocks() { .thenReturn(languageFieldFacetResults); when(resultSetMock.getFieldFacet("@{http://test.apix.xenit.eu/model/content}documentStatus")) .thenReturn(documentStatusFieldFacetResults); - when(resultSetMock.getFacetQueries()).thenReturn(new HashMap()); + Map facetQueries = new HashMap<>(); + facetQueries.put("{!afts}@{http://www.alfresco.org/model/content/1.0}content.size:[0 TO 10240]", 1); + facetQueries.put("{!afts}@{http://www.alfresco.org/model/content/1.0}modified:[NOW/DAY-1YEAR TO NOW/DAY+1DAY]", 2); + facetQueries.put("{!afts}@{http://www.alfresco.org/model/content/1.0}created:[2020-08-31T07:00:00.000Z TO 2023-09-02T10:01:00.000Z]", 1); + when(resultSetMock.getFacetQueries()).thenReturn(facetQueries); searchParametersMock = mock(SearchParameters.class); List fieldFacets = new ArrayList<>(); @@ -145,6 +150,33 @@ public List initExpectedResult_for_assertThat_getFacetResults documentStatusValues.add(draftFacetValue); documentStatusResult.setValues(documentStatusValues); expectedResult.add(documentStatusResult); + FacetSearchResult contentResult = new FacetSearchResult(); + contentResult.setName("{http://www.alfresco.org/model/content/1.0}content.size"); + List contentValues = new ArrayList<>(); + FacetValue contentFacetValue = new FacetValue(); + contentFacetValue.setValue("[0 TO 10240]"); + contentFacetValue.setCount(1); + contentValues.add(contentFacetValue); + contentResult.setValues(contentValues); + expectedResult.add(contentResult); + FacetSearchResult modifiedResult = new FacetSearchResult(); + modifiedResult.setName("{http://www.alfresco.org/model/content/1.0}modified"); + List modifiedValues = new ArrayList<>(); + FacetValue modifiedFacetValue = new FacetValue(); + modifiedFacetValue.setValue("[NOW/DAY-1YEAR TO NOW/DAY+1DAY]"); + modifiedFacetValue.setCount(2); + modifiedValues.add(modifiedFacetValue); + modifiedResult.setValues(modifiedValues); + expectedResult.add(modifiedResult); + FacetSearchResult createdResult = new FacetSearchResult(); + createdResult.setName("{http://www.alfresco.org/model/content/1.0}created"); + List createdValues = new ArrayList<>(); + FacetValue createdFacetValue = new FacetValue(); + createdFacetValue.setValue("[2020-08-31T07:00:00.000Z TO 2023-09-02T10:01:00.000Z]"); + createdFacetValue.setCount(1); + createdValues.add(createdFacetValue); + createdResult.setValues(createdValues); + expectedResult.add(createdResult); return expectedResult; }