@@ -590,22 +590,80 @@ defmodule Guard.GrpcServers.UserServerTest do
590
590
591
591
request = User.DeleteWithOwnedOrgsRequest . new ( user_id: user . id )
592
592
593
- { :ok , response } = channel |> Stub . delete_with_owned_orgs ( request )
593
+ with_mock InternalApi.Projecthub.ProjectService.Stub ,
594
+ list: fn _channel , _req , _opts ->
595
+ { :ok ,
596
+ InternalApi.Projecthub.ListResponse . new (
597
+ metadata: InternalApi.Projecthub.ResponseMeta . new ( status: % { code: 0 } ) ,
598
+ projects: [ ]
599
+ ) }
600
+ end do
601
+ { :ok , response } = channel |> Stub . delete_with_owned_orgs ( request )
602
+
603
+ id = user . id
604
+ assert % User.User { id: ^ id } = response
605
+
606
+ # check if the user is deleted
607
+ assert nil == FrontRepo . get ( FrontRepo.User , id )
608
+ assert nil == FrontRepo . get ( FrontRepo.RepoHostAccount , repo_host_account . id )
609
+ assert nil == FrontRepo . get ( FrontRepo.Member , member . id )
610
+
611
+ receive do
612
+ { :user_deleted_test , received_message } ->
613
+ user_deleted = User.UserDeleted . decode ( received_message )
614
+ assert user_deleted . user_id == user . id
615
+ after
616
+ 5000 -> flunk ( "Timeout: Message not received within 5 seconds" )
617
+ end
618
+ end
619
+ end
594
620
595
- id = user . id
596
- assert % User.User { id: ^ id } = response
621
+ test "delete_with_owned_orgs should not delete the user if he has owned projects" , % {
622
+ grpc_channel: channel
623
+ } do
624
+ { :ok , user } = Support.Factories.RbacUser . insert ( )
625
+ { :ok , _oidc_user } = Support.Factories.OIDCUser . insert ( user . id )
597
626
598
- # check if the user is deleted
599
- assert nil == FrontRepo . get ( FrontRepo.User , id )
600
- assert nil == FrontRepo . get ( FrontRepo.RepoHostAccount , repo_host_account . id )
601
- assert nil == FrontRepo . get ( FrontRepo.Member , member . id )
627
+ { :ok , _ } =
628
+ Support.Members . insert_user (
629
+ id: user . id ,
630
+ email: user . email ,
631
+ name: user . name
632
+ )
602
633
603
- receive do
604
- { :user_deleted_test , received_message } ->
605
- user_deleted = User.UserDeleted . decode ( received_message )
606
- assert user_deleted . user_id == user . id
607
- after
608
- 5000 -> flunk ( "Timeout: Message not received within 5 seconds" )
634
+ { :ok , _repo_host_account } =
635
+ Support.Members . insert_repo_host_account (
636
+ login: "test" ,
637
+ name: "test" ,
638
+ github_uid: "123123" ,
639
+ user_id: user . id ,
640
+ token: "token" ,
641
+ revoked: false ,
642
+ permission_scope: "repo"
643
+ )
644
+
645
+ { :ok , _member } = Support.Members . insert_member ( github_uid: "123123" )
646
+
647
+ request = User.DeleteWithOwnedOrgsRequest . new ( user_id: user . id )
648
+
649
+ with_mock InternalApi.Projecthub.ProjectService.Stub ,
650
+ list: fn _channel , _req , _opts ->
651
+ { :ok ,
652
+ InternalApi.Projecthub.ListResponse . new (
653
+ metadata: InternalApi.Projecthub.ResponseMeta . new ( status: % { code: 0 } ) ,
654
+ projects: [
655
+ % InternalApi.Projecthub.Project {
656
+ metadata: InternalApi.Projecthub.RequestMeta . new ( user_id: user . id )
657
+ }
658
+ ]
659
+ ) }
660
+ end do
661
+ { :error , grpc_error } = channel |> Stub . delete_with_owned_orgs ( request )
662
+
663
+ assert % GRPC.RPCError {
664
+ status: GRPC.Status . invalid_argument ( ) ,
665
+ message: "User #{ user . id } is owner of projects."
666
+ } == grpc_error
609
667
end
610
668
end
611
669
0 commit comments