rest-docs API
parent
c6de321e1f
commit
7396ff1e32
|
@ -197,6 +197,7 @@ Base on SpringBoot
|
||||||
<li><p>构建包由war换成jar, SQL相应调整</p></li>
|
<li><p>构建包由war换成jar, SQL相应调整</p></li>
|
||||||
<li><p>升级替换spring-security-oauth2, 详见<a href="https://andaily.com/blog/?p=20077">背景说明</a></p></li>
|
<li><p>升级替换spring-security-oauth2, 详见<a href="https://andaily.com/blog/?p=20077">背景说明</a></p></li>
|
||||||
<li><p>界面使用说明按OAuth2.1进行友好更新</p></li>
|
<li><p>界面使用说明按OAuth2.1进行友好更新</p></li>
|
||||||
|
<li><p>增加spring-restdocs文档支持, 自动生成API相关文档</p></li>
|
||||||
</ol>
|
</ol>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
|
|
@ -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[]
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.monkeyk.sos.service.business;
|
||||||
|
|
||||||
import com.monkeyk.sos.domain.oauth.OauthClientDetails;
|
import com.monkeyk.sos.domain.oauth.OauthClientDetails;
|
||||||
import com.monkeyk.sos.domain.oauth.OauthRepository;
|
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.Privilege;
|
||||||
import com.monkeyk.sos.domain.user.User;
|
import com.monkeyk.sos.domain.user.User;
|
||||||
import com.monkeyk.sos.domain.user.UserRepository;
|
import com.monkeyk.sos.domain.user.UserRepository;
|
||||||
|
@ -50,8 +51,13 @@ public abstract class AbstractInlineAccessTokenInvokerTest extends AbstractRepos
|
||||||
OauthClientDetails createClientDetails() {
|
OauthClientDetails createClientDetails() {
|
||||||
OauthClientDetails clientDetails = new OauthClientDetails();
|
OauthClientDetails clientDetails = new OauthClientDetails();
|
||||||
clientDetails.clientId(clientId)
|
clientDetails.clientId(clientId)
|
||||||
|
.clientName("TestClient")
|
||||||
|
.id(GuidGenerator.generateNumber())
|
||||||
.clientSecret(PasswordHandler.encode(clientSecret))
|
.clientSecret(PasswordHandler.encode(clientSecret))
|
||||||
.authorizationGrantTypes(grantTypes())
|
.authorizationGrantTypes(grantTypes())
|
||||||
|
.clientAuthenticationMethods("client_secret_post")
|
||||||
|
.clientSettings("")
|
||||||
|
.tokenSettings("")
|
||||||
.scopes("openid");
|
.scopes("openid");
|
||||||
// .accessTokenValidity(200)
|
// .accessTokenValidity(200)
|
||||||
// .resourceIds(RESOURCE_ID);
|
// .resourceIds(RESOURCE_ID);
|
||||||
|
@ -62,7 +68,7 @@ public abstract class AbstractInlineAccessTokenInvokerTest extends AbstractRepos
|
||||||
}
|
}
|
||||||
|
|
||||||
String grantTypes() {
|
String grantTypes() {
|
||||||
return "authorization_code,password,implicit,client_credentials,refresh_token";
|
return "authorization_code,password,client_credentials,refresh_token";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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}"));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue