2021-11-15 06:13:48 +00:00
import * as request from 'supertest' ;
import { INestApplication } from '@nestjs/common' ;
2022-01-31 05:45:44 +00:00
import {
clearDB ,
createApplication ,
createUser ,
createNestAppInstance ,
createGroupPermission ,
createUserGroupPermissions ,
createAppGroupPermission ,
2023-04-06 11:12:58 +00:00
authenticateUser ,
2022-01-31 05:45:44 +00:00
} from '../test.helper' ;
2021-11-15 06:13:48 +00:00
import { getManager } from 'typeorm' ;
import { Folder } from 'src/entities/folder.entity' ;
import { FolderApp } from 'src/entities/folder_app.entity' ;
2022-01-31 05:45:44 +00:00
import { GroupPermission } from 'src/entities/group_permission.entity' ;
2021-11-15 06:13:48 +00:00
describe ( 'folders controller' , ( ) = > {
let nestApp : INestApplication ;
beforeEach ( async ( ) = > {
await clearDB ( ) ;
} ) ;
beforeAll ( async ( ) = > {
nestApp = await createNestAppInstance ( ) ;
} ) ;
describe ( 'GET /api/folders' , ( ) = > {
it ( 'should allow only authenticated users to list folders' , async ( ) = > {
await request ( nestApp . getHttpServer ( ) ) . get ( '/api/folders' ) . expect ( 401 ) ;
} ) ;
it ( 'should list all folders in an organization' , async ( ) = > {
const adminUserData = await createUser ( nestApp , {
email : 'admin@tooljet.io' ,
} ) ;
const { user } = adminUserData ;
2023-04-06 11:12:58 +00:00
const loggedUser = await authenticateUser ( nestApp ) ;
2021-11-15 06:13:48 +00:00
const folder = await getManager ( ) . save ( Folder , {
name : 'Folder1' ,
organizationId : adminUserData.organization.id ,
} ) ;
await getManager ( ) . save ( Folder , {
name : 'Folder2' ,
organizationId : adminUserData.organization.id ,
} ) ;
await getManager ( ) . save ( Folder , {
name : 'Folder3' ,
organizationId : adminUserData.organization.id ,
} ) ;
await getManager ( ) . save ( Folder , {
name : 'Folder4' ,
organizationId : adminUserData.organization.id ,
} ) ;
const appInFolder = await createApplication ( nestApp , {
name : 'App in folder' ,
user : adminUserData.user ,
} ) ;
await getManager ( ) . save ( FolderApp , {
app : appInFolder ,
folder : folder ,
} ) ;
const anotherUserData = await createUser ( nestApp , {
email : 'admin@organization.com' ,
} ) ;
await getManager ( ) . save ( Folder , {
name : 'Folder1' ,
organizationId : anotherUserData.organization.id ,
} ) ;
2021-12-22 09:07:37 +00:00
let response = await request ( nestApp . getHttpServer ( ) )
2021-11-15 06:13:48 +00:00
. get ( ` /api/folders ` )
2023-04-06 11:12:58 +00:00
. set ( 'tj-workspace-id' , user . defaultOrganizationId )
. set ( 'Cookie' , loggedUser . tokenCookie ) ;
2021-11-15 06:13:48 +00:00
expect ( response . statusCode ) . toBe ( 200 ) ;
expect ( new Set ( Object . keys ( response . body ) ) ) . toEqual ( new Set ( [ 'folders' ] ) ) ;
2021-12-22 09:07:37 +00:00
let { folders } = response . body ;
2021-11-15 06:13:48 +00:00
expect ( new Set ( folders . map ( ( folder ) = > folder . name ) ) ) . toEqual (
new Set ( [ 'Folder1' , 'Folder2' , 'Folder3' , 'Folder4' ] )
) ;
2021-12-22 09:07:37 +00:00
let folder1 = folders [ 0 ] ;
2021-11-15 06:13:48 +00:00
expect ( new Set ( Object . keys ( folder1 ) ) ) . toEqual (
2025-02-25 06:52:50 +00:00
new Set ( [ 'id' , 'name' , 'organization_id' , 'created_at' , 'updated_at' , 'folder_apps' , 'count' , 'type' ] )
2021-11-15 06:13:48 +00:00
) ;
expect ( folder1 . organization_id ) . toEqual ( user . organizationId ) ;
expect ( folder1 . count ) . toEqual ( 1 ) ;
2021-12-22 09:07:37 +00:00
response = await request ( nestApp . getHttpServer ( ) )
. get ( ` /api/folders?searchKey=app in ` )
2023-04-06 11:12:58 +00:00
. set ( 'tj-workspace-id' , user . defaultOrganizationId )
. set ( 'Cookie' , loggedUser . tokenCookie ) ;
2021-12-22 09:07:37 +00:00
expect ( response . statusCode ) . toBe ( 200 ) ;
expect ( new Set ( Object . keys ( response . body ) ) ) . toEqual ( new Set ( [ 'folders' ] ) ) ;
( { folders } = response . body ) ;
expect ( new Set ( folders . map ( ( folder ) = > folder . name ) ) ) . toEqual (
new Set ( [ 'Folder1' , 'Folder2' , 'Folder3' , 'Folder4' ] )
) ;
folder1 = folders [ 0 ] ;
expect ( new Set ( Object . keys ( folder1 ) ) ) . toEqual (
2025-02-25 06:52:50 +00:00
new Set ( [ 'id' , 'name' , 'organization_id' , 'created_at' , 'updated_at' , 'folder_apps' , 'count' , 'type' ] )
2021-12-22 09:07:37 +00:00
) ;
expect ( folder1 . organization_id ) . toEqual ( user . organizationId ) ;
expect ( folder1 . count ) . toEqual ( 1 ) ;
response = await request ( nestApp . getHttpServer ( ) )
. get ( ` /api/folders?searchKey=some text ` )
2023-04-06 11:12:58 +00:00
. set ( 'tj-workspace-id' , user . defaultOrganizationId )
. set ( 'Cookie' , loggedUser . tokenCookie ) ;
2021-12-22 09:07:37 +00:00
expect ( response . statusCode ) . toBe ( 200 ) ;
expect ( new Set ( Object . keys ( response . body ) ) ) . toEqual ( new Set ( [ 'folders' ] ) ) ;
( { folders } = response . body ) ;
expect ( new Set ( folders . map ( ( folder ) = > folder . name ) ) ) . toEqual (
new Set ( [ 'Folder1' , 'Folder2' , 'Folder3' , 'Folder4' ] )
) ;
folder1 = folders [ 0 ] ;
expect ( new Set ( Object . keys ( folder1 ) ) ) . toEqual (
2025-02-25 06:52:50 +00:00
new Set ( [ 'id' , 'name' , 'organization_id' , 'created_at' , 'updated_at' , 'folder_apps' , 'count' , 'type' ] )
) ;
expect ( folder1 . organization_id ) . toEqual ( user . organizationId ) ;
expect ( folder1 . count ) . toEqual ( 0 ) ;
} ) ;
it ( 'super admin should able to list all folders in an organization' , async ( ) = > {
const adminUserData = await createUser ( nestApp , {
email : 'admin@tooljet.io' ,
} ) ;
const superAdminUserData = await createUser ( nestApp , {
email : 'superadmin@tooljet.io' ,
userType : 'instance' ,
} ) ;
const { user } = adminUserData ;
let loggedUser = await authenticateUser ( nestApp ) ;
adminUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
loggedUser = await authenticateUser (
nestApp ,
superAdminUserData . user . email ,
'password' ,
adminUserData . organization . id
) ;
superAdminUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
const folder = await getManager ( ) . save ( Folder , {
name : 'Folder1' ,
organizationId : adminUserData.organization.id ,
} ) ;
await getManager ( ) . save ( Folder , {
name : 'Folder2' ,
organizationId : adminUserData.organization.id ,
} ) ;
await getManager ( ) . save ( Folder , {
name : 'Folder3' ,
organizationId : adminUserData.organization.id ,
} ) ;
await getManager ( ) . save ( Folder , {
name : 'Folder4' ,
organizationId : adminUserData.organization.id ,
} ) ;
const appInFolder = await createApplication ( nestApp , {
name : 'App in folder' ,
user : adminUserData.user ,
} ) ;
await getManager ( ) . save ( FolderApp , {
app : appInFolder ,
folder : folder ,
} ) ;
const anotherUserData = await createUser ( nestApp , {
email : 'admin@organization.com' ,
} ) ;
await getManager ( ) . save ( Folder , {
name : 'Folder1' ,
organizationId : anotherUserData.organization.id ,
} ) ;
let response = await request ( nestApp . getHttpServer ( ) )
. get ( ` /api/folders ` )
. set ( 'tj-workspace-id' , adminUserData . user . defaultOrganizationId )
. set ( 'Cookie' , superAdminUserData [ 'tokenCookie' ] ) ;
expect ( response . statusCode ) . toBe ( 200 ) ;
expect ( new Set ( Object . keys ( response . body ) ) ) . toEqual ( new Set ( [ 'folders' ] ) ) ;
let { folders } = response . body ;
expect ( new Set ( folders . map ( ( folder ) = > folder . name ) ) ) . toEqual (
new Set ( [ 'Folder1' , 'Folder2' , 'Folder3' , 'Folder4' ] )
) ;
let folder1 = folders [ 0 ] ;
expect ( new Set ( Object . keys ( folder1 ) ) ) . toEqual (
new Set ( [ 'id' , 'name' , 'organization_id' , 'created_at' , 'updated_at' , 'folder_apps' , 'count' , 'type' ] )
) ;
expect ( folder1 . organization_id ) . toEqual ( user . organizationId ) ;
expect ( folder1 . count ) . toEqual ( 1 ) ;
response = await request ( nestApp . getHttpServer ( ) )
. get ( ` /api/folders?searchKey=app in ` )
. set ( 'tj-workspace-id' , adminUserData . user . defaultOrganizationId )
. set ( 'Cookie' , superAdminUserData [ 'tokenCookie' ] ) ;
expect ( response . statusCode ) . toBe ( 200 ) ;
expect ( new Set ( Object . keys ( response . body ) ) ) . toEqual ( new Set ( [ 'folders' ] ) ) ;
( { folders } = response . body ) ;
expect ( new Set ( folders . map ( ( folder ) = > folder . name ) ) ) . toEqual (
new Set ( [ 'Folder1' , 'Folder2' , 'Folder3' , 'Folder4' ] )
) ;
folder1 = folders [ 0 ] ;
expect ( new Set ( Object . keys ( folder1 ) ) ) . toEqual (
new Set ( [ 'id' , 'name' , 'organization_id' , 'created_at' , 'updated_at' , 'folder_apps' , 'count' , 'type' ] )
) ;
expect ( folder1 . organization_id ) . toEqual ( user . organizationId ) ;
expect ( folder1 . count ) . toEqual ( 1 ) ;
response = await request ( nestApp . getHttpServer ( ) )
. get ( ` /api/folders?searchKey=some text ` )
. set ( 'tj-workspace-id' , adminUserData . user . defaultOrganizationId )
. set ( 'Cookie' , superAdminUserData [ 'tokenCookie' ] ) ;
expect ( response . statusCode ) . toBe ( 200 ) ;
expect ( new Set ( Object . keys ( response . body ) ) ) . toEqual ( new Set ( [ 'folders' ] ) ) ;
( { folders } = response . body ) ;
expect ( new Set ( folders . map ( ( folder ) = > folder . name ) ) ) . toEqual (
new Set ( [ 'Folder1' , 'Folder2' , 'Folder3' , 'Folder4' ] )
) ;
folder1 = folders [ 0 ] ;
expect ( new Set ( Object . keys ( folder1 ) ) ) . toEqual (
new Set ( [ 'id' , 'name' , 'organization_id' , 'created_at' , 'updated_at' , 'folder_apps' , 'count' , 'type' ] )
2021-12-22 09:07:37 +00:00
) ;
expect ( folder1 . organization_id ) . toEqual ( user . organizationId ) ;
expect ( folder1 . count ) . toEqual ( 0 ) ;
2021-11-15 06:13:48 +00:00
} ) ;
} ) ;
2022-01-31 05:45:44 +00:00
it ( 'should scope folders and app for user based on permission' , async ( ) = > {
const adminUserData = await createUser ( nestApp , {
email : 'admin@tooljet.io' ,
} ) ;
const newUserData = await createUser ( nestApp , {
email : 'developer@tooljet.io' ,
groups : [ 'all_users' ] ,
organization : adminUserData.organization ,
} ) ;
2023-04-06 11:12:58 +00:00
let loggedUser = await authenticateUser ( nestApp ) ;
adminUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
loggedUser = await authenticateUser ( nestApp , newUserData . user . email ) ;
newUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
2022-01-31 05:45:44 +00:00
const folder = await getManager ( ) . save ( Folder , {
name : 'Folder1' ,
organizationId : adminUserData.organization.id ,
} ) ;
const folder2 = await getManager ( ) . save ( Folder , {
name : 'Folder2' ,
organizationId : adminUserData.organization.id ,
} ) ;
await getManager ( ) . save ( Folder , {
name : 'Folder3' ,
organizationId : adminUserData.organization.id ,
} ) ;
await getManager ( ) . save ( Folder , {
name : 'Folder4' ,
organizationId : adminUserData.organization.id ,
} ) ;
const appInFolder = await createApplication ( nestApp , {
name : 'App in folder' ,
user : adminUserData.user ,
} ) ;
await getManager ( ) . save ( FolderApp , {
app : appInFolder ,
folder : folder ,
} ) ;
2023-07-11 04:40:03 +00:00
const appInFolder2 = await createApplication (
nestApp ,
{
name : 'App in folder 2' ,
user : adminUserData.user ,
} ,
false
) ;
2022-01-31 05:45:44 +00:00
await getManager ( ) . save ( FolderApp , {
app : appInFolder2 ,
folder : folder2 ,
} ) ;
2023-07-11 04:40:03 +00:00
await createApplication (
nestApp ,
{
name : 'Public App' ,
user : adminUserData.user ,
isPublic : true ,
} ,
false
) ;
2022-01-31 05:45:44 +00:00
const anotherUserData = await createUser ( nestApp , {
email : 'admin@organization.com' ,
} ) ;
await getManager ( ) . save ( Folder , {
name : 'another org folder' ,
organizationId : anotherUserData.organization.id ,
} ) ;
const findFolderAppsIn = ( folders , folderName ) = > folders . find ( ( f ) = > f . name === folderName ) [ 'folder_apps' ] ;
// admin can see all folders
let response = await request ( nestApp . getHttpServer ( ) )
. get ( ` /api/folders ` )
2023-04-06 11:12:58 +00:00
. set ( 'tj-workspace-id' , adminUserData . user . defaultOrganizationId )
. set ( 'Cookie' , adminUserData [ 'tokenCookie' ] ) ;
2022-01-31 05:45:44 +00:00
expect ( response . statusCode ) . toBe ( 200 ) ;
expect ( new Set ( Object . keys ( response . body ) ) ) . toEqual ( new Set ( [ 'folders' ] ) ) ;
let { folders } = response . body ;
expect ( new Set ( folders . map ( ( folder ) = > folder . name ) ) ) . toEqual (
new Set ( [ 'Folder1' , 'Folder2' , 'Folder3' , 'Folder4' ] )
) ;
expect ( findFolderAppsIn ( folders , 'Folder1' ) ) . toHaveLength ( 1 ) ;
expect ( findFolderAppsIn ( folders , 'Folder2' ) ) . toHaveLength ( 1 ) ;
expect ( findFolderAppsIn ( folders , 'Folder3' ) ) . toHaveLength ( 0 ) ;
expect ( findFolderAppsIn ( folders , 'Folder4' ) ) . toHaveLength ( 0 ) ;
// new user cannot see any folders without having apps with access
response = await request ( nestApp . getHttpServer ( ) )
. get ( ` /api/folders ` )
2023-04-06 11:12:58 +00:00
. set ( 'tj-workspace-id' , newUserData . user . defaultOrganizationId )
. set ( 'Cookie' , newUserData [ 'tokenCookie' ] ) ;
2022-01-31 05:45:44 +00:00
expect ( response . statusCode ) . toBe ( 200 ) ;
expect ( new Set ( Object . keys ( response . body ) ) ) . toEqual ( new Set ( [ 'folders' ] ) ) ;
folders = response . body . folders ;
expect ( folders ) . toEqual ( [ ] ) ;
// new user can only see folders having apps with read permissions
await createGroupPermission ( nestApp , {
group : 'folder-handler' ,
folderCreate : false ,
organization : newUserData.organization ,
} ) ;
2022-05-05 07:08:42 +00:00
const group = await getManager ( ) . findOneOrFail ( GroupPermission , {
2022-01-31 05:45:44 +00:00
where : { group : 'folder-handler' } ,
} ) ;
await createAppGroupPermission ( nestApp , appInFolder , group . id , {
read : true ,
} ) ;
await createUserGroupPermissions ( nestApp , newUserData . user , [ 'folder-handler' ] ) ;
response = await request ( nestApp . getHttpServer ( ) )
. get ( ` /api/folders ` )
2023-04-06 11:12:58 +00:00
. set ( 'tj-workspace-id' , newUserData . user . defaultOrganizationId )
. set ( 'Cookie' , newUserData [ 'tokenCookie' ] ) ;
2022-01-31 05:45:44 +00:00
expect ( response . statusCode ) . toBe ( 200 ) ;
folders = response . body . folders ;
expect ( new Set ( folders . map ( ( folder ) = > folder . name ) ) ) . toEqual ( new Set ( [ 'Folder1' ] ) ) ;
expect ( findFolderAppsIn ( folders , 'Folder1' ) [ 0 ] [ 'app_id' ] ) . toEqual ( appInFolder . id ) ;
// new user can only see all folders with folder create permissions but apps are scoped with read permissions
await getManager ( ) . update ( GroupPermission , group . id , {
folderCreate : true ,
} ) ;
response = await request ( nestApp . getHttpServer ( ) )
. get ( ` /api/folders ` )
2023-04-06 11:12:58 +00:00
. set ( 'tj-workspace-id' , newUserData . user . defaultOrganizationId )
. set ( 'Cookie' , newUserData [ 'tokenCookie' ] ) ;
2022-01-31 05:45:44 +00:00
expect ( response . statusCode ) . toBe ( 200 ) ;
folders = response . body . folders ;
expect ( new Set ( folders . map ( ( folder ) = > folder . name ) ) ) . toEqual (
new Set ( [ 'Folder1' , 'Folder2' , 'Folder3' , 'Folder4' ] )
) ;
expect ( findFolderAppsIn ( folders , 'Folder1' ) ) . toHaveLength ( 1 ) ;
expect ( findFolderAppsIn ( folders , 'Folder2' ) ) . toHaveLength ( 0 ) ;
expect ( findFolderAppsIn ( folders , 'Folder3' ) ) . toHaveLength ( 0 ) ;
expect ( findFolderAppsIn ( folders , 'Folder4' ) ) . toHaveLength ( 0 ) ;
} ) ;
2021-11-15 06:13:48 +00:00
describe ( 'POST /api/folders' , ( ) = > {
it ( 'should allow only authenticated users to create folder' , async ( ) = > {
await request ( nestApp . getHttpServer ( ) ) . post ( '/api/folders' ) . expect ( 401 ) ;
} ) ;
it ( 'should create new folder in an organization' , async ( ) = > {
const adminUserData = await createUser ( nestApp , {
email : 'admin@tooljet.io' ,
} ) ;
const { user } = adminUserData ;
2023-04-06 11:12:58 +00:00
const loggedUser = await authenticateUser ( nestApp ) ;
2021-11-15 06:13:48 +00:00
const response = await request ( nestApp . getHttpServer ( ) )
. post ( ` /api/folders ` )
2023-04-06 11:12:58 +00:00
. set ( 'tj-workspace-id' , user . defaultOrganizationId )
. set ( 'Cookie' , loggedUser . tokenCookie )
2025-02-25 06:52:50 +00:00
. send ( { name : 'my folder' , type : 'front-end' } ) ;
2021-11-15 06:13:48 +00:00
expect ( response . statusCode ) . toBe ( 201 ) ;
const { id , name , organization_id , created_at , updated_at } = response . body ;
expect ( id ) . toBeDefined ( ) ;
expect ( created_at ) . toBeDefined ( ) ;
expect ( updated_at ) . toBeDefined ( ) ;
2023-06-07 09:33:54 +00:00
expect ( name ) . toEqual ( 'my folder' ) ;
2021-11-15 06:13:48 +00:00
expect ( organization_id ) . toEqual ( user . organizationId ) ;
} ) ;
2025-02-25 06:52:50 +00:00
it ( 'super admin should be able to create new folder in an organization' , async ( ) = > {
const adminUserData = await createUser ( nestApp , {
email : 'admin@tooljet.io' ,
} ) ;
const superAdminUserData = await createUser ( nestApp , {
email : 'superadmin@tooljet.io' ,
userType : 'instance' ,
} ) ;
let loggedUser = await authenticateUser ( nestApp ) ;
adminUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
loggedUser = await authenticateUser (
nestApp ,
superAdminUserData . user . email ,
'password' ,
adminUserData . organization . id
) ;
superAdminUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
const response = await request ( nestApp . getHttpServer ( ) )
. post ( ` /api/folders ` )
. set ( 'tj-workspace-id' , adminUserData . user . defaultOrganizationId )
. set ( 'Cookie' , superAdminUserData [ 'tokenCookie' ] )
. send ( { name : 'my folder' , type : 'front-end' } ) ;
expect ( response . statusCode ) . toBe ( 201 ) ;
const { id , name , organization_id , created_at , updated_at } = response . body ;
expect ( id ) . toBeDefined ( ) ;
expect ( created_at ) . toBeDefined ( ) ;
expect ( updated_at ) . toBeDefined ( ) ;
expect ( name ) . toEqual ( 'my folder' ) ;
expect ( organization_id ) . toEqual ( adminUserData . user . organizationId ) ;
} ) ;
2021-11-15 06:13:48 +00:00
} ) ;
2022-06-16 14:11:38 +00:00
describe ( 'PUT /api/folders/:id' , ( ) = > {
2025-02-25 06:52:50 +00:00
it ( 'should be able to update an existing folder if group is admin or has update permission in the same organization or the user is a super admin' , async ( ) = > {
2022-06-16 14:11:38 +00:00
const adminUserData = await createUser ( nestApp , {
email : 'admin@tooljet.io' ,
groups : [ 'all_users' , 'admin' ] ,
} ) ;
2025-02-25 06:52:50 +00:00
const superAdminUserData = await createUser ( nestApp , {
email : 'superadmin@tooljet.io' ,
groups : [ 'all_users' , 'admin' ] ,
userType : 'instance' ,
} ) ;
2022-06-16 14:11:38 +00:00
const developerUserData = await createUser ( nestApp , {
email : 'dev@tooljet.io' ,
groups : [ 'all_users' , 'developer' ] ,
organization : adminUserData.organization ,
} ) ;
const viewerUserData = await createUser ( nestApp , {
email : 'viewer@tooljet.io' ,
groups : [ 'viewer' , 'all_users' ] ,
organization : adminUserData.organization ,
} ) ;
2023-04-06 11:12:58 +00:00
let loggedUser = await authenticateUser ( nestApp ) ;
adminUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
loggedUser = await authenticateUser ( nestApp , viewerUserData . user . email ) ;
viewerUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
loggedUser = await authenticateUser ( nestApp , developerUserData . user . email ) ;
developerUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
2025-02-25 06:52:50 +00:00
loggedUser = await authenticateUser (
nestApp ,
superAdminUserData . user . email ,
'password' ,
adminUserData . organization . id
) ;
superAdminUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
2022-06-16 14:11:38 +00:00
const developerGroup = await getManager ( ) . findOneOrFail ( GroupPermission , {
where : { group : 'developer' } ,
} ) ;
await getManager ( ) . update ( GroupPermission , developerGroup . id , {
folderUpdate : true ,
} ) ;
const folder = await getManager ( ) . save ( Folder , {
name : 'Folder1' ,
organizationId : adminUserData.organization.id ,
} ) ;
2025-02-25 06:52:50 +00:00
for ( const [ i , userData ] of [ adminUserData , developerUserData , superAdminUserData ] . entries ( ) ) {
2023-06-07 09:33:54 +00:00
const name = ` folder ${ i } ` ;
2022-06-16 14:11:38 +00:00
await request ( nestApp . getHttpServer ( ) )
. put ( ` /api/folders/ ${ folder . id } ` )
2025-02-25 06:52:50 +00:00
. set ( 'tj-workspace-id' , adminUserData . user . defaultOrganizationId )
2023-04-06 11:12:58 +00:00
. set ( 'Cookie' , userData [ 'tokenCookie' ] )
2023-06-07 09:33:54 +00:00
. send ( { name } )
2022-06-16 14:11:38 +00:00
. expect ( 200 ) ;
const updatedFolder = await getManager ( ) . findOne ( Folder , folder . id ) ;
2023-06-07 09:33:54 +00:00
expect ( updatedFolder . name ) . toEqual ( name ) ;
2022-06-16 14:11:38 +00:00
}
await request ( nestApp . getHttpServer ( ) )
. put ( ` /api/folders/ ${ folder . id } ` )
2023-04-06 11:12:58 +00:00
. set ( 'tj-workspace-id' , viewerUserData . user . defaultOrganizationId )
. set ( 'Cookie' , viewerUserData [ 'tokenCookie' ] )
2023-06-07 09:33:54 +00:00
. send ( { name : 'my folder' } )
2022-06-16 14:11:38 +00:00
. expect ( 403 ) ;
} ) ;
} ) ;
describe ( 'DELETE /api/folders/:id' , ( ) = > {
2025-02-25 06:52:50 +00:00
it ( 'should be able to delete an existing folder if group is admin or has delete permission in the same organization or the user is a super admin' , async ( ) = > {
2022-06-16 14:11:38 +00:00
const adminUserData = await createUser ( nestApp , {
email : 'admin@tooljet.io' ,
groups : [ 'all_users' , 'admin' ] ,
} ) ;
2025-02-25 06:52:50 +00:00
const superAdminUserData = await createUser ( nestApp , {
email : 'superadmin@tooljet.io' ,
groups : [ 'all_users' , 'admin' ] ,
userType : 'instance' ,
} ) ;
2022-06-16 14:11:38 +00:00
const developerUserData = await createUser ( nestApp , {
email : 'dev@tooljet.io' ,
groups : [ 'all_users' , 'developer' ] ,
organization : adminUserData.organization ,
} ) ;
const viewerUserData = await createUser ( nestApp , {
email : 'viewer@tooljet.io' ,
groups : [ 'viewer' , 'all_users' ] ,
organization : adminUserData.organization ,
} ) ;
const developerGroup = await getManager ( ) . findOneOrFail ( GroupPermission , {
where : { group : 'developer' } ,
} ) ;
await getManager ( ) . update ( GroupPermission , developerGroup . id , {
folderDelete : true ,
} ) ;
2023-04-06 11:12:58 +00:00
let loggedUser = await authenticateUser ( nestApp ) ;
adminUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
loggedUser = await authenticateUser ( nestApp , viewerUserData . user . email ) ;
viewerUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
loggedUser = await authenticateUser ( nestApp , developerUserData . user . email ) ;
developerUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
2025-02-25 06:52:50 +00:00
loggedUser = await authenticateUser (
nestApp ,
superAdminUserData . user . email ,
'password' ,
adminUserData . organization . id
) ;
superAdminUserData [ 'tokenCookie' ] = loggedUser . tokenCookie ;
for ( const userData of [ adminUserData , developerUserData , superAdminUserData ] ) {
2022-06-16 14:11:38 +00:00
const folder = await getManager ( ) . save ( Folder , {
name : 'Folder1' ,
organizationId : adminUserData.organization.id ,
} ) ;
const preCount = await getManager ( ) . count ( Folder ) ;
await request ( nestApp . getHttpServer ( ) )
. delete ( ` /api/folders/ ${ folder . id } ` )
2025-02-25 06:52:50 +00:00
. set ( 'tj-workspace-id' , adminUserData . user . defaultOrganizationId )
2023-04-06 11:12:58 +00:00
. set ( 'Cookie' , userData [ 'tokenCookie' ] )
2022-06-16 14:11:38 +00:00
. send ( )
. expect ( 200 ) ;
const postCount = await getManager ( ) . count ( Folder ) ;
expect ( postCount ) . toEqual ( preCount - 1 ) ;
}
const folder = await getManager ( ) . save ( Folder , {
name : 'Folder1' ,
organizationId : adminUserData.organization.id ,
} ) ;
await request ( nestApp . getHttpServer ( ) )
. delete ( ` /api/folders/ ${ folder . id } ` )
2023-04-06 11:12:58 +00:00
. set ( 'tj-workspace-id' , viewerUserData . user . defaultOrganizationId )
. set ( 'Cookie' , viewerUserData [ 'tokenCookie' ] )
2022-06-16 14:11:38 +00:00
. send ( )
. expect ( 403 ) ;
} ) ;
} ) ;
2021-11-15 06:13:48 +00:00
afterAll ( async ( ) = > {
await nestApp . close ( ) ;
} ) ;
} ) ;