You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
3.5 KiB
Java
66 lines
3.5 KiB
Java
package com.yau.digitalrmb.security;
|
|
|
|
import com.yau.digitalrmb.identity.application.LocalSsoAccountService;
|
|
import com.yau.digitalrmb.platformintegration.application.VerifiedPlatformToken;
|
|
import com.yau.digitalrmb.security.application.JwtTokenService;
|
|
import com.yau.digitalrmb.security.application.RefreshTokenService;
|
|
import java.util.Collections;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
|
import org.springframework.boot.test.context.SpringBootTest;
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.test.context.ActiveProfiles;
|
|
import org.springframework.test.web.servlet.MockMvc;
|
|
|
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
|
|
|
@SpringBootTest
|
|
@AutoConfigureMockMvc
|
|
@ActiveProfiles("test")
|
|
class CurrentUserAndLogoutTest {
|
|
@Autowired private MockMvc mvc;
|
|
@Autowired private LocalSsoAccountService localSsoAccountService;
|
|
@Autowired private JwtTokenService jwtTokenService;
|
|
@Autowired private RefreshTokenService refreshTokenService;
|
|
|
|
private String teacherJwt;
|
|
private String refreshToken;
|
|
|
|
@BeforeEach
|
|
void setUp() {
|
|
localSsoAccountService.synchronize(new VerifiedPlatformToken(101L, "t001", "Teacher User", "password", 3L,
|
|
"TEACHER", "610000", "Yan'an University", "100", "Computer College", "101",
|
|
"Software Engineering", "202401", "Class 1", "20240001"));
|
|
teacherJwt = jwtTokenService.issueFor(101L, "t001", Collections.singleton("TEACHER")).accessToken();
|
|
refreshToken = refreshTokenService.issue(101L);
|
|
}
|
|
|
|
@Test
|
|
void currentUserIsReadonlyTeacherAndLogoutRevokesOwnRefreshToken() throws Exception {
|
|
mvc.perform(get("/api/v1/auth/me").header("Authorization", "Bearer " + teacherJwt))
|
|
.andExpect(status().isOk())
|
|
.andExpect(jsonPath("$.data.userId").value(101))
|
|
.andExpect(jsonPath("$.data.username").value("t001"))
|
|
.andExpect(jsonPath("$.data.name").value("Teacher User"))
|
|
.andExpect(jsonPath("$.data.schoolId").value("610000"))
|
|
.andExpect(jsonPath("$.data.schoolName").value("Yan'an University"))
|
|
.andExpect(jsonPath("$.data.collegeId").value("100"))
|
|
.andExpect(jsonPath("$.data.collegeName").value("Computer College"))
|
|
.andExpect(jsonPath("$.data.majorId").value("101"))
|
|
.andExpect(jsonPath("$.data.majorName").value("Software Engineering"))
|
|
.andExpect(jsonPath("$.data.roleid").value(3))
|
|
.andExpect(jsonPath("$.data.classId").value("202401"))
|
|
.andExpect(jsonPath("$.data.className").value("Class 1"))
|
|
.andExpect(jsonPath("$.data.studentid").value("20240001"));
|
|
mvc.perform(post("/api/v1/auth/logout").header("Authorization", "Bearer " + teacherJwt)
|
|
.contentType(MediaType.APPLICATION_JSON).content("{\"refreshToken\":\"" + refreshToken + "\"}"))
|
|
.andExpect(status().isOk());
|
|
mvc.perform(post("/api/v1/users")).andExpect(status().is4xxClientError());
|
|
}
|
|
}
|