mirror of https://github.com/halo-dev/halo
fix: single page does not count visits (#2918)
#### What type of PR is this? /kind bug /area core #### What this PR does / why we need it: 修复自定义页面没有统计访问量的问题 #### Which issue(s) this PR fixes: Fixes #2912 #### Special notes for your reviewer: how to test it? 创建自定义页面并到主题端访问,可以看到访问量增加 /cc @halo-dev/sig-halo #### Does this PR introduce a user-facing change? ```release-note 修复自定义页面没有统计访问量的问题 ```pull/2919/head^2
parent
d06078893e
commit
52906f21c1
|
@ -42,6 +42,7 @@ public class SinglePageRouteStrategy implements DetailsPageRouteHandlerStrategy
|
||||||
String name) {
|
String name) {
|
||||||
return request -> {
|
return request -> {
|
||||||
Map<String, Object> model = new HashMap<>();
|
Map<String, Object> model = new HashMap<>();
|
||||||
|
model.put("name", name);
|
||||||
model.put("groupVersionKind", gvk);
|
model.put("groupVersionKind", gvk);
|
||||||
model.put("plural", getPlural());
|
model.put("plural", getPlural());
|
||||||
model.put(ModelConst.TEMPLATE_ID, DefaultTemplateEnum.SINGLE_PAGE.getValue());
|
model.put(ModelConst.TEMPLATE_ID, DefaultTemplateEnum.SINGLE_PAGE.getValue());
|
||||||
|
|
|
@ -1,21 +1,30 @@
|
||||||
package run.halo.app.theme.router.strategy;
|
package run.halo.app.theme.router.strategy;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.lenient;
|
import static org.mockito.Mockito.lenient;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
import static run.halo.app.theme.DefaultTemplateEnum.SINGLE_PAGE;
|
import static run.halo.app.theme.DefaultTemplateEnum.SINGLE_PAGE;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.InjectMocks;
|
import org.mockito.InjectMocks;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.test.web.reactive.server.WebTestClient;
|
import org.springframework.test.web.reactive.server.WebTestClient;
|
||||||
import org.springframework.web.reactive.function.server.RouterFunction;
|
import org.springframework.web.reactive.function.server.RouterFunction;
|
||||||
import org.springframework.web.reactive.function.server.ServerResponse;
|
import org.springframework.web.reactive.function.server.ServerResponse;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
import run.halo.app.core.extension.content.SinglePage;
|
||||||
|
import run.halo.app.extension.GroupVersionKind;
|
||||||
|
import run.halo.app.extension.Metadata;
|
||||||
import run.halo.app.theme.finders.SinglePageFinder;
|
import run.halo.app.theme.finders.SinglePageFinder;
|
||||||
|
import run.halo.app.theme.finders.vo.SinglePageVo;
|
||||||
|
import run.halo.app.theme.router.ViewNameResolver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for {@link SinglePageRouteStrategy}.
|
* Tests for {@link SinglePageRouteStrategy}.
|
||||||
|
@ -28,9 +37,13 @@ class SinglePageRouteStrategyTest extends RouterStrategyTestSuite {
|
||||||
@Mock
|
@Mock
|
||||||
private SinglePageFinder singlePageFinder;
|
private SinglePageFinder singlePageFinder;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private ViewNameResolver viewNameResolver;
|
||||||
|
|
||||||
@InjectMocks
|
@InjectMocks
|
||||||
private SinglePageRouteStrategy strategy;
|
private SinglePageRouteStrategy strategy;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
lenient().when(viewResolver.resolveViewName(eq(SINGLE_PAGE.getValue()), any()))
|
lenient().when(viewResolver.resolveViewName(eq(SINGLE_PAGE.getValue()), any()))
|
||||||
|
@ -82,6 +95,43 @@ class SinglePageRouteStrategyTest extends RouterStrategyTestSuite {
|
||||||
.expectStatus().isOk();
|
.expectStatus().isOk();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void ensureModel() {
|
||||||
|
// fix gh-2912
|
||||||
|
Metadata metadata = new Metadata();
|
||||||
|
metadata.setName("fake-name");
|
||||||
|
SinglePageVo singlePageVo = SinglePageVo.builder()
|
||||||
|
.metadata(metadata)
|
||||||
|
.spec(new SinglePage.SinglePageSpec())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
when(singlePageFinder.getByName(eq("fake-name"))).thenReturn(Mono.just(singlePageVo));
|
||||||
|
permalinkHttpGetRouter.insert("/fake-slug",
|
||||||
|
strategy.getHandler(getThemeRouteRules(), "fake-name"));
|
||||||
|
|
||||||
|
when(viewNameResolver.resolveViewNameOrDefault(any(), any(), any()))
|
||||||
|
.thenReturn(Mono.just("page"));
|
||||||
|
when(viewResolver.resolveViewName(eq(SINGLE_PAGE.getValue()), any()))
|
||||||
|
.thenReturn(Mono.just(new EmptyView() {
|
||||||
|
@Override
|
||||||
|
public Mono<Void> render(Map<String, ?> model, MediaType contentType,
|
||||||
|
ServerWebExchange exchange) {
|
||||||
|
assertThat(model.get("name")).isEqualTo("fake-name");
|
||||||
|
assertThat(model.get("plural")).isEqualTo("singlepages");
|
||||||
|
assertThat(model.get("_templateId")).isEqualTo("page");
|
||||||
|
assertThat(model.get("singlePage")).isEqualTo(singlePageVo);
|
||||||
|
assertThat(model.get("groupVersionKind")).isEqualTo(
|
||||||
|
GroupVersionKind.fromExtension(SinglePage.class));
|
||||||
|
return Mono.empty();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
createClient().get()
|
||||||
|
.uri("/fake-slug")
|
||||||
|
.exchange()
|
||||||
|
.expectStatus().isOk()
|
||||||
|
.expectBody();
|
||||||
|
}
|
||||||
|
|
||||||
WebTestClient createClient() {
|
WebTestClient createClient() {
|
||||||
RouterFunction<ServerResponse> routeFunction = getRouterFunction();
|
RouterFunction<ServerResponse> routeFunction = getRouterFunction();
|
||||||
return getWebTestClient(routeFunction);
|
return getWebTestClient(routeFunction);
|
||||||
|
|
Loading…
Reference in New Issue