fix(admin-member): 회원 목록 lazy 초기화를 방지한다

This commit is contained in:
2026-06-27 07:53:58 +09:00
parent 342c39890e
commit 9c458d0ae1
2 changed files with 82 additions and 0 deletions

View File

@@ -16,6 +16,7 @@ import java.time.ZoneId
import java.time.format.DateTimeFormatter
@Service
@Transactional(readOnly = true)
class AdminMemberService(
private val repository: AdminMemberRepository,
private val passwordEncoder: PasswordEncoder,

View File

@@ -0,0 +1,81 @@
package kr.co.vividnext.sodalive.admin.member
import kr.co.vividnext.sodalive.member.Member
import kr.co.vividnext.sodalive.member.MemberRole
import kr.co.vividnext.sodalive.member.SignOut
import kr.co.vividnext.sodalive.member.SignOutRepository
import kr.co.vividnext.sodalive.support.EmbeddedRedisInitializer
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.data.domain.PageRequest
import org.springframework.test.context.ContextConfiguration
@SpringBootTest(properties = ["cloud.aws.cloud-front.host=https://cdn.test"])
@ContextConfiguration(initializers = [EmbeddedRedisInitializer::class])
class AdminMemberServiceTest @Autowired constructor(
private val service: AdminMemberService,
private val adminMemberRepository: AdminMemberRepository,
private val signOutRepository: SignOutRepository
) {
@AfterEach
fun tearDown() {
signOutRepository.deleteAll()
adminMemberRepository.deleteAll()
}
@Test
@DisplayName("OSIV off 환경에서 탈퇴 이력이 있는 회원 리스트를 조회해도 lazy 초기화 예외가 발생하지 않는다")
fun shouldGetMemberListWithSignOutReasonsWhenOpenInViewIsDisabled() {
val member = saveMemberWithSignOutReason(
email = "admin-member-list-user@test.com",
nickname = "회원 목록 사용자",
role = MemberRole.USER
)
val response = service.getMemberList(PageRequest.of(0, 20))
val item = response.items.single { it.id == member.id }
assertEquals(1, response.totalCount)
assertTrue(item.signOutDate.isNotBlank())
}
@Test
@DisplayName("OSIV off 환경에서 탈퇴 이력이 있는 크리에이터 리스트를 조회해도 lazy 초기화 예외가 발생하지 않는다")
fun shouldGetCreatorListWithSignOutReasonsWhenOpenInViewIsDisabled() {
val creator = saveMemberWithSignOutReason(
email = "admin-member-list-creator@test.com",
nickname = "크리에이터 목록 사용자",
role = MemberRole.CREATOR
)
val response = service.getCreatorList(PageRequest.of(0, 20))
val item = response.items.single { it.id == creator.id }
assertEquals(1, response.totalCount)
assertTrue(item.signOutDate.isNotBlank())
}
private fun saveMemberWithSignOutReason(
email: String,
nickname: String,
role: MemberRole
): Member {
val member = adminMemberRepository.save(
Member(
email = email,
password = "password",
nickname = nickname,
role = role
)
)
val signOut = SignOut(reason = "운영 정책 위반")
signOut.member = member
signOutRepository.save(signOut)
return member
}
}