diff --git a/opengrok-indexer/src/main/java/org/opengrok/indexer/web/SortOrder.java b/opengrok-indexer/src/main/java/org/opengrok/indexer/web/SortOrder.java index 806175341b1..4cd13e67065 100644 --- a/opengrok-indexer/src/main/java/org/opengrok/indexer/web/SortOrder.java +++ b/opengrok-indexer/src/main/java/org/opengrok/indexer/web/SortOrder.java @@ -19,7 +19,7 @@ /* * Copyright (c) 2011, Jens Elkner. - * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2025, Oracle and/or its affiliates. All rights reserved. */ package org.opengrok.indexer.web; @@ -37,6 +37,7 @@ public enum SortOrder { RELEVANCY("relevancy", "relevance"), /** sort by path. */ BY_PATH("fullpath", "path"); + private final String name; private final String desc; @@ -53,7 +54,7 @@ public enum SortOrder { * @see #toString() */ public static SortOrder get(String name) { - if (name == null || name.length() == 0) { + if (name == null || name.isEmpty()) { return null; } for (SortOrder s : values()) { @@ -74,7 +75,7 @@ public String toString() { } /** - * A more user friendly description (UI name) of the sort order. + * A more user-friendly description (UI name) of the sort order. * @return a very short description. */ public String getDesc() { diff --git a/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java b/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java index f527e95ee1a..b1543cad7c2 100644 --- a/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java +++ b/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java @@ -129,6 +129,9 @@ public class PageConfig { private static final String HISTORY_JSP_ATTR_NAME = "history.jsp-hist"; + @VisibleForTesting + static final String SORTING_COOKIE_NAME = "OpenGrokSorting"; + // query parameters static final String PROJECT_PARAM_NAME = "project"; static final String GROUP_PARAM_NAME = "group"; @@ -627,7 +630,7 @@ public List getSortOrder() { } } if (sort.isEmpty()) { - vals = getCookieVals("OpenGrokSorting"); + vals = getCookieVals(SORTING_COOKIE_NAME); for (String s : vals) { SortOrder so = SortOrder.get(s); if (so != null) { diff --git a/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java b/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java index bc31529a3c6..6d7ace258b6 100644 --- a/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java +++ b/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java @@ -38,6 +38,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.ws.rs.core.HttpHeaders; @@ -66,6 +67,7 @@ import org.opengrok.indexer.util.TestRepository; import org.opengrok.indexer.web.DummyHttpServletRequest; import org.opengrok.indexer.web.QueryParameters; +import org.opengrok.indexer.web.SortOrder; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -816,7 +818,7 @@ public String getParameter(String name) { @Override public String[] getParameterValues(String name) { if (name.equals(QueryBuilder.PROJECT)) { - return List.of("").toArray(new String[0]); + return new String[]{"", "project2"}; } return null; @@ -827,8 +829,49 @@ public String[] getParameterValues(String name) { assertEquals("<foo bar> (full), <symbol1> (definition), " + "<symbol2> (reference), <path1> (path), " + "<c6f8b2553cb6bf280acb986b741792d55373de4e> (history) " + - "in projects: <project1>" + + "in projects: <project1>,project2" + " - OpenGrok search results", cfg.getSearchTitle()); } + + @Test + void testGetSortOrderParameter() { + HttpServletRequest req = new DummyHttpServletRequest() { + @Override + public String getPathInfo() { + return "path"; + } + + @Override + public String[] getParameterValues(String name) { + if (name.equals(QueryParameters.SORT_PARAM)) { + return new String[]{SortOrder.LASTMODIFIED.toString(), "invalid"}; + } + + return null; + } + }; + + PageConfig cfg = PageConfig.get(req); + assertEquals(List.of(SortOrder.LASTMODIFIED), cfg.getSortOrder()); + } + + @Test + void testGetSortOrderCookie() { + HttpServletRequest req = new DummyHttpServletRequest() { + @Override + public String getPathInfo() { + return "path"; + } + + @Override + public Cookie[] getCookies() { + return new Cookie[]{new Cookie(PageConfig.SORTING_COOKIE_NAME, SortOrder.LASTMODIFIED.toString()), + new Cookie(PageConfig.SORTING_COOKIE_NAME, "invalid")}; + } + }; + + PageConfig cfg = PageConfig.get(req); + assertEquals(List.of(SortOrder.LASTMODIFIED), cfg.getSortOrder()); + } }