@@ -1218,4 +1218,135 @@ describe("Discord actions", function () {
12181218 } ) ;
12191219 } ) ;
12201220 } ) ;
1221+
1222+ describe ( "GET /discord-actions/groups (getPaginatedAllGroupRoles)" , function ( ) {
1223+ let userId ;
1224+ let userAuthToken ;
1225+
1226+ beforeEach ( async function ( ) {
1227+ // Create a standard user instead of a superuser
1228+ const user = await addUser ( userData [ 0 ] ) ; // Assume userData[0] is a standard user fixture
1229+ userId = user ;
1230+ userAuthToken = authService . generateAuthToken ( { userId } ) ;
1231+
1232+ // Mock adding roles to the database
1233+ await discordRoleModel . add ( groupData [ 0 ] ) ;
1234+ await discordRoleModel . add ( groupData [ 1 ] ) ;
1235+ } ) ;
1236+
1237+ afterEach ( async function ( ) {
1238+ sinon . restore ( ) ;
1239+ await cleanDb ( ) ;
1240+ } ) ;
1241+
1242+ it ( "should return paginated results when dev=true is passed" , function ( done ) {
1243+ chai
1244+ . request ( app )
1245+ . get ( "/discord-actions/groups?dev=true&page=1&size=10" )
1246+ . set ( "cookie" , `${ cookieName } =${ userAuthToken } ` )
1247+ . end ( ( err , res ) => {
1248+ if ( err ) {
1249+ return done ( err ) ;
1250+ }
1251+
1252+ expect ( res ) . to . have . status ( 200 ) ;
1253+ expect ( res . body ) . to . be . an ( "object" ) ;
1254+ expect ( res . body . message ) . to . equal ( "Roles fetched successfully!" ) ;
1255+ expect ( res . body . groups ) . to . be . an ( "array" ) ;
1256+
1257+ const groups = res . body . groups ;
1258+ groups . forEach ( ( group ) => {
1259+ expect ( group ) . to . have . keys ( [
1260+ "roleid" ,
1261+ "rolename" ,
1262+ "memberCount" ,
1263+ "firstName" ,
1264+ "lastName" ,
1265+ "image" ,
1266+ "isMember" ,
1267+ ] ) ;
1268+ } ) ;
1269+
1270+ expect ( res . body . links ) . to . have . keys ( [ "next" , "prev" ] ) ;
1271+ return done ( ) ;
1272+ } ) ;
1273+ } ) ;
1274+
1275+ it ( "should return null for next link on the last page" , function ( done ) {
1276+ const size = 10 ;
1277+ const page = 2 ; // Assume this is the last page based on dataset size
1278+
1279+ chai
1280+ . request ( app )
1281+ . get ( `/discord-actions/groups?dev=true&page=${ page } &size=${ size } ` )
1282+ . set ( "cookie" , `${ cookieName } =${ userAuthToken } ` )
1283+ . end ( ( err , res ) => {
1284+ if ( err ) {
1285+ return done ( err ) ;
1286+ }
1287+
1288+ expect ( res ) . to . have . status ( 200 ) ;
1289+ expect ( res . body ) . to . be . an ( "object" ) ;
1290+ expect ( res . body . message ) . to . equal ( "Roles fetched successfully!" ) ;
1291+ expect ( res . body . groups ) . to . be . an ( "array" ) ;
1292+ expect ( res . body . links ) . to . have . keys ( [ "next" , "prev" ] ) ;
1293+ // eslint-disable-next-line no-unused-expressions
1294+ expect ( res . body . links . next ) . to . be . null ; // Assert next is null
1295+ expect ( res . body . links . prev ) . to . equal ( `/discord-actions/groups?page=${ page - 1 } &size=${ size } &dev=true` ) ;
1296+ return done ( ) ;
1297+ } ) ;
1298+ } ) ;
1299+
1300+ it ( "should return a bad request error for invalid size parameter" , function ( done ) {
1301+ chai
1302+ . request ( app )
1303+ . get ( "/discord-actions/groups?dev=true&size=101&page=1" )
1304+ . set ( "cookie" , `${ cookieName } =${ userAuthToken } ` )
1305+ . end ( ( _err , res ) => {
1306+ expect ( res ) . to . have . status ( 400 ) ;
1307+ expect ( res . body ) . to . be . an ( "object" ) ;
1308+ expect ( res . body . message ) . to . equal ( '"size" must be less than or equal to 100' ) ;
1309+ return done ( ) ;
1310+ } ) ;
1311+ } ) ;
1312+
1313+ it ( "should return an empty array for groups on a page with no data" , function ( done ) {
1314+ const size = 10 ;
1315+ const page = 100 ; // Assume this page exceeds the dataset size
1316+
1317+ chai
1318+ . request ( app )
1319+ . get ( `/discord-actions/groups?dev=true&page=${ page } &size=${ size } ` )
1320+ . set ( "cookie" , `${ cookieName } =${ userAuthToken } ` )
1321+ . end ( ( _err , res ) => {
1322+ expect ( res ) . to . have . status ( 200 ) ;
1323+ expect ( res . body ) . to . be . an ( "object" ) ;
1324+ expect ( res . body . message ) . to . equal ( "Roles fetched successfully!" ) ;
1325+ // eslint-disable-next-line no-unused-expressions
1326+ expect ( res . body . groups ) . to . be . an ( "array" ) . that . is . empty ; // Assert empty groups
1327+ expect ( res . body . links ) . to . have . keys ( [ "next" , "prev" ] ) ;
1328+ // eslint-disable-next-line no-unused-expressions
1329+ expect ( res . body . links . next ) . to . be . null ;
1330+ expect ( res . body . links . prev ) . to . equal ( `/discord-actions/groups?page=${ page - 1 } &size=${ size } &dev=true` ) ;
1331+ return done ( ) ;
1332+ } ) ;
1333+ } ) ;
1334+
1335+ it ( "should handle internal server errors" , function ( done ) {
1336+ sinon . stub ( discordRolesModel , "getPaginatedGroupRolesByPage" ) . throws ( new Error ( "Database error" ) ) ;
1337+
1338+ chai
1339+ . request ( app )
1340+ . get ( "/discord-actions/groups?dev=true" )
1341+ . set ( "cookie" , `${ cookieName } =${ userAuthToken } ` )
1342+ // eslint-disable-next-line node/handle-callback-err
1343+ . end ( ( err , res ) => {
1344+ expect ( res ) . to . have . status ( 500 ) ;
1345+ expect ( res . body ) . to . be . an ( "object" ) ;
1346+ expect ( res . body . message ) . to . equal ( "An internal server error occurred" ) ;
1347+ sinon . restore ( ) ;
1348+ return done ( ) ;
1349+ } ) ;
1350+ } ) ;
1351+ } ) ;
12211352} ) ;
0 commit comments