@@ -227,5 +227,93 @@ defmodule Rbac.CollaboratorsRefresher.Test do
227227 |> Rbac.Repo . one ( ) == nil
228228 end
229229 end
230+
231+ test "does not create refresh requests when org has no RepoToRoleMapping" do
232+ alias InternalApi.Repository.Collaborator
233+
234+ list_collaborators = % InternalApi.Repository.ListCollaboratorsResponse {
235+ next_page_token: "" ,
236+ collaborators: [
237+ % Collaborator { id: "3" , login: "baz" , permission: :WRITE } ,
238+ % Collaborator { id: "4" , login: "bam" , permission: :READ }
239+ ]
240+ }
241+
242+ GrpcMock . stub ( RepositoryMock , :list_collaborators , fn _ , _ ->
243+ list_collaborators
244+ end )
245+
246+ project = Support.Factories . project ( )
247+
248+ response = % InternalApi.Projecthub.DescribeResponse {
249+ metadata: Support.Factories . response_meta ( ) ,
250+ project: project
251+ }
252+
253+ GrpcMock . stub ( ProjecthubMock , :describe , fn _ , _ -> response end )
254+
255+ { :ok , project } =
256+ Rbac.Store.Project . update (
257+ project . metadata . id ,
258+ "renderedtext/semaphore2" ,
259+ "15324ba0-1b20-49d0-8ff9-a2d91fa451e0" ,
260+ "github" ,
261+ "private"
262+ )
263+
264+ [ user1 , user2 , user3 , user4 ] =
265+ rbac_users =
266+ 1 .. 4
267+ |> Enum . map ( fn _ ->
268+ { :ok , user } = Support.Factories.RbacUser . insert ( )
269+ user
270+ end )
271+
272+ Enum . each ( rbac_users , fn user ->
273+ Support.Members . insert_user (
274+ id: user . id ,
275+ email: user . email ,
276+ name: user . name
277+ )
278+ end )
279+
280+ { :ok , _org_scope } = Support.Factories.Scope . insert ( "org_scope" )
281+
282+ Support.Factories.SubjectRoleBinding . insert (
283+ subject_id: user3 . id ,
284+ org_id: project . org_id ,
285+ binding_source: :manually_assigned
286+ )
287+
288+ Support.Factories.SubjectRoleBinding . insert (
289+ subject_id: user4 . id ,
290+ org_id: project . org_id ,
291+ binding_source: :manually_assigned
292+ )
293+
294+ with_mocks [
295+ { Rbac.Store.User , [ ] ,
296+ [
297+ find_id_by_provider_uid: fn github_uid , _ ->
298+ case github_uid do
299+ "1" -> user1 . id
300+ "2" -> user2 . id
301+ "3" -> user3 . id
302+ "4" -> user4 . id
303+ end
304+ end
305+ ] }
306+ ] do
307+ assert :ok = Rbac.CollaboratorsRefresher . refresh ( project )
308+
309+ # Giving time for message broker to process
310+ :timer . sleep ( 500 )
311+ Rbac.Workers.RefreshProjectAccess . perform_now ( )
312+ :timer . sleep ( 1000 )
313+
314+ refresh_requests = Rbac.Repo.RbacRefreshProjectAccessRequest |> Rbac.Repo . all ( )
315+ assert refresh_requests == [ ]
316+ end
317+ end
230318 end
231319end
0 commit comments