1+ import { GroupRole } from "@generated/client" ;
12import { Test , TestingModule } from "@nestjs/testing" ;
23import { Request , Response } from "express" ;
34import { DatabaseService } from "../database/database.service" ;
@@ -38,6 +39,15 @@ describe("AuthController", () => {
3839 isUserSystemAdmin : jest . fn ( ) . mockResolvedValue ( false ) ,
3940 } as unknown as jest . Mocked < Pick < DatabaseService , "isUserSystemAdmin" > > ;
4041
42+ groupService = {
43+ getUserGroups : jest . fn ( ) . mockResolvedValue ( [ ] ) ,
44+ getAllGroups : jest . fn ( ) . mockResolvedValue ( [ ] ) ,
45+ } as unknown as jest . Mocked < GroupService > ;
46+
47+ databaseService = {
48+ isUserSystemAdmin : jest . fn ( ) . mockResolvedValue ( false ) ,
49+ } as unknown as jest . Mocked < Pick < DatabaseService , "isUserSystemAdmin" > > ;
50+
4151 res = {
4252 redirect : jest . fn ( ) ,
4353 status : jest . fn ( ) . mockReturnThis ( ) ,
@@ -328,31 +338,36 @@ describe("AuthController", () => {
328338 } ) ;
329339
330340 describe ( "getMe" , ( ) => {
331- it ( "should return user profile with groups from JWT payload " , async ( ) => {
341+ it ( "should return user profile with isAdmin false and groups including role " , async ( ) => {
332342 const user : User = {
333343 sub : "user-123" ,
334344 name : "Test User" ,
335345 preferred_username : "testuser" ,
336346 email : "test@example.com" ,
337- roles : [ "admin" ] ,
338347 exp : Math . floor ( Date . now ( ) / 1000 ) + 3600 ,
339348 } ;
340349 req . user = user ;
341- const userGroups = [ { id : "group-1" , name : "Group One" } ] ;
350+ req . resolvedIdentity = { userId : user . sub } ;
351+ const userGroups = [
352+ { id : "group-1" , name : "Group One" , role : GroupRole . MEMBER } ,
353+ ] ;
342354 groupService . getUserGroups . mockResolvedValue ( userGroups ) ;
343355
344356 const result = await controller . getMe ( req as Request ) ;
345357
346358 expect ( databaseService . isUserSystemAdmin ) . toHaveBeenCalledWith (
347359 "user-123" ,
348360 ) ;
349- expect ( groupService . getUserGroups ) . toHaveBeenCalledWith ( "user-123" ) ;
361+ expect ( groupService . getUserGroups ) . toHaveBeenCalledWith (
362+ "user-123" ,
363+ "user-123" ,
364+ ) ;
350365 expect ( result ) . toEqual ( {
351366 sub : "user-123" ,
352367 name : "Test User" ,
353368 preferred_username : "testuser" ,
354369 email : "test@example.com" ,
355- roles : [ "admin" ] ,
370+ isAdmin : false ,
356371 expires_in : expect . any ( Number ) ,
357372 groups : userGroups ,
358373 } ) ;
@@ -363,10 +378,10 @@ describe("AuthController", () => {
363378 it ( "should return empty groups array for user with no memberships" , async ( ) => {
364379 const user : User = {
365380 sub : "user-456" ,
366- roles : [ ] ,
367381 exp : Math . floor ( Date . now ( ) / 1000 ) + 100 ,
368382 } ;
369383 req . user = user ;
384+ req . resolvedIdentity = { userId : user . sub } ;
370385 groupService . getUserGroups . mockResolvedValue ( [ ] ) ;
371386
372387 const result = await controller . getMe ( req as Request ) ;
@@ -375,47 +390,51 @@ describe("AuthController", () => {
375390 expect ( result . name ) . toBeUndefined ( ) ;
376391 expect ( result . preferred_username ) . toBeUndefined ( ) ;
377392 expect ( result . email ) . toBeUndefined ( ) ;
378- expect ( result . roles ) . toEqual ( [ ] ) ;
393+ expect ( result . isAdmin ) . toBe ( false ) ;
379394 expect ( result . groups ) . toEqual ( [ ] ) ;
380395 } ) ;
381396
382- it ( "should return all groups for a system-admin user" , async ( ) => {
397+ it ( "should return user groups with isAdmin true for a system-admin user" , async ( ) => {
383398 const user : User = {
384399 sub : "admin-user" ,
385400 name : "Admin User" ,
386- roles : [ "system-admin" ] ,
387401 exp : Math . floor ( Date . now ( ) / 1000 ) + 3600 ,
388402 } ;
389403 req . user = user ;
390- const allGroups = [
391- { id : "group-1" , name : "Group One" } ,
392- { id : "group-2 " , name : "Group Two" } ,
404+ req . resolvedIdentity = { userId : user . sub } ;
405+ const adminGroups = [
406+ { id : "group-1 " , name : "Group One" , role : GroupRole . ADMIN } ,
393407 ] ;
394408 ( databaseService . isUserSystemAdmin as jest . Mock ) . mockResolvedValue ( true ) ;
395- groupService . getAllGroups . mockResolvedValue ( allGroups ) ;
409+ groupService . getUserGroups . mockResolvedValue ( adminGroups ) ;
396410
397411 const result = await controller . getMe ( req as Request ) ;
398412
399413 expect ( databaseService . isUserSystemAdmin ) . toHaveBeenCalledWith (
400414 "admin-user" ,
401415 ) ;
402- expect ( groupService . getAllGroups ) . toHaveBeenCalled ( ) ;
403- expect ( groupService . getUserGroups ) . not . toHaveBeenCalled ( ) ;
404- expect ( result . groups ) . toEqual ( allGroups ) ;
416+ expect ( groupService . getUserGroups ) . toHaveBeenCalledWith (
417+ "admin-user" ,
418+ "admin-user" ,
419+ ) ;
420+ expect ( groupService . getAllGroups ) . not . toHaveBeenCalled ( ) ;
421+ expect ( result . isAdmin ) . toBe ( true ) ;
422+ expect ( result . groups ) . toEqual ( adminGroups ) ;
405423 } ) ;
406424
407425 it ( "should return 0 expires_in if token is expired" , async ( ) => {
408426 const user : User = {
409427 sub : "user-789" ,
410- roles : [ ] ,
411428 exp : Math . floor ( Date . now ( ) / 1000 ) - 100 , // expired
412429 } ;
413430 req . user = user ;
431+ req . resolvedIdentity = { userId : user . sub } ;
414432
415433 const result = await controller . getMe ( req as Request ) ;
416434
417435 expect ( result . expires_in ) . toBe ( 0 ) ;
418436 expect ( result . groups ) . toEqual ( [ ] ) ;
437+ expect ( result . groups ) . toEqual ( [ ] ) ;
419438 } ) ;
420439 } ) ;
421440} ) ;
0 commit comments