1
1
package run .halo .app .content .permalinks ;
2
2
3
3
import static org .assertj .core .api .Assertions .assertThat ;
4
+ import static org .mockito .ArgumentMatchers .any ;
4
5
import static org .mockito .Mockito .lenient ;
5
6
import static org .mockito .Mockito .when ;
6
7
10
11
import java .time .Instant ;
11
12
import java .time .ZoneId ;
12
13
import java .time .ZonedDateTime ;
14
+ import java .util .List ;
13
15
import java .util .Map ;
14
16
import org .junit .jupiter .api .BeforeEach ;
15
17
import org .junit .jupiter .api .Test ;
16
18
import org .junit .jupiter .api .extension .ExtendWith ;
17
19
import org .mockito .Mock ;
18
20
import org .mockito .junit .jupiter .MockitoExtension ;
19
21
import org .springframework .context .ApplicationContext ;
22
+ import reactor .core .publisher .Mono ;
23
+ import run .halo .app .content .PostService ;
20
24
import run .halo .app .content .TestPost ;
25
+ import run .halo .app .core .extension .content .Category ;
21
26
import run .halo .app .core .extension .content .Constant ;
22
27
import run .halo .app .core .extension .content .Post ;
28
+ import run .halo .app .extension .Metadata ;
23
29
import run .halo .app .extension .MetadataUtil ;
24
30
import run .halo .app .infra .ExternalUrlSupplier ;
25
31
import run .halo .app .infra .SystemConfigurableEnvironmentFetcher ;
@@ -44,12 +50,17 @@ class PostPermalinkPolicyTest {
44
50
@ Mock
45
51
private SystemConfigurableEnvironmentFetcher environmentFetcher ;
46
52
53
+ @ Mock
54
+ private PostService postService ;
55
+
47
56
private PostPermalinkPolicy postPermalinkPolicy ;
48
57
49
58
@ BeforeEach
50
59
void setUp () {
51
60
lenient ().when (externalUrlSupplier .get ()).thenReturn (URI .create ("" ));
52
- postPermalinkPolicy = new PostPermalinkPolicy (environmentFetcher , externalUrlSupplier );
61
+ lenient ().when (postService .getFirstPresentCategory (any ())).thenReturn (Mono .empty ());
62
+ postPermalinkPolicy =
63
+ new PostPermalinkPolicy (environmentFetcher , externalUrlSupplier , postService );
53
64
}
54
65
55
66
@ Test
@@ -93,6 +104,24 @@ void permalink() {
93
104
assertThat (permalink ).isEqualTo ("/posts/test-post" );
94
105
}
95
106
107
+ @ Test
108
+ void permalinkForCategory () {
109
+ Post post = TestPost .postV1 ();
110
+ post .getSpec ().setCategories (List .of ("test-category" ));
111
+ Map <String , String > annotations = MetadataUtil .nullSafeAnnotations (post );
112
+ annotations .put (Constant .PERMALINK_PATTERN_ANNO , "/{categorySlug}/{slug}" );
113
+ post .getMetadata ().setName ("test-post" );
114
+ post .getSpec ().setSlug ("test-post-slug" );
115
+ Instant now = Instant .now ();
116
+ post .getSpec ().setPublishTime (now );
117
+
118
+ var category = createCategory ("test-category" , "test-category-slug" );
119
+ when (postService .getFirstPresentCategory (post .getSpec ().getCategories ()))
120
+ .thenReturn (Mono .just (category ));
121
+ var permalink = postPermalinkPolicy .permalink (post );
122
+ assertThat (permalink ).isEqualTo ("/test-category-slug/test-post-slug" );
123
+ }
124
+
96
125
@ Test
97
126
void permalinkWithExternalUrl () {
98
127
Post post = TestPost .postV1 ();
@@ -112,4 +141,18 @@ void permalinkWithExternalUrl() {
112
141
permalink = postPermalinkPolicy .permalink (post );
113
142
assertThat (permalink ).isEqualTo ("http://example.com/2022/11/01/%E4%B8%AD%E6%96%87%20slug" );
114
143
}
144
+
145
+ private Category createCategory (String name , String slug ) {
146
+ Category category = new Category ();
147
+ Metadata metadata = new Metadata ();
148
+ metadata .setName (name );
149
+ category .setMetadata (metadata );
150
+ category .setSpec (new Category .CategorySpec ());
151
+ category .setStatus (new Category .CategoryStatus ());
152
+
153
+ category .getSpec ().setDisplayName ("display-name" );
154
+ category .getSpec ().setSlug (slug );
155
+ category .getSpec ().setPriority (0 );
156
+ return category ;
157
+ }
115
158
}
0 commit comments