(t *testing.T)
| 17 | ) |
| 18 | |
| 19 | func TestDeleteUser(t *testing.T) { |
| 20 | a := require.New(t) |
| 21 | ctx := context.Background() |
| 22 | ctl := &controller{} |
| 23 | ctx, err := ctl.StartServerWithExternalPg(ctx) |
| 24 | a.NoError(err) |
| 25 | defer ctl.Close(ctx) |
| 26 | |
| 27 | expectErrorMsg := "workspace must have at least one admin" |
| 28 | |
| 29 | memberResp, err := ctl.userServiceClient.CreateUser(ctx, connect.NewRequest(&v1pb.CreateUserRequest{ |
| 30 | User: &v1pb.User{ |
| 31 | Title: "member", |
| 32 | Email: "member@bytebase.com", |
| 33 | Password: "1024bytebase", |
| 34 | }, |
| 35 | })) |
| 36 | a.NoError(err) |
| 37 | member := memberResp.Msg |
| 38 | |
| 39 | _, err = ctl.userServiceClient.DeleteUser(ctx, connect.NewRequest(&v1pb.DeleteUserRequest{ |
| 40 | Name: member.Name, |
| 41 | })) |
| 42 | a.NoError(err) |
| 43 | |
| 44 | // Test: cannot delete the last admin. |
| 45 | _, err = ctl.userServiceClient.DeleteUser(ctx, connect.NewRequest(&v1pb.DeleteUserRequest{ |
| 46 | Name: ctl.principalName, |
| 47 | })) |
| 48 | a.Error(err) |
| 49 | a.ErrorContains(err, expectErrorMsg) |
| 50 | |
| 51 | actuator, err := ctl.actuatorServiceClient.GetActuatorInfo(ctx, connect.NewRequest(&v1pb.GetActuatorInfoRequest{ |
| 52 | Name: memberResp.Msg.Workspace, |
| 53 | })) |
| 54 | a.NoError(err) |
| 55 | |
| 56 | serviceAccountResp, err := ctl.serviceAccountServiceClient.CreateServiceAccount(ctx, connect.NewRequest(&v1pb.CreateServiceAccountRequest{ |
| 57 | Parent: actuator.Msg.Workspace, |
| 58 | ServiceAccountId: "bot", |
| 59 | ServiceAccount: &v1pb.ServiceAccount{ |
| 60 | Title: "bot", |
| 61 | }, |
| 62 | })) |
| 63 | a.NoError(err) |
| 64 | serviceAccount := serviceAccountResp.Msg |
| 65 | |
| 66 | _, err = ctl.addMemberToWorkspaceIAM(ctx, actuator.Msg.Workspace, fmt.Sprintf("serviceAccount:%v", serviceAccount.Email), "roles/workspaceAdmin") |
| 67 | a.NoError(err) |
| 68 | |
| 69 | _, err = ctl.userServiceClient.DeleteUser(ctx, connect.NewRequest(&v1pb.DeleteUserRequest{ |
| 70 | Name: ctl.principalName, |
| 71 | })) |
| 72 | a.Error(err) |
| 73 | a.ErrorContains(err, expectErrorMsg) |
| 74 | |
| 75 | _, err = ctl.userServiceClient.UndeleteUser(ctx, connect.NewRequest(&v1pb.UndeleteUserRequest{ |
| 76 | Name: member.Name, |
nothing calls this directly
no test coverage detected