-
-
Notifications
You must be signed in to change notification settings - Fork 9.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: posts and pages cannot be counted for visits (#3471)
#### What type of PR is this? /kind bug /area core /milestone 2.3.x #### What this PR does / why we need it: 修复文章和自定义页面缺失 name 模型属性导致的访问量无法计数问题 此为 2.3.0 引入的问题 see #3300 how to test it? 1. 切换文章的路由为不带 name 的规则 2. 访问文章看 `/apis/api.halo.run/v1alpha1/trackers/counter` API 是否有如下参数,且 name 值正确 ```json { "group": "content.halo.run", "plural": "posts", "name": "335", "hostname": "localhost", "screen": "1920x1080", "language": "zh-CN", "url": "/?p=halo-150-released", "referrer": "http://localhost:8090/?p=how-to-development-a-halo-plugin" } ``` 3. 观察文章访问量是否有增加 4. 重复上述 2、3 步骤检查自定义页面的访问量功能是否正确 #### Which issue(s) this PR fixes: Fixes #3448 #### Does this PR introduce a user-facing change? ```release-note 修复文章和自定义页面缺失属性导致的访问量无法计数问题 ```
- Loading branch information
Showing
4 changed files
with
105 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
101 changes: 101 additions & 0 deletions
101
src/test/java/run/halo/app/theme/router/SinglePageRouteTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
package run.halo.app.theme.router; | ||
|
||
import static org.assertj.core.api.Assertions.assertThat; | ||
import static org.mockito.ArgumentMatchers.any; | ||
import static org.mockito.ArgumentMatchers.eq; | ||
import static org.mockito.Mockito.when; | ||
|
||
import java.util.Map; | ||
import org.junit.jupiter.api.Test; | ||
import org.junit.jupiter.api.extension.ExtendWith; | ||
import org.mockito.InjectMocks; | ||
import org.mockito.Mock; | ||
import org.mockito.junit.jupiter.MockitoExtension; | ||
import org.springframework.http.MediaType; | ||
import org.springframework.test.web.reactive.server.WebTestClient; | ||
import org.springframework.web.reactive.function.server.HandlerFunction; | ||
import org.springframework.web.reactive.function.server.HandlerStrategies; | ||
import org.springframework.web.reactive.function.server.RouterFunction; | ||
import org.springframework.web.reactive.function.server.RouterFunctions; | ||
import org.springframework.web.reactive.function.server.ServerResponse; | ||
import org.springframework.web.reactive.result.view.ViewResolver; | ||
import org.springframework.web.server.ServerWebExchange; | ||
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.DefaultTemplateEnum; | ||
import run.halo.app.theme.finders.SinglePageFinder; | ||
import run.halo.app.theme.finders.vo.SinglePageVo; | ||
import run.halo.app.theme.router.factories.ModelConst; | ||
|
||
/** | ||
* Tests for {@link SinglePageRoute}. | ||
* | ||
* @author guqing | ||
* @since 2.0.0 | ||
*/ | ||
@ExtendWith(MockitoExtension.class) | ||
class SinglePageRouteTest { | ||
|
||
@Mock | ||
private ViewNameResolver viewNameResolver; | ||
|
||
@Mock | ||
private SinglePageFinder singlePageFinder; | ||
|
||
@Mock | ||
protected ViewResolver viewResolver; | ||
|
||
@InjectMocks | ||
private SinglePageRoute singlePageRoute; | ||
|
||
@Test | ||
void handlerFunction() { | ||
// fix gh-3448 | ||
when(viewNameResolver.resolveViewNameOrDefault(any(), any(), any())) | ||
.thenReturn(Mono.just(DefaultTemplateEnum.POST.getValue())); | ||
|
||
String pageName = "fake-page"; | ||
when(viewResolver.resolveViewName(any(), any())) | ||
.thenReturn(Mono.just(new EmptyView() { | ||
@Override | ||
public Mono<Void> render(Map<String, ?> model, MediaType contentType, | ||
ServerWebExchange exchange) { | ||
assertThat(model).containsKey(ModelConst.TEMPLATE_ID); | ||
assertThat(model.get(ModelConst.TEMPLATE_ID)) | ||
.isEqualTo(DefaultTemplateEnum.SINGLE_PAGE.getValue()); | ||
assertThat(model.get("name")) | ||
.isEqualTo(pageName); | ||
assertThat(model.get("plural")).isEqualTo("singlepages"); | ||
assertThat(model.get("singlePage")).isNotNull(); | ||
assertThat(model.get("groupVersionKind")) | ||
.isEqualTo(GroupVersionKind.fromExtension(SinglePage.class)); | ||
return super.render(model, contentType, exchange); | ||
} | ||
})); | ||
|
||
SinglePage singlePage = new SinglePage(); | ||
singlePage.setMetadata(new Metadata()); | ||
singlePage.getMetadata().setName(pageName); | ||
singlePage.setSpec(new SinglePage.SinglePageSpec()); | ||
when(singlePageFinder.getByName(eq(pageName))) | ||
.thenReturn(Mono.just(SinglePageVo.from(singlePage))); | ||
|
||
HandlerFunction<ServerResponse> handlerFunction = | ||
singlePageRoute.handlerFunction(pageName); | ||
RouterFunction<ServerResponse> routerFunction = | ||
RouterFunctions.route().GET("/archives/{name}", handlerFunction).build(); | ||
|
||
WebTestClient webTestClient = WebTestClient.bindToRouterFunction(routerFunction) | ||
.handlerStrategies(HandlerStrategies.builder() | ||
.viewResolver(viewResolver) | ||
.build()) | ||
.build(); | ||
|
||
webTestClient.get() | ||
.uri("/archives/fake-name") | ||
.exchange() | ||
.expectStatus().isOk(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters