@@ -6,15 +6,21 @@ import { UuidParam } from '../api/validators/GenericRequests';
6
6
import { UserModel } from '../models/UserModel' ;
7
7
import { ControllerFactory } from './controllers' ;
8
8
import { DatabaseConnection , DataFactory , PostFactory , UserFactory } from './data' ;
9
- import e from 'express ' ;
10
- import exp from 'constants' ;
9
+ import { CreateUserRequest } from '../types ' ;
10
+
11
11
12
12
let uuidParam : UuidParam ;
13
13
let expectedUser : UserModel ;
14
14
let conn : Connection ;
15
15
let userController : UserController ;
16
16
let postController : PostController ;
17
17
18
+ // Helper function to omit a property from an object. Used for testing without the deprecated id property in UserModel.
19
+ function omit ( obj : any , keyToOmit : string ) {
20
+ return Object . fromEntries (
21
+ Object . entries ( obj ) . filter ( ( [ key ] ) => key !== keyToOmit )
22
+ ) ;
23
+ }
18
24
19
25
beforeAll ( async ( ) => {
20
26
await DatabaseConnection . connect ( ) ;
@@ -96,7 +102,8 @@ describe('user tests', () => {
96
102
if ( getUserResponse . user != undefined ) {
97
103
getUserResponse . user . stars = Number ( getUserResponse . user . stars ) ;
98
104
}
99
- expect ( getUserResponse . user ) . toEqual ( expectedUser ) ;
105
+
106
+ expect ( omit ( getUserResponse . user , 'id' ) ) . toEqual ( omit ( expectedUser , 'id' ) ) ;
100
107
} ) ;
101
108
102
109
test ( 'get user by email' , async ( ) => {
@@ -110,7 +117,7 @@ describe('user tests', () => {
110
117
if ( getUserResponse . user != undefined ) {
111
118
getUserResponse . user . stars = Number ( getUserResponse . user . stars ) ;
112
119
}
113
- expect ( getUserResponse . user ) . toEqual ( expectedUser ) ;
120
+ expect ( omit ( getUserResponse . user , 'id' ) ) . toEqual ( omit ( expectedUser , 'id' ) ) ;
114
121
} ) ;
115
122
116
123
test ( 'get user by google id' , async ( ) => {
@@ -124,7 +131,7 @@ describe('user tests', () => {
124
131
if ( getUserResponse . user != undefined ) {
125
132
getUserResponse . user . stars = Number ( getUserResponse . user . stars ) ;
126
133
}
127
- expect ( getUserResponse . user ) . toEqual ( expectedUser ) ;
134
+ expect ( omit ( getUserResponse . user , 'id' ) ) . toEqual ( omit ( expectedUser , 'id' ) ) ;
128
135
} ) ;
129
136
130
137
test ( 'edit profile' , async ( ) => {
@@ -137,54 +144,75 @@ describe('user tests', () => {
137
144
await userController . editProfile ( {
138
145
photoUrlBase64 : undefined ,
139
146
username : undefined ,
140
- venmoHandle : '@ Shungo-Najima1' ,
147
+ venmoHandle : 'Shungo-Najima1' ,
141
148
bio : 'Mateo Slay'
142
149
} , user ) ;
143
150
144
151
expectedUser . bio = "Mateo Slay" ;
145
- expectedUser . venmoHandle = "@ Shungo-Najima1" ;
152
+ expectedUser . venmoHandle = "Shungo-Najima1" ;
146
153
147
154
const getUserResponse = await userController . getUserByGoogleId ( 'shungoGoogleID' ) ;
148
155
if ( getUserResponse . user != undefined ) {
149
156
getUserResponse . user . stars = Number ( getUserResponse . user . stars ) ;
150
157
}
151
- expect ( getUserResponse . user ) . toEqual ( expectedUser ) ;
158
+ expect ( omit ( getUserResponse . user , 'id' ) ) . toEqual ( omit ( expectedUser , 'id' ) ) ;
152
159
} ) ;
153
160
154
161
test ( 'set super admin status' , async ( ) => {
155
- const authController = ControllerFactory . auth ( conn ) ;
162
+ // Create super admin user first
163
+ const superAdmin = UserFactory . fake ( ) ;
164
+ superAdmin . email = '[email protected] ' ;
165
+ superAdmin . admin = true ;
166
+
167
+ await new DataFactory ( )
168
+ . createUsers ( superAdmin )
169
+ . write ( ) ;
156
170
157
- const createUserRequest = {
171
+ const createUserRequest : CreateUserRequest = {
158
172
username : "admin" ,
159
173
netid : "adm999" ,
160
174
givenName : "administrator" ,
161
175
familyName : "Weiner" ,
162
176
photoUrl : "https://melmagazine.com/wp-content/uploads/2021/01/66f-1.jpg" ,
163
- venmoHandle : "@ admin-Weiner" ,
164
-
177
+ venmoHandle : "admin-Weiner" ,
178
+
165
179
googleId : "mateoGoogleId" ,
166
180
bio : "Personally, I would not stand for this." ,
181
+ fcmToken : ""
167
182
}
168
183
169
- const createUserRequestResponse = await authController . createUser ( createUserRequest ) ;
184
+ // Create a new regular user
185
+ const newUser = await userController . createUser ( superAdmin , createUserRequest ) ;
186
+ expect ( newUser . admin ) . toEqual ( false ) ; // New users should not be admin by default
170
187
171
- expect ( createUserRequestResponse . user ?. admin ) . toEqual ( true ) ;
188
+ // Make the user an admin using setAdmin
189
+ const setAdminResponse = await userController . setAdmin ( {
190
+ email : createUserRequest . email ,
191
+ status : true
192
+ } , superAdmin ) ;
193
+ expect ( setAdminResponse . user ?. admin ) . toBe ( true ) ;
172
194
} ) ;
173
195
174
196
test ( 'set admin status from super user' , async ( ) => {
175
- const admin = UserFactory . fakeTemplate ( ) ;
176
- admin . email = '[email protected] ' ;
177
- let user = UserFactory . fake ( ) ;
197
+ // Create super admin user first
198
+ const superAdmin = UserFactory . fake ( ) ;
199
+ superAdmin . email = '[email protected] ' ;
200
+ superAdmin . admin = true ;
201
+
202
+ // Create a regular user
203
+ const regularUser = UserFactory . fake ( ) ;
204
+ regularUser . email = regularUser . netid + '@cornell.edu' ;
178
205
179
206
await new DataFactory ( )
180
- . createUsers ( admin , user )
207
+ . createUsers ( superAdmin , regularUser )
181
208
. write ( ) ;
182
209
183
- expectedUser . admin = true ;
184
-
185
- const getUserResponse = await userController . setAdmin ( { email : user . email , status : true } , admin ) ;
186
-
187
- expect ( getUserResponse . user ?. admin ) . toBe ( true ) ;
210
+ // Make the regular user an admin
211
+ const setAdminResponse = await userController . setAdmin ( {
212
+ email : regularUser . email ,
213
+ status : true
214
+ } , superAdmin ) ;
215
+ expect ( setAdminResponse . user ?. admin ) . toBe ( true ) ;
188
216
} ) ;
189
217
190
218
test ( 'block users' , async ( ) => {
@@ -438,9 +466,9 @@ describe('user tests', () => {
438
466
if ( getUserResponse . user != undefined ) {
439
467
getUserResponse . user . stars = Number ( getUserResponse . user . stars ) ;
440
468
}
441
- expect ( getUserResponse . user ) . toEqual ( expectedUser ) ;
469
+ expect ( omit ( getUserResponse . user , 'id' ) ) . toEqual ( omit ( expectedUser , 'id' ) ) ;
442
470
443
- const deleteUserResponse = await userController . deleteUser ( uuidParam , user ) ;
471
+ const deleteUserResponse = await userController . deleteUserByOtherUser ( uuidParam , user ) ;
444
472
if ( deleteUserResponse . user != undefined ) {
445
473
deleteUserResponse . user . stars = Number ( deleteUserResponse . user . stars ) ;
446
474
}
@@ -460,7 +488,7 @@ describe('user tests', () => {
460
488
const preDeleteUserResponse = await userController . getUsers ( admin ) ;
461
489
expect ( preDeleteUserResponse . users ) . toHaveLength ( 2 ) ;
462
490
463
- const deleteUserResponse = await userController . deleteUser ( uuidParam , admin ) ;
491
+ const deleteUserResponse = await userController . deleteUserByOtherUser ( uuidParam , admin ) ;
464
492
if ( deleteUserResponse . user != undefined ) {
465
493
deleteUserResponse . user . stars = Number ( deleteUserResponse . user . stars ) ;
466
494
}
@@ -476,7 +504,7 @@ describe('user tests', () => {
476
504
. write ( ) ;
477
505
478
506
try {
479
- await userController . deleteUser ( { firebaseUid : user2 . firebaseUid } , user1 ) ;
507
+ await userController . deleteUserByOtherUser ( { id : user2 . firebaseUid } , user1 ) ;
480
508
} catch ( error ) {
481
509
expect ( error . message ) . toBe ( 'User does not have permission to delete other users' ) ;
482
510
}
0 commit comments