@@ -10,9 +10,9 @@ describe('UserService 테스트', () => {
10
10
let userRepository : UserRepository ;
11
11
12
12
beforeEach ( ( ) => {
13
- // userRepository 모킹
14
13
userRepository = new UserRepository ( pool ) ;
15
14
userService = new UserService ( userRepository ) ;
15
+
16
16
jest . spyOn ( userService , 'findByVelogUUID' ) . mockResolvedValue ( {
17
17
id : 1 ,
18
18
velog_uuid : '1' ,
@@ -39,43 +39,90 @@ describe('UserService 테스트', () => {
39
39
updated_at : new Date ( ) ,
40
40
} ) ;
41
41
} ) ;
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
+
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
+
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 ( ) ;
42
87
} ) ;
43
88
44
- test ( 'handleUserTokensByVelogUUID 메서드 테스트' , async ( ) => {
89
+ test ( 'handleUserTokensByVelogUUID - 에러 처리' , async ( ) => {
90
+ jest . spyOn ( userService , 'findByVelogUUID' ) . mockRejectedValueOnce ( new Error ( 'DB 에러' ) ) ;
91
+
45
92
const mockUserData : UserWithTokenDto = {
46
93
id : '1' ,
47
94
48
95
accessToken : 'accessToken' ,
49
96
refreshToken : 'refreshToken' ,
50
97
} ;
51
98
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
+
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' ,
76
118
} ) ;
77
119
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 ( ) ;
80
127
} ) ;
81
128
} ) ;
0 commit comments