@@ -2,15 +2,17 @@ import { prisma } from '../db.server'
2
2
import {
3
3
createTestProject ,
4
4
createTestProjectAccessRequest ,
5
+ createTestProjectCollaborator ,
5
6
createTestUser ,
6
7
truncateTables ,
7
8
} from '../test-util'
8
- import { AccessRequestStatus } from '../types'
9
+ import { AccessRequestStatus , UserProjectRole } from '../types'
9
10
import {
10
11
createAccessRequest ,
11
12
listProjectAccessRequests ,
12
13
updateAccessRequestStatus ,
13
14
} from './projectAccessRequest.server'
15
+ import * as permissionsService from '../services/permissionsService.server'
14
16
15
17
describe ( 'projectAccessRequest' , ( ) => {
16
18
describe ( 'createAccessRequest' , ( ) => {
@@ -78,6 +80,9 @@ describe('projectAccessRequest', () => {
78
80
} )
79
81
80
82
describe ( 'updateAccessRequestStatus' , ( ) => {
83
+ let revokeAllRolesFromUserMock : jest . SpyInstance
84
+ let grantProjectRoleToUserMock : jest . SpyInstance
85
+
81
86
afterEach ( async ( ) => {
82
87
await truncateTables ( [
83
88
prisma . projectID ,
@@ -86,13 +91,19 @@ describe('projectAccessRequest', () => {
86
91
prisma . project ,
87
92
prisma . userDetails ,
88
93
] )
94
+
95
+ revokeAllRolesFromUserMock . mockRestore ( )
96
+ grantProjectRoleToUserMock . mockRestore ( )
89
97
} )
90
98
beforeEach ( async ( ) => {
91
99
await createTestUser ( prisma , { id : 'bob' } )
92
100
await createTestUser ( prisma , { id : 'alice' } )
93
101
await createTestUser ( prisma , { id : 'that-guy' } )
94
102
await createTestProject ( prisma , { id : 'one' , ownerId : 'bob' } )
95
103
await createTestProject ( prisma , { id : 'two' , ownerId : 'alice' } )
104
+
105
+ revokeAllRolesFromUserMock = jest . spyOn ( permissionsService , 'revokeAllRolesFromUser' )
106
+ grantProjectRoleToUserMock = jest . spyOn ( permissionsService , 'grantProjectRoleToUser' )
96
107
} )
97
108
it ( 'requires an existing project' , async ( ) => {
98
109
const fn = async ( ) =>
@@ -171,6 +182,39 @@ describe('projectAccessRequest', () => {
171
182
const collabs = await prisma . projectCollaborator . findMany ( { where : { project_id : 'one' } } )
172
183
expect ( collabs . length ) . toBe ( 1 )
173
184
expect ( collabs [ 0 ] . user_id ) . toBe ( 'alice' )
185
+
186
+ expect ( grantProjectRoleToUserMock ) . toHaveBeenCalledWith (
187
+ 'one' ,
188
+ 'alice' ,
189
+ UserProjectRole . VIEWER ,
190
+ )
191
+ expect ( revokeAllRolesFromUserMock ) . not . toHaveBeenCalled ( )
192
+ } )
193
+ it ( 'removes the user from the collaborators if rejected' , async ( ) => {
194
+ await createTestProjectCollaborator ( prisma , { projectId : 'one' , userId : 'alice' } )
195
+ const existingCollabs = await prisma . projectCollaborator . findMany ( {
196
+ where : { project_id : 'one' } ,
197
+ } )
198
+ expect ( existingCollabs . length ) . toBe ( 1 )
199
+
200
+ await createTestProjectAccessRequest ( prisma , {
201
+ projectId : 'one' ,
202
+ userId : 'alice' ,
203
+ token : 'something' ,
204
+ status : AccessRequestStatus . PENDING ,
205
+ } )
206
+ await updateAccessRequestStatus ( {
207
+ projectId : 'one' ,
208
+ ownerId : 'bob' ,
209
+ token : 'something' ,
210
+ status : AccessRequestStatus . REJECTED ,
211
+ } )
212
+
213
+ const collabs = await prisma . projectCollaborator . findMany ( { where : { project_id : 'one' } } )
214
+ expect ( collabs . length ) . toBe ( 0 )
215
+
216
+ expect ( grantProjectRoleToUserMock ) . not . toHaveBeenCalled ( )
217
+ expect ( revokeAllRolesFromUserMock ) . toHaveBeenCalledWith ( 'one' , 'alice' )
174
218
} )
175
219
} )
176
220
@@ -199,7 +243,7 @@ describe('projectAccessRequest', () => {
199
243
await createTestProjectAccessRequest ( prisma , {
200
244
userId : 'p1' ,
201
245
projectId : 'two' ,
202
- status : AccessRequestStatus . APPROVED ,
246
+ status : AccessRequestStatus . REJECTED ,
203
247
token : 'test1' ,
204
248
} )
205
249
await createTestProjectAccessRequest ( prisma , {
0 commit comments