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