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.
digital-rmb-backend/src/test/java/com/yau/digitalrmb/security/CurrentUserAndLogoutTest.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());
}
}