diff --git a/src/main/java/jasper/web/rest/RefController.java b/src/main/java/jasper/web/rest/RefController.java index bfe60d27..33882456 100644 --- a/src/main/java/jasper/web/rest/RefController.java +++ b/src/main/java/jasper/web/rest/RefController.java @@ -22,8 +22,10 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; +import org.springframework.http.CacheControl; import org.springframework.http.HttpEntity; import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -42,6 +44,7 @@ import javax.validation.constraints.Size; import java.time.Instant; import java.util.List; +import java.util.concurrent.TimeUnit; import static jasper.domain.Ref.URL_LEN; import static jasper.domain.proj.HasOrigin.ORIGIN_LEN; @@ -126,6 +129,11 @@ HttpEntity> getRefPage( @RequestParam(required = false) @Size(max = 100) List<@Length(max = TAG_LEN) @Pattern(regexp = Plugin.REGEX) String> noPluginResponse, @RequestParam(required = false) @Length(max = SEARCH_LEN) String search ) { + if ("!@*".equals(query)) { + ResponseEntity.ok() + .cacheControl(CacheControl.maxAge(100, TimeUnit.DAYS).cachePublic()) + .body(Page.empty(pageable)); + } var rankedSort = false; if (pageable.getSort().isUnsorted() || pageable.getSort().getOrderFor("rank") != null) { if (isNotBlank(search)) { diff --git a/src/test/java/jasper/service/RefServiceIT.java b/src/test/java/jasper/service/RefServiceIT.java index 41ede4a8..b4139aa6 100644 --- a/src/test/java/jasper/service/RefServiceIT.java +++ b/src/test/java/jasper/service/RefServiceIT.java @@ -390,6 +390,40 @@ void testGetPageRefWithQuery() { assertThat(page.getTotalElements()) .isEqualTo(1); } + + @Test + void testGetEmptyPageRefWithEmptyQuery() { + refWithTags("public"); + refWithTags("public", "custom", "extra"); + + var page = refService.page( + RefFilter + .builder() + .query("!@*") + .build(), + PageRequest.of(0, 10)); + + assertThat(page.getTotalElements()) + .isEqualTo(0); + } + + @Test + void testGetEmptyPageRefWithEmptyQueryNoTags() { + refWithTags(); + refWithTags("public"); + refWithTags("public", "custom", "extra"); + + var page = refService.page( + RefFilter + .builder() + .query("!@*") + .build(), + PageRequest.of(0, 10)); + + assertThat(page.getTotalElements()) + .isEqualTo(0); + } + @Test void testGetPageRefWithQueryPrivateTagFailed() { refWithTags("public"); @@ -462,6 +496,40 @@ void testGetPageRefWithOriginQuery() { .isEqualTo(1); } + @Test + void testGetEmptyPageRefWithOriginEmptyQuery() { + refWithOriginTags("@a", "public"); + refWithOriginTags("@a", "public", "custom", "extra"); + + var page = refService.page( + RefFilter + .builder() + .query("!@*") + .build(), + PageRequest.of(0, 10)); + + assertThat(page.getTotalElements()) + .isEqualTo(0); + } + + @Test + void testGetEmptyPageRefWithOriginEmptyQueryNoTags() { + refWithOriginTags("@a"); + refWithOriginTags("@b"); + refWithOriginTags("@a", "public"); + refWithOriginTags("@a", "public", "custom", "extra"); + + var page = refService.page( + RefFilter + .builder() + .query("!@*") + .build(), + PageRequest.of(0, 10)); + + assertThat(page.getTotalElements()) + .isEqualTo(0); + } + @Test void testGetPageRefWithOriginOrQuery() { refWithOriginTags("@a", "public", "custom");