-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FIX] 방장이 자신의 방이 아닌 다른 방의 방장 권한을 얻게 되는 버그 수정 #421
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다 폼에~! 저도 이 버그를 들었었는데 그때 경황이 없어 제대로 확인 못했어요ㅜ 깔끔하게 해결해주셨네요:)
파일 체인지가 적어서 파악하는 데에는 어려움이 없었는데, PR 제목이랑 description을 좀더 구체적으로 적어주시면 수월하게 리뷰할 수 있을 것 같아요~! 의견 몇가지 남겨봤습니다! 답변 부탁드려용
@@ -73,22 +74,4 @@ const customRender = (ui: React.ReactNode, options: CustomRenderOptions = {}) => | |||
}); | |||
}; | |||
|
|||
const customRenderWithMaster = (Component: React.ReactNode) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🌸 칭찬 🌸
방장 훅을 분리하면서 이런 커스텀 함수 없이도 방장 여부가 명확해졌네용
frontend/src/hooks/useGetUserInfo.ts
Outdated
@@ -19,7 +22,7 @@ const useGetUserInfo = (): RoomAndMember => { | |||
member: { | |||
memberId: data?.member?.memberId || 0, | |||
nickname: data?.member?.nickname || '', | |||
isMaster: data?.member?.isMaster || false, | |||
isMaster: Boolean(data?.member?.isMaster && Number(roomId) === data?.roomId), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🙏 제안 🙏
member는 optional값이 아닌 것 같은데 옵셔널 체이닝을 없애도 괜찮을 것 같아요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수정하였습니다!
import useIsMaster from '@/hooks/useIsMaster'; | ||
import { customRender } from '@/utils/test-utils'; | ||
|
||
jest.mock('@/hooks/useIsMaster'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💭 질문 💭
API 응답값으로 isMaster를 판단했는데, useParams로 url을 판단하는 로직이 추가되어 master에 대한 테스트가 꼬였나보네요ㅜ
useParams를 모킹하는 것보다 useIsMaster이라는 커스텀훅을 따로 만들고 모킹한 이유가 궁금합니다!
useParams의 roomId만 모킹해서 msw 응답값이랑 맞추면 테스트 코드를 건드는 작업이 더 줄어들 것으로 생각이 드는데, 어떻게 생각하시나용
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
useIsMaster을 추가한 이유가 mocking 뿐만 아니라 컴포넌트에서 해당 hook 로직을 단순화하게 위해 만든 부분도 있습니다.
기존에는
const {member: { isMaster } } = useGetUserInfo()
이런식으로 가져와 useGetUserInfo의 내부 데이터 중 isMaster
하나만 있으면 되는데 불필요하게 유저 정보
의 전체 데이터를 다 가져오게 되더라고요. 그래서 로직이 다소 불명확하다고 생각해서 레이어를 하나 더 추가해
const isMaster = useIsMaster()
코드를 더 깔끔하게 변경하였습니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코멘트 확인했습니다!! 이유가 명확해서 좋네용 useIsMaster 커스텀훅을 통해 좀더 명확하게 방장 여부를 가져오고 + 반환값을 모킹하여 방장 로직 테스트가 가능해졌군요! 다시 생각해보니 useParams를 모킹하는 것보다 더 직관적이라는 생각도 드네요 굿굿 고생하셨습니다 approve할게요!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안뇽하십니까 폼에 ~ !!! 큰일 날 수도 있는 버그를 빠르고 깔끔하게 고쳐줘서 감사합니다 👏👏 !!!! 불필요한 코드들이 많이 줄어들어서 너무 좋네요 !!! 머지 전에 충돌이 나는 부분이 있어서 해결 부탁 드립니다 ~ ^.^ !!!
frontend/src/hooks/useGetUserInfo.ts
Outdated
@@ -19,7 +22,7 @@ const useGetUserInfo = (): RoomAndMember => { | |||
member: { | |||
memberId: data?.member?.memberId || 0, | |||
nickname: data?.member?.nickname || '', | |||
isMaster: data?.member?.isMaster || false, | |||
isMaster: Boolean(data?.member?.isMaster && Number(roomId) === data?.roomId), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💭 질문 💭
Number(roomId) === data?.roomId
이 부분이 추가되면서 현재 방의 방장인 경우에만 방장 권한을 가질 수 있게 된 건가요?!
const { | ||
member: { isMaster }, | ||
} = useGetUserInfo(); | ||
return isMaster; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🌸 칭찬 🌸
isMaster만 필요한데 사용자 정보 전부 불러와야 했던 것을 분리했군요 굿굿 !!!
|
||
import AlertModal from '@/components/AlertModal/AlertModal'; | ||
import Button from '@/components/common/Button/Button'; | ||
import { bottomButtonLayout } from '@/components/common/Button/Button.styled'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🌸 칭찬 🌸
이런 세세한 부분도 챙겨서 바꿔주신 디테일 ,, 머야머야 👍👍👍
const user = userEvent.setup(); | ||
(useIsMaster as jest.Mock).mockReturnValue(true); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💭 질문 💭
이렇게 하면 useIsMaster의 리턴 값을 true가 되도록 설정하는 건가요?
지금 생각났는데 자신의 userId와 다른 방에 접속하면 메인 화면으로 보내는 건 어떨까요? Number(roomId) !== data?.roomId 일 때 navigate('/', {replace: true}); 처럼요! |
좋을 것 같긴한데 그럼 한 번 방장이 된 후에 다른 사람에게 초대를 받아 다른 방을 들어간 경우에 방 접속이 안되지 않을까요? |
새로 들어가면 쿠키 갱신이 되서 방장이였던 방에선 안되지만 새로 들어간 방에선 될 것 같아요!!! 한번 확인해주시고 반영하면 좋을 것 같습니당 |
Issue Number
#404
As-Is
A 방의 방장이 B 방에 접속시 방장 권한을 얻는 문제 발생
To-Be
JWT에 담긴 정보에서의 방 번호와 현재 접속한 방 번호를 비교해 일치하지 않는 경우 방장 권한을 주지 않는 방식으로 변경
Check List
Test Screenshot
(Optional) Additional Description
방장 권한 확인 시 현재 URL를 확인하는 로직이 추가되어 테스트가 깨지는 문제가 발생 (테스트 환경에서는 URL에 방 번호가 없으므로)
useIsMaster를 mocking하는 방식으로 테스트 코드를 변경함
🌸 Storybook 배포 주소
🌸 Storybook 배포 주소