@@ -10,9 +10,9 @@ describe('UserService 테스트', () => {
1010 let userRepository : UserRepository ;
1111
1212 beforeEach ( ( ) => {
13- // userRepository 모킹
1413 userRepository = new UserRepository ( pool ) ;
1514 userService = new UserService ( userRepository ) ;
15+
1616 jest . spyOn ( userService , 'findByVelogUUID' ) . mockResolvedValue ( {
1717 id : 1 ,
1818 velog_uuid : '1' ,
@@ -39,43 +39,90 @@ describe('UserService 테스트', () => {
3939 updated_at : new Date ( ) ,
4040 } ) ;
4141 } ) ;
42+
43+ jest . spyOn ( userService as any , 'encryptTokens' ) . mockReturnValue ( {
44+ encryptedAccessToken : 'encryptedAccessToken' ,
45+ encryptedRefreshToken : 'encryptedRefreshToken' ,
46+ } ) ;
47+
48+ // userRepository의 createUser모킹하기
49+ jest . spyOn ( userRepository , 'createUser' ) . mockImplementation ( ( ) => { } ) ;
50+ } ) ;
51+
52+ test ( 'handleUserTokensByVelogUUID - 기존 사용자 토큰 업데이트' , async ( ) => {
53+ // 사용자가 존재하는 경우 테스트
54+ const mockUserData : UserWithTokenDto = {
55+ id : '1' ,
56+ email : 'test@test.com' ,
57+ accessToken : 'accessToken' ,
58+ refreshToken : 'refreshToken' ,
59+ } ;
60+
61+ const result = await userService . handleUserTokensByVelogUUID ( mockUserData ) ;
62+
63+ expect ( result ) . toBeDefined ( ) ;
64+ expect ( userService . findByVelogUUID ) . toHaveBeenCalledWith ( '1' ) ;
65+ expect ( ( userService as any ) . encryptTokens ) . toHaveBeenCalled ( ) ;
66+ expect ( userRepository . updateTokens ) . toHaveBeenCalledWith ( '1' , 'encryptedAccessToken' , 'encryptedRefreshToken' ) ;
67+ } ) ;
68+
69+ test ( 'handleUserTokensByVelogUUID - 새 사용자 생성' , async ( ) => {
70+ // findByVelogUUID가 null 반환하도록 재설정
71+ jest . spyOn ( userService , 'findByVelogUUID' ) . mockResolvedValueOnce ( null ) ;
72+
73+ const mockUserData : UserWithTokenDto = {
74+ id : '1' ,
75+ email : 'test@test.com' ,
76+ accessToken : 'accessToken' ,
77+ refreshToken : 'refreshToken' ,
78+ } ;
79+
80+ const result = await userService . handleUserTokensByVelogUUID ( mockUserData ) ;
81+
82+ expect ( result ) . toBeDefined ( ) ;
83+ expect ( userService . findByVelogUUID ) . toHaveBeenCalledWith ( '1' ) ;
84+ expect ( userService . createUser ) . toHaveBeenCalledWith ( mockUserData ) ;
85+ expect ( ( userService as any ) . encryptTokens ) . toHaveBeenCalled ( ) ;
86+ expect ( userRepository . updateTokens ) . toHaveBeenCalled ( ) ;
4287 } ) ;
4388
44- test ( 'handleUserTokensByVelogUUID 메서드 테스트' , async ( ) => {
89+ test ( 'handleUserTokensByVelogUUID - 에러 처리' , async ( ) => {
90+ jest . spyOn ( userService , 'findByVelogUUID' ) . mockRejectedValueOnce ( new Error ( 'DB 에러' ) ) ;
91+
4592 const mockUserData : UserWithTokenDto = {
4693 id : '1' ,
4794 email : 'test@test.com' ,
4895 accessToken : 'accessToken' ,
4996 refreshToken : 'refreshToken' ,
5097 } ;
5198
52- const { id, email, accessToken, refreshToken } = mockUserData ;
53-
54- let user = await userService . findByVelogUUID ( id ) ;
55- if ( ! user ) {
56- user = await userService . createUser ( mockUserData ) ;
57- }
58-
59- expect ( user ) . toBeDefined ( ) ;
60- expect ( user ?. id ) . toBe ( Number ( id ) ) ;
61- expect ( user ?. email ) . toBe ( email ) ;
62- expect ( user ?. access_token ) . toBe ( accessToken ) ;
63- expect ( user ?. refresh_token ) . toBe ( refreshToken ) ;
64-
65- const { encryptedAccessToken, encryptedRefreshToken } = ( userService as any ) . encryptTokens (
66- user . group_id ,
67- accessToken ,
68- refreshToken ,
69- ) ;
70-
71- const result = await userService . updateUserTokens ( {
72- id,
73- email,
74- accessToken : encryptedAccessToken ,
75- refreshToken : encryptedRefreshToken ,
99+ await expect ( userService . handleUserTokensByVelogUUID ( mockUserData ) ) . rejects . toThrow ( ) ;
100+ } ) ;
101+
102+ test ( 'findSampleUser 메서드 테스트' , async ( ) => {
103+ jest . spyOn ( userRepository , 'findSampleUser' ) . mockResolvedValue ( {
104+ id : 1 ,
105+ velog_uuid : '1' ,
106+ access_token : 'encryptedAccessToken' ,
107+ refresh_token : 'encryptedRefreshToken' ,
108+ group_id : 1 ,
109+ email : 'test@test.com' ,
110+ is_active : true ,
111+ created_at : new Date ( ) ,
112+ updated_at : new Date ( ) ,
113+ } ) ;
114+
115+ jest . spyOn ( userService as any , 'decryptTokens' ) . mockReturnValue ( {
116+ decryptedAccessToken : 'decryptedAccessToken' ,
117+ decryptedRefreshToken : 'decryptedRefreshToken' ,
76118 } ) ;
77119
78- expect ( result ?. access_token ) . toBe ( encryptedAccessToken ) ;
79- expect ( result ?. refresh_token ) . toBe ( encryptedRefreshToken ) ;
120+ const result = await userService . findSampleUser ( ) ;
121+
122+ expect ( result ) . toBeDefined ( ) ;
123+ expect ( result . decryptedAccessToken ) . toBe ( 'decryptedAccessToken' ) ;
124+ expect ( result . decryptedRefreshToken ) . toBe ( 'decryptedRefreshToken' ) ;
125+ expect ( userRepository . findSampleUser ) . toHaveBeenCalled ( ) ;
126+ expect ( ( userService as any ) . decryptTokens ) . toHaveBeenCalled ( ) ;
80127 } ) ;
81128} ) ;
0 commit comments