From ab82fa1cba507ac7df48fe463758c6d296fa4267 Mon Sep 17 00:00:00 2001 From: hantsy Date: Mon, 4 Dec 2023 23:36:37 +0800 Subject: [PATCH] chore: clean codes --- .../jwt/JwtTokenAuthenticationFilter.java | 6 +- .../demo/security/jwt/JwtTokenProvider.java | 9 +- .../com/example/demo/web/AuthController.java | 2 +- .../demo/web/AuthenticationRequest.java | 24 +--- .../com/example/demo/web/CommentForm.java | 17 +-- .../example/demo/web/CreatePostCommand.java | 9 ++ .../com/example/demo/web/PaginatedResult.java | 6 + .../com/example/demo/web/PostController.java | 82 +++++++------ .../java/com/example/demo/web/PostForm.java | 23 ---- .../demo/web/RestExceptionHandler.java | 2 + .../example/demo/web/UpdatePostCommand.java | 9 ++ .../example/demo/web/UpdateStatusRequest.java | 16 +-- .../com/example/demo/AuthControllerTest.java | 5 +- .../demo/JwtAuthenticationFilterTest.java | 5 +- .../com/example/demo/PostControllerTest.java | 113 +++--------------- .../com/example/demo/PostRepositoryTest.java | 4 +- .../com/example/demo/UserControllerTest.java | 4 +- 17 files changed, 109 insertions(+), 227 deletions(-) create mode 100644 src/main/java/com/example/demo/web/CreatePostCommand.java create mode 100644 src/main/java/com/example/demo/web/PaginatedResult.java delete mode 100644 src/main/java/com/example/demo/web/PostForm.java create mode 100644 src/main/java/com/example/demo/web/UpdatePostCommand.java diff --git a/src/main/java/com/example/demo/security/jwt/JwtTokenAuthenticationFilter.java b/src/main/java/com/example/demo/security/jwt/JwtTokenAuthenticationFilter.java index 600cdd6..2a5a6f1 100644 --- a/src/main/java/com/example/demo/security/jwt/JwtTokenAuthenticationFilter.java +++ b/src/main/java/com/example/demo/security/jwt/JwtTokenAuthenticationFilter.java @@ -25,10 +25,8 @@ public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { if (StringUtils.hasText(token) && this.tokenProvider.validateToken(token)) { return Mono.fromCallable(() -> this.tokenProvider.getAuthentication(token)) .subscribeOn(Schedulers.boundedElastic()) - .flatMap(authentication -> { - return chain.filter(exchange) - .contextWrite(ReactiveSecurityContextHolder.withAuthentication(authentication)); - }); + .flatMap(authentication -> chain.filter(exchange) + .contextWrite(ReactiveSecurityContextHolder.withAuthentication(authentication))); } return chain.filter(exchange); } diff --git a/src/main/java/com/example/demo/security/jwt/JwtTokenProvider.java b/src/main/java/com/example/demo/security/jwt/JwtTokenProvider.java index 06c676e..3890234 100644 --- a/src/main/java/com/example/demo/security/jwt/JwtTokenProvider.java +++ b/src/main/java/com/example/demo/security/jwt/JwtTokenProvider.java @@ -21,7 +21,6 @@ import java.util.Date; import javax.crypto.SecretKey; -import static java.util.stream.Collectors.collectingAndThen; import static java.util.stream.Collectors.joining; @Component @@ -45,9 +44,8 @@ public void init() { public String createToken(Authentication authentication) { String username = authentication.getName(); - Collection authorities = authentication - .getAuthorities(); - var claimsBuilder = Jwts.claims().subject(username); + Collection authorities = authentication.getAuthorities(); + var claimsBuilder = Jwts.claims().subject(username); if (!authorities.isEmpty()) { claimsBuilder.add(AUTHORITIES_KEY, authorities.stream() .map(GrantedAuthority::getAuthority).collect(joining(","))); @@ -71,8 +69,7 @@ public Authentication getAuthentication(String token) { Collection authorities = authoritiesClaim == null ? AuthorityUtils.NO_AUTHORITIES - : AuthorityUtils - .commaSeparatedStringToAuthorityList(authoritiesClaim.toString()); + : AuthorityUtils.commaSeparatedStringToAuthorityList(authoritiesClaim.toString()); User principal = new User(claims.getSubject(), "", authorities); diff --git a/src/main/java/com/example/demo/web/AuthController.java b/src/main/java/com/example/demo/web/AuthController.java index 6128680..efad4f8 100644 --- a/src/main/java/com/example/demo/web/AuthController.java +++ b/src/main/java/com/example/demo/web/AuthController.java @@ -37,7 +37,7 @@ public Mono login( return authRequest .flatMap(login -> this.authenticationManager .authenticate(new UsernamePasswordAuthenticationToken( - login.getUsername(), login.getPassword())) + login.username(), login.password())) .map(this.tokenProvider::createToken)) .map(jwt -> { HttpHeaders httpHeaders = new HttpHeaders(); diff --git a/src/main/java/com/example/demo/web/AuthenticationRequest.java b/src/main/java/com/example/demo/web/AuthenticationRequest.java index 927f3cb..1d56e6a 100644 --- a/src/main/java/com/example/demo/web/AuthenticationRequest.java +++ b/src/main/java/com/example/demo/web/AuthenticationRequest.java @@ -1,25 +1,9 @@ package com.example.demo.web; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; import jakarta.validation.constraints.NotBlank; -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class AuthenticationRequest implements Serializable { - - private static final long serialVersionUID = -6986746375915710855L; - - @NotBlank - private String username; - - @NotBlank - private String password; - +public record AuthenticationRequest( + @NotBlank String username, + @NotBlank String password +) { } diff --git a/src/main/java/com/example/demo/web/CommentForm.java b/src/main/java/com/example/demo/web/CommentForm.java index 66d23a2..e992ee5 100644 --- a/src/main/java/com/example/demo/web/CommentForm.java +++ b/src/main/java/com/example/demo/web/CommentForm.java @@ -1,19 +1,10 @@ package com.example.demo.web; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - import jakarta.validation.constraints.NotBlank; -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class CommentForm { - - @NotBlank - private String content; +public record CommentForm( + @NotBlank + String content +) { } diff --git a/src/main/java/com/example/demo/web/CreatePostCommand.java b/src/main/java/com/example/demo/web/CreatePostCommand.java new file mode 100644 index 0000000..43444f2 --- /dev/null +++ b/src/main/java/com/example/demo/web/CreatePostCommand.java @@ -0,0 +1,9 @@ +package com.example.demo.web; + +import jakarta.validation.constraints.NotBlank; + +public record CreatePostCommand( + @NotBlank String title, + @NotBlank String content +) { +} diff --git a/src/main/java/com/example/demo/web/PaginatedResult.java b/src/main/java/com/example/demo/web/PaginatedResult.java new file mode 100644 index 0000000..10d83a7 --- /dev/null +++ b/src/main/java/com/example/demo/web/PaginatedResult.java @@ -0,0 +1,6 @@ +package com.example.demo.web; + +import java.util.List; + +public record PaginatedResult(List data, Long count) { +} diff --git a/src/main/java/com/example/demo/web/PostController.java b/src/main/java/com/example/demo/web/PostController.java index fde2950..899dba6 100644 --- a/src/main/java/com/example/demo/web/PostController.java +++ b/src/main/java/com/example/demo/web/PostController.java @@ -6,18 +6,17 @@ import com.example.demo.domain.PostNotFoundException; import com.example.demo.repository.CommentRepository; import com.example.demo.repository.PostRepository; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.http.ResponseEntity; -import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.net.URI; -import jakarta.validation.Valid; import static org.springframework.http.HttpStatus.NO_CONTENT; import static org.springframework.http.ResponseEntity.created; @@ -33,38 +32,29 @@ public class PostController { private final CommentRepository comments; @GetMapping("") - public Flux all(@RequestParam(value = "q", required = false) String q, - @RequestParam(value = "page", defaultValue = "0") int page, - @RequestParam(value = "size", defaultValue = "10") int size) { + public Mono all(@RequestParam(value = "q", required = false, defaultValue = "") String q, + @RequestParam(value = "page", defaultValue = "0") int page, + @RequestParam(value = "size", defaultValue = "10") int size) { Sort sort = Sort.by(Sort.Direction.DESC, "createdDate"); - if (StringUtils.hasText(q)) { - return this.posts.findByTitleContains(q, PageRequest.of(page, size, sort)); - } - else { - return this.posts.findAll(sort).skip(page).take(size); - } - } - - @GetMapping(value = "/count") - public Mono count(@RequestParam(value = "q", required = false) String q) { - if (StringUtils.hasText(q)) { - return this.posts.countByTitleContains(q).map(CountValue::new); - } - else { - return this.posts.count().map(CountValue::new); - } + return this.posts.findByTitleContains(q, PageRequest.of(page, size, sort)) + .collectList() + .zipWith(this.posts.countByTitleContains(q), + PaginatedResult::new + ); } @PostMapping("") public Mono> create( - @RequestBody @Valid Mono formData) { - - return formData - .map(data -> Post.builder().title(data.getTitle()) - .content(data.getContent()).build()) - .flatMap(this.posts::save) - .map(saved -> created(URI.create("/posts/" + saved.getId())).build()); + @RequestBody @Valid CreatePostCommand data) { + Post post = Post.builder() + .title(data.title()) + .content(data.content()) + .build(); + return this.posts.save(post) + .map(saved -> created(URI.create("/posts/" + saved.getId())) + .build() + ); } @GetMapping("/{id}") @@ -76,27 +66,32 @@ public Mono get(@PathVariable("id") String id) { @PutMapping("/{id}") @ResponseStatus(NO_CONTENT) public Mono update(@PathVariable("id") String id, - @RequestBody @Valid PostForm post) { + @RequestBody @Valid UpdatePostCommand post) { return this.posts.findById(id) - .switchIfEmpty(Mono.error(new PostNotFoundException(id))).map(p -> { - p.setTitle(post.getTitle()); - p.setContent(post.getContent()); + .switchIfEmpty(Mono.error(new PostNotFoundException(id))) + .map(p -> { + p.setTitle(post.title()); + p.setContent(post.content()); return p; - }).flatMap(this.posts::save).flatMap(data -> Mono.empty()); + }) + .flatMap(this.posts::save) + .then(); } @PutMapping("/{id}/status") @ResponseStatus(NO_CONTENT) public Mono updateStatus(@PathVariable("id") String id, - @RequestBody @Valid UpdateStatusRequest status) { + @RequestBody @Valid UpdateStatusRequest status) { return this.posts.findById(id) - .switchIfEmpty(Mono.error(new PostNotFoundException(id))).map(p -> { + .switchIfEmpty(Mono.error(new PostNotFoundException(id))) + .map(p -> { // TODO: check if the current user is author it has ADMIN role. - p.setStatus(Post.Status.valueOf(status.getStatus())); - + p.setStatus(Post.Status.valueOf(status.status())); return p; - }).flatMap(this.posts::save).flatMap(data -> Mono.empty()); + }) + .flatMap(this.posts::save) + .then(); } @DeleteMapping("/{id}") @@ -119,14 +114,17 @@ public Mono getCommentsCountOf(@PathVariable("id") String id) { @PostMapping("/{id}/comments") public Mono> createCommentsOf(@PathVariable("id") String id, - @RequestBody @Valid CommentForm form) { - Comment comment = Comment.builder().post(new PostId(id)) - .content(form.getContent()).build(); + @RequestBody @Valid CommentForm form) { + Comment comment = Comment.builder() + .post(new PostId(id)) + .content(form.content()) + .build(); return this.comments.save(comment) .map(saved -> created( URI.create("/posts/" + id + "/comments/" + saved.getId())) - .build()); + .build() + ); } } diff --git a/src/main/java/com/example/demo/web/PostForm.java b/src/main/java/com/example/demo/web/PostForm.java deleted file mode 100644 index 5171533..0000000 --- a/src/main/java/com/example/demo/web/PostForm.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.demo.web; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; -import jakarta.validation.constraints.NotBlank; - -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class PostForm implements Serializable { - - @NotBlank - private String title; - - @NotBlank - private String content; - -} diff --git a/src/main/java/com/example/demo/web/RestExceptionHandler.java b/src/main/java/com/example/demo/web/RestExceptionHandler.java index 8a511c8..f3eb36e 100644 --- a/src/main/java/com/example/demo/web/RestExceptionHandler.java +++ b/src/main/java/com/example/demo/web/RestExceptionHandler.java @@ -14,6 +14,7 @@ import org.springframework.web.reactive.result.method.annotation.ResponseEntityExceptionHandler; import java.io.Serializable; +import java.net.URI; import java.util.ArrayList; import java.util.List; @@ -28,6 +29,7 @@ public class RestExceptionHandler extends ResponseEntityExceptionHandler { public ProblemDetail handlePostNotFoundException(PostNotFoundException ex) { ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail(HttpStatus.NOT_FOUND, ex.getMessage()); problemDetail.setTitle("Post Not Found"); + problemDetail.setType(URI.create("http://example.com/api/errors/not_found")); return problemDetail; } diff --git a/src/main/java/com/example/demo/web/UpdatePostCommand.java b/src/main/java/com/example/demo/web/UpdatePostCommand.java new file mode 100644 index 0000000..cb22a43 --- /dev/null +++ b/src/main/java/com/example/demo/web/UpdatePostCommand.java @@ -0,0 +1,9 @@ +package com.example.demo.web; + +import jakarta.validation.constraints.NotBlank; + +public record UpdatePostCommand( + @NotBlank String title, + @NotBlank String content +) { +} diff --git a/src/main/java/com/example/demo/web/UpdateStatusRequest.java b/src/main/java/com/example/demo/web/UpdateStatusRequest.java index eea1e66..2645937 100644 --- a/src/main/java/com/example/demo/web/UpdateStatusRequest.java +++ b/src/main/java/com/example/demo/web/UpdateStatusRequest.java @@ -1,18 +1,8 @@ package com.example.demo.web; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; import jakarta.validation.constraints.NotBlank; -@Data -@AllArgsConstructor -@NoArgsConstructor -public class UpdateStatusRequest implements Serializable { - - @NotBlank - private String status; - +public record UpdateStatusRequest( + @NotBlank String status +) { } diff --git a/src/test/java/com/example/demo/AuthControllerTest.java b/src/test/java/com/example/demo/AuthControllerTest.java index f0dfde6..f5b1619 100644 --- a/src/test/java/com/example/demo/AuthControllerTest.java +++ b/src/test/java/com/example/demo/AuthControllerTest.java @@ -28,7 +28,8 @@ @WebFluxTest( controllers = AuthController.class, excludeAutoConfiguration = { - ReactiveUserDetailsServiceAutoConfiguration.class, ReactiveSecurityAutoConfiguration.class + ReactiveUserDetailsServiceAutoConfiguration.class, + ReactiveSecurityAutoConfiguration.class } ) @Slf4j @@ -56,7 +57,7 @@ void testFindByUsername() { .thenReturn(Mono.just(usernamePasswordAuthenticationToken)); when(this.tokenProvider.createToken(any(Authentication.class))).thenReturn("atesttoken"); - var req = AuthenticationRequest.builder().username("test").password("password").build(); + var req = new AuthenticationRequest("test", "password"); this.client.post() .uri("/auth/login") diff --git a/src/test/java/com/example/demo/JwtAuthenticationFilterTest.java b/src/test/java/com/example/demo/JwtAuthenticationFilterTest.java index 8bac917..64c9f8b 100644 --- a/src/test/java/com/example/demo/JwtAuthenticationFilterTest.java +++ b/src/test/java/com/example/demo/JwtAuthenticationFilterTest.java @@ -78,10 +78,7 @@ void testFilterWithInvalidToken() { when(this.exchange.getRequest().getHeaders().getFirst(HttpHeaders.AUTHORIZATION)) .thenReturn("Bearer atesttoken"); when(this.tokenProvider.validateToken(anyString())).thenReturn(false); - when( - this.chain - .filter(this.exchange) - ).thenReturn(Mono.empty()); + when(this.chain.filter(this.exchange)).thenReturn(Mono.empty()); filter.filter(this.exchange, this.chain); diff --git a/src/test/java/com/example/demo/PostControllerTest.java b/src/test/java/com/example/demo/PostControllerTest.java index c501d12..fe00463 100644 --- a/src/test/java/com/example/demo/PostControllerTest.java +++ b/src/test/java/com/example/demo/PostControllerTest.java @@ -6,8 +6,8 @@ import com.example.demo.repository.CommentRepository; import com.example.demo.repository.PostRepository; import com.example.demo.web.CommentForm; +import com.example.demo.web.CreatePostCommand; import com.example.demo.web.PostController; -import com.example.demo.web.PostForm; import com.example.demo.web.UpdateStatusRequest; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.AfterAll; @@ -40,6 +40,7 @@ import static org.hamcrest.CoreMatchers.containsString; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.isA; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; @@ -50,7 +51,8 @@ @WebFluxTest( controllers = PostController.class, excludeAutoConfiguration = { - ReactiveUserDetailsServiceAutoConfiguration.class, ReactiveSecurityAutoConfiguration.class + ReactiveUserDetailsServiceAutoConfiguration.class, + ReactiveSecurityAutoConfiguration.class } ) @Slf4j @@ -93,106 +95,30 @@ void afterEach() { @DisplayName("/posts GET") class GettingAllPosts { - @Test - @DisplayName("should return 200 when getting posts with keyword") - void shouldBeOkWhenGettingPostsWithKeyword() { - PageRequest pageRequest = PageRequest.of(0, 10, Sort.by(Sort.Direction.DESC, "createdDate")); - given(posts.findByTitleContains("first", pageRequest)) - .willReturn(Flux.just( - Post.builder() - .id("1") - .title("my first post") - .content("content of my first post") - .createdDate(LocalDateTime.now()) - .status(Post.Status.PUBLISHED) - .build() - ) - ); - - client.get().uri("/posts?q=first") - .exchange() - .expectStatus().isOk() - .expectBody() - .jsonPath("$[0].title").isEqualTo("my first post") - .jsonPath("$[0].id").isEqualTo("1") - .jsonPath("$[0].content").isEqualTo("content of my first post"); - - verify(posts, times(1)).findByTitleContains(anyString(), any(Pageable.class)); - verifyNoMoreInteractions(posts); - - } - - @Test - @DisplayName("should return 200 when getting posts without keyword") - void shouldBeOkWhenGettingPostsWithoutKeyword() { - PageRequest pageRequest = PageRequest.of(0, 10, Sort.by(Sort.Direction.DESC, "createdDate")); - given(posts.findAll(pageRequest.getSort())) - .willReturn( - Flux.just( - Post.builder() - .id("1") - .title("my first post") - .content("content of my first post") - .createdDate(LocalDateTime.now()) - .status(Post.Status.PUBLISHED) - .build() - ) - ); - - client.get().uri("/posts") - .exchange() - .expectStatus().isOk() - .expectBody() - .jsonPath("$[0].title").isEqualTo("my first post") - .jsonPath("$[0].id").isEqualTo("1") - .jsonPath("$[0].content").isEqualTo("content of my first post"); - - verify(posts, times(1)).findAll(any(Sort.class)); - verifyNoMoreInteractions(posts); - } - @Test @DisplayName("should return 200 when getting posts with keyword and pagination") - void shouldBeOkWhenGettingPostsWithKeywordAndPagiantion() { - List data = IntStream.range(1, 11)// 15 posts will be created. + void shouldBeOkWhenGettingPostsWithKeywordAndPagination() { + List data = IntStream.range(1, 6)// 5 posts will be created. .mapToObj(n -> Post.builder().id("" + n).title("my " + n + " blog post") .content("content of my " + n + " blog post").status(Post.Status.PUBLISHED) .createdDate(LocalDateTime.now()).build()) - .collect(toList()); + .toList(); - List data2 = IntStream.range(11, 16)// 5 posts will be created. - .mapToObj(n -> Post.builder().id("" + n).title("my " + n + " blog test post") - .content("content of my " + n + " blog post").status(Post.Status.PUBLISHED) - .createdDate(LocalDateTime.now()).build()) - .collect(toList()); + given(posts.findByTitleContains(anyString(), isA(Pageable.class))).willReturn(Flux.fromIterable(data)); + given(posts.countByTitleContains(anyString())).willReturn(Mono.just(30L)); - PageRequest pageRequest = PageRequest.of(0, 10, Sort.by(Sort.Direction.DESC, "createdDate")); - PageRequest pageRequest2 = PageRequest.of(1, 10, Sort.by(Sort.Direction.DESC, "createdDate")); - given(posts.findAll(pageRequest.getSort())).willReturn(Flux.fromIterable(data)); - - given(posts.findByTitleContains("test", pageRequest2)).willReturn(Flux.fromIterable(data2)); - - given(posts.count()).willReturn(Mono.just(15L)); - given(posts.countByTitleContains("5")).willReturn(Mono.just(3L)); - - client.get().uri("/posts").exchange().expectStatus().isOk().expectBodyList(Post.class).hasSize(10); - client.get() - .uri(uriBuilder -> uriBuilder.path("/posts").queryParam("page", 1).queryParam("q", "test").build()) - .exchange().expectStatus().isOk().expectBodyList(Post.class).hasSize(5); - - client.get().uri("/posts/count").exchange().expectStatus().isOk().expectBody().jsonPath("$.count") - .isEqualTo(15); + client.get().uri(uriBuilder -> uriBuilder.path("/posts").queryParam("q", "5").build()) + .exchange() + .expectStatus().isOk() + .expectBody() + .jsonPath("$.data.size()").isEqualTo(5) + .jsonPath("$.count").isEqualTo(30L); - client.get().uri(uriBuilder -> uriBuilder.path("/posts/count").queryParam("q", "5").build()).exchange() - .expectStatus().isOk().expectBody().jsonPath("$.count").isEqualTo(3); - verify(posts, times(1)).findAll(any(Sort.class)); verify(posts, times(1)).findByTitleContains(anyString(), any(Pageable.class)); - verify(posts, times(1)).count(); verify(posts, times(1)).countByTitleContains(anyString()); verifyNoMoreInteractions(posts); - } } @@ -243,7 +169,7 @@ class CreatingPost { @Test @DisplayName("should return 400 when creating post with invalid body") void shouldReturn400WhenCreatingPostWithInvalidBody() { - PostForm formData = PostForm.builder().build(); + CreatePostCommand formData = new CreatePostCommand(null, null); client.post() .uri("/posts") @@ -257,10 +183,7 @@ void shouldReturn400WhenCreatingPostWithInvalidBody() { @Test @DisplayName("should return 201 when creating post") void shouldReturn201WhenCreatingPost() { - PostForm formData = PostForm.builder() - .title("my first post") - .content("content of my first post") - .build(); + CreatePostCommand formData = new CreatePostCommand("my first post", "content of my first post"); given(posts.save(any(Post.class))).willReturn( Mono.just( Post.builder() @@ -475,7 +398,7 @@ void shouldBeOkWhenCreatingCommentOfPost() { ) ); - CommentForm form = CommentForm.builder().content("comment of my first post").build(); + CommentForm form = new CommentForm("comment of my first post"); client.post() .uri("/posts/1/comments") .body(BodyInserters.fromValue(form)) diff --git a/src/test/java/com/example/demo/PostRepositoryTest.java b/src/test/java/com/example/demo/PostRepositoryTest.java index 6e0c280..950071c 100644 --- a/src/test/java/com/example/demo/PostRepositoryTest.java +++ b/src/test/java/com/example/demo/PostRepositoryTest.java @@ -49,7 +49,7 @@ void setup() throws InterruptedException { @Test void testGetAllPostsByPagination() throws InterruptedException { - List data = IntStream.range(1, 11)// 15 posts will be created. + List data = IntStream.range(1, 11)// 10 posts will be created. .mapToObj(n -> Post.builder() .id("" + n) .title("my " + n + " first post") @@ -76,7 +76,7 @@ void testGetAllPostsByPagination() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); this.postRepository.saveAll(data) .thenMany(this.postRepository.saveAll(data2)) - .doOnComplete(latch::countDown) + .doOnTerminate(latch::countDown) .doOnError(e -> log.debug("error: {}", e)) .subscribe(saved -> log.debug("saved data: {}", saved)); latch.await(5000, TimeUnit.MILLISECONDS); diff --git a/src/test/java/com/example/demo/UserControllerTest.java b/src/test/java/com/example/demo/UserControllerTest.java index b77bebb..2257a4f 100644 --- a/src/test/java/com/example/demo/UserControllerTest.java +++ b/src/test/java/com/example/demo/UserControllerTest.java @@ -2,7 +2,6 @@ import com.example.demo.domain.User; import com.example.demo.repository.UserRepository; -import com.example.demo.web.AuthController; import com.example.demo.web.UserController; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -25,7 +24,8 @@ @WebFluxTest( controllers = UserController.class, excludeAutoConfiguration = { - ReactiveUserDetailsServiceAutoConfiguration.class, ReactiveSecurityAutoConfiguration.class + ReactiveUserDetailsServiceAutoConfiguration.class, + ReactiveSecurityAutoConfiguration.class } ) @Slf4j