diff --git a/README.md b/README.md index e686d14..680996a 100644 --- a/README.md +++ b/README.md @@ -197,6 +197,7 @@ Base on SpringBoot
  • 构建包由war换成jar, SQL相应调整

  • 升级替换spring-security-oauth2, 详见背景说明

  • 界面使用说明按OAuth2.1进行友好更新

  • +
  • 增加spring-restdocs文档支持, 自动生成API相关文档

  • diff --git a/src/docs/asciidoc/index.adoc b/src/docs/asciidoc/index.adoc new file mode 100644 index 0000000..79088f5 --- /dev/null +++ b/src/docs/asciidoc/index.adoc @@ -0,0 +1,22 @@ += {project-id} API Docs +:toc: left +:toc-title: Contents +:revnumber: {project-version} + + +// == 应用版本API +// .http-request +// include::{snippets}/UnityControllerTest/version/http-request.adoc[] +// .curl-request +// include::{snippets}/UnityControllerTest/version/curl-request.adoc[] +// .request-body +// include::{snippets}/UnityControllerTest/version/request-body.adoc[] +// .http-response +// include::{snippets}/UnityControllerTest/version/http-response.adoc[] +// .response-body +// include::{snippets}/UnityControllerTest/version/response-body.adoc[] + +== Unity resource API + +operation::UnityControllerTest/userInfo[] + diff --git a/src/test/java/com/monkeyk/sos/service/business/AbstractInlineAccessTokenInvokerTest.java b/src/test/java/com/monkeyk/sos/service/business/AbstractInlineAccessTokenInvokerTest.java index 1a0a01e..b940449 100644 --- a/src/test/java/com/monkeyk/sos/service/business/AbstractInlineAccessTokenInvokerTest.java +++ b/src/test/java/com/monkeyk/sos/service/business/AbstractInlineAccessTokenInvokerTest.java @@ -2,6 +2,7 @@ package com.monkeyk.sos.service.business; import com.monkeyk.sos.domain.oauth.OauthClientDetails; import com.monkeyk.sos.domain.oauth.OauthRepository; +import com.monkeyk.sos.domain.shared.GuidGenerator; import com.monkeyk.sos.domain.user.Privilege; import com.monkeyk.sos.domain.user.User; import com.monkeyk.sos.domain.user.UserRepository; @@ -50,8 +51,13 @@ public abstract class AbstractInlineAccessTokenInvokerTest extends AbstractRepos OauthClientDetails createClientDetails() { OauthClientDetails clientDetails = new OauthClientDetails(); clientDetails.clientId(clientId) + .clientName("TestClient") + .id(GuidGenerator.generateNumber()) .clientSecret(PasswordHandler.encode(clientSecret)) .authorizationGrantTypes(grantTypes()) + .clientAuthenticationMethods("client_secret_post") + .clientSettings("") + .tokenSettings("") .scopes("openid"); // .accessTokenValidity(200) // .resourceIds(RESOURCE_ID); @@ -62,7 +68,7 @@ public abstract class AbstractInlineAccessTokenInvokerTest extends AbstractRepos } String grantTypes() { - return "authorization_code,password,implicit,client_credentials,refresh_token"; + return "authorization_code,password,client_credentials,refresh_token"; } } diff --git a/src/test/java/com/monkeyk/sos/web/controller/resource/UnityControllerTest.java b/src/test/java/com/monkeyk/sos/web/controller/resource/UnityControllerTest.java new file mode 100644 index 0000000..6e57257 --- /dev/null +++ b/src/test/java/com/monkeyk/sos/web/controller/resource/UnityControllerTest.java @@ -0,0 +1,112 @@ +package com.monkeyk.sos.web.controller.resource; + +import com.monkeyk.sos.service.OauthService; +import com.monkeyk.sos.service.UserService; +import com.monkeyk.sos.service.dto.UserJsonDto; +import com.monkeyk.sos.web.controller.OauthClientDetailsDtoValidator; +import com.monkeyk.sos.web.controller.UserFormDtoValidator; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.restdocs.RestDocumentationContextProvider; +import org.springframework.restdocs.RestDocumentationExtension; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationConsentService; +import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * 2023/10/19 17:31 + * + * @author Shengzhao Li + * @since 3.0.0 + */ +@WebMvcTest +@ExtendWith({RestDocumentationExtension.class, SpringExtension.class}) +class UnityControllerTest { + + + private MockMvc mockMvc; + + + @MockBean + private UserService userService; + + @MockBean + private RegisteredClientRepository registeredClientRepository; + + @MockBean + private OAuth2AuthorizationConsentService consentService; + + @MockBean + private OauthService oauthService; + + @MockBean + private OauthClientDetailsDtoValidator oauthClientDetailsDtoValidator; + + @MockBean + private UserFormDtoValidator userFormDtoValidator; + + + @MockBean + private PasswordEncoder passwordEncoder; + + + @BeforeEach + public void setup(WebApplicationContext applicationContext, RestDocumentationContextProvider contextProvider) { + this.mockMvc = MockMvcBuilders.webAppContextSetup(applicationContext) + .apply(documentationConfiguration(contextProvider)) + .alwaysDo(result -> { + result.getResponse().setContentType(MediaType.APPLICATION_JSON_VALUE); + }) + .build(); + } + + + @Test + void userInfo() throws Exception { + + + UserJsonDto jsonDto = new UserJsonDto(); + String username = "user111"; + jsonDto.setUsername(username); + jsonDto.setGuid("owwiwi0a0assdfsfs11"); + jsonDto.setEmail("user111@cloudjac.com"); + jsonDto.setPhone("13300002222"); + jsonDto.getPrivileges().add("ROLE_USER"); + + Mockito.when(userService.loadCurrentUserJsonDto()).thenReturn(jsonDto); + + + MockHttpServletRequestBuilder requestBuilder = get("/unity/user_info") + .contentType(MediaType.APPLICATION_JSON); + + mockMvc.perform(requestBuilder) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON)) +// .andDo(print()) + .andExpect(jsonPath("guid").exists()) + .andExpect(jsonPath("username").value(username)) + .andExpect(jsonPath("email").exists()) + .andExpect(jsonPath("phone").exists()) + //生成文档需要加上这句 + .andDo(document("{ClassName}/{methodName}")); + + + } + + +} \ No newline at end of file