@@ -22,12 +22,22 @@ const user07PrivateUserID = "setUsername_07";
22
22
const username07 = "Username 07" ;
23
23
const user08PrivateUserID = "setUsername_08" ;
24
24
25
+ // private = public cases
26
+ // user09 - username === privateID
27
+ const user09PrivateUserID = "setUsername_09" ;
28
+ // user 10/11 - user 11 username === user 10 privateID
29
+ const user10PrivateUserID = "setUsername_10_collision" ;
30
+ const username10 = "setUsername_10" ;
31
+ const user11PrivateUserID = "setUsername_11" ;
32
+ const user12PrivateUserID = "setUsername_12" ;
33
+ const username12 = "Username 12" ;
34
+
25
35
async function addUsername ( userID : string , userName : string , locked = 0 ) {
26
36
await db . prepare ( "run" , 'INSERT INTO "userNames" ("userID", "userName", "locked") VALUES(?, ?, ?)' , [ userID , userName , locked ] ) ;
27
37
await addLogUserNameChange ( userID , userName ) ;
28
38
}
29
39
30
- async function getUsernameInfo ( userID : string ) : Promise < { userName : string , locked : string } > {
40
+ async function getUsernameInfo ( userID : string ) : Promise < { userName : string , locked : string } > {
31
41
const row = await db . prepare ( "get" , 'SELECT "userName", "locked" FROM "userNames" WHERE "userID" = ?' , [ userID ] ) ;
32
42
if ( ! row ) {
33
43
return null ;
@@ -88,6 +98,10 @@ describe("setUsername", () => {
88
98
await addUsername ( getHash ( user05PrivateUserID ) , username05 , 0 ) ;
89
99
await addUsername ( getHash ( user06PrivateUserID ) , username06 , 0 ) ;
90
100
await addUsername ( getHash ( user07PrivateUserID ) , username07 , 1 ) ;
101
+ await addUsername ( getHash ( user07PrivateUserID ) , username07 , 0 ) ;
102
+ await addUsername ( getHash ( user10PrivateUserID ) , username10 , 0 ) ;
103
+ // user11 skipped
104
+ await addUsername ( getHash ( user12PrivateUserID ) , username12 , 0 ) ;
91
105
} ) ;
92
106
93
107
it ( "Should be able to set username that has never been set" , ( done ) => {
@@ -240,6 +254,44 @@ describe("setUsername", () => {
240
254
const usernameInfo = await getUsernameInfo ( getHash ( user08PrivateUserID ) ) ;
241
255
assert . strictEqual ( usernameInfo , null ) ;
242
256
done ( ) ;
243
- } ) ;
257
+ } )
258
+ . catch ( ( err ) => done ( err ) ) ;
259
+ } ) ;
260
+
261
+ it ( "Should return error if trying to set username to privateID" , ( done ) => {
262
+ const privateID = user09PrivateUserID ;
263
+ postSetUserName ( privateID , privateID )
264
+ . then ( async ( res ) => {
265
+ assert . strictEqual ( res . status , 400 ) ;
266
+ const usernameInfo = await getUsernameInfo ( getHash ( privateID ) ) ;
267
+ assert . strictEqual ( usernameInfo , null ) ;
268
+ done ( ) ;
269
+ } )
270
+ . catch ( ( err ) => done ( err ) ) ;
271
+ } ) ;
272
+
273
+ it ( "Should return error if trying to set username to someone else's privateID" , ( done ) => {
274
+ const privateID = user11PrivateUserID ;
275
+ postSetUserName ( privateID , user10PrivateUserID )
276
+ . then ( async ( res ) => {
277
+ assert . strictEqual ( res . status , 400 ) ;
278
+ const usernameInfo = await getUsernameInfo ( getHash ( privateID ) ) ; // user 10's privateID
279
+ assert . strictEqual ( usernameInfo , null ) ;
280
+ done ( ) ;
281
+ } )
282
+ . catch ( ( err ) => done ( err ) ) ;
283
+ } ) ;
284
+
285
+ it ( "Should not return error if trying to set username to someone else's publicID" , ( done ) => {
286
+ const privateID = user12PrivateUserID ;
287
+ const user10PublicID = getHash ( user10PrivateUserID ) ;
288
+ postSetUserName ( privateID , user10PublicID )
289
+ . then ( async ( res ) => {
290
+ assert . strictEqual ( res . status , 200 ) ;
291
+ const usernameInfo = await getUsernameInfo ( getHash ( privateID ) ) ; // user 10's publicID
292
+ assert . strictEqual ( usernameInfo . userName , user10PublicID ) ;
293
+ done ( ) ;
294
+ } )
295
+ . catch ( ( err ) => done ( err ) ) ;
244
296
} ) ;
245
297
} ) ;
0 commit comments