Skip to content

Commit 4737cb2

Browse files
authored
Don't send owner notification to new owner (#3899)
* Failing test * Don't send owner notification to new owner
1 parent 9374e90 commit 4737cb2

File tree

2 files changed

+32
-15
lines changed

2 files changed

+32
-15
lines changed

tests/unit/manage/test_views.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1342,22 +1342,30 @@ def test_post_new_role_validation_fails(self, db_request):
13421342

13431343
def test_post_new_role(self, monkeypatch, db_request):
13441344
project = ProjectFactory.create(name="foobar")
1345-
user = UserFactory.create(username="testuser")
1345+
new_user = UserFactory.create(username="new_user")
1346+
owner_1 = UserFactory.create(username="owner_1")
1347+
owner_2 = UserFactory.create(username="owner_2")
1348+
owner_1_role = RoleFactory.create(
1349+
user=owner_1, project=project, role_name="Owner"
1350+
)
1351+
owner_2_role = RoleFactory.create(
1352+
user=owner_2, project=project, role_name="Owner"
1353+
)
13461354

13471355
user_service = pretend.stub(
1348-
find_userid=lambda username: user.id,
1349-
get_user=lambda userid: user,
1356+
find_userid=lambda username: new_user.id,
1357+
get_user=lambda userid: new_user,
13501358
)
13511359
db_request.find_service = pretend.call_recorder(
13521360
lambda iface, context: user_service
13531361
)
13541362
db_request.method = "POST"
13551363
db_request.POST = pretend.stub()
13561364
db_request.remote_addr = "10.10.10.10"
1357-
db_request.user = user
1365+
db_request.user = owner_1
13581366
form_obj = pretend.stub(
13591367
validate=pretend.call_recorder(lambda: True),
1360-
username=pretend.stub(data=user.username),
1368+
username=pretend.stub(data=new_user.username),
13611369
role_name=pretend.stub(data="Owner"),
13621370
)
13631371
form_class = pretend.call_recorder(lambda *a, **kw: form_obj)
@@ -1393,17 +1401,17 @@ def test_post_new_role(self, monkeypatch, db_request):
13931401
pretend.call(user_service=user_service),
13941402
]
13951403
assert db_request.session.flash.calls == [
1396-
pretend.call("Added collaborator 'testuser'", queue="success"),
1404+
pretend.call("Added collaborator 'new_user'", queue="success"),
13971405
]
13981406

13991407
assert send_collaborator_added_email.calls == [
14001408
pretend.call(
14011409
db_request,
1402-
user,
1410+
new_user,
14031411
db_request.user,
14041412
project.name,
14051413
form_obj.role_name.data,
1406-
[]
1414+
{owner_2}
14071415
)
14081416
]
14091417

@@ -1413,23 +1421,27 @@ def test_post_new_role(self, monkeypatch, db_request):
14131421
db_request.user,
14141422
project.name,
14151423
form_obj.role_name.data,
1416-
user,
1424+
new_user,
14171425
),
14181426
]
14191427

14201428
# Only one role is created
1421-
role = db_request.db.query(Role).one()
1429+
role = db_request.db.query(Role).filter(Role.user == new_user).one()
14221430

14231431
assert result == {
14241432
"project": project,
1425-
"roles_by_user": {user.username: [role]},
1433+
"roles_by_user": {
1434+
new_user.username: [role],
1435+
owner_1.username: [owner_1_role],
1436+
owner_2.username: [owner_2_role],
1437+
},
14261438
"form": form_obj,
14271439
}
14281440

14291441
entry = db_request.db.query(JournalEntry).one()
14301442

14311443
assert entry.name == project.name
1432-
assert entry.action == "add Owner testuser"
1444+
assert entry.action == "add Owner new_user"
14331445
assert entry.submitted_by == db_request.user
14341446
assert entry.submitted_from == db_request.remote_addr
14351447

warehouse/manage/views.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -594,13 +594,18 @@ def manage_project_roles(project, request, _form_class=CreateRoleForm):
594594
),
595595
)
596596

597-
owners = (
597+
owner_roles = (
598598
request.db.query(Role)
599599
.join(Role.user)
600600
.filter(Role.role_name == 'Owner', Role.project == project)
601601
)
602-
owner_users = [owner.user for owner in owners]
603-
owner_users.remove(request.user)
602+
owner_users = {owner.user for owner in owner_roles}
603+
604+
# Don't send to the owner that added the new role
605+
owner_users.discard(request.user)
606+
607+
# Don't send owners email to new user if they are now an owner
608+
owner_users.discard(user)
604609

605610
send_collaborator_added_email(
606611
request,

0 commit comments

Comments
 (0)