@@ -1641,6 +1641,13 @@ class TestInvitationAccept(ViewTestMixin):
16411641 view = views .InvitationAccept
16421642 url = "/organizations/{uuid}/invitation/"
16431643
1644+ def _create_verified_email (self , user ):
1645+ EmailAddress .objects .update_or_create (
1646+ user = user ,
1647+ email = user .email ,
1648+ defaults = {"verified" : True , "primary" : True },
1649+ )
1650+
16441651 def test_accept (self , rf , invitation_factory , user_factory ):
16451652 invitation = invitation_factory ()
16461653 user = user_factory ()
@@ -1649,6 +1656,30 @@ def test_accept(self, rf, invitation_factory, user_factory):
16491656 assert invitation .accepted_at is not None
16501657 assert invitation .organization .has_member (user )
16511658
1659+ def test_accept_admin_requires_verified_email (
1660+ self , rf , invitation_factory , user_factory
1661+ ):
1662+ """Users without a verified email cannot accept admin invitations"""
1663+ invitation = invitation_factory (role = InvitationRole .admin )
1664+ user = user_factory ()
1665+ response = self .call_view (rf , user , {"action" : "accept" }, uuid = invitation .uuid )
1666+ invitation .refresh_from_db ()
1667+ assert invitation .accepted_at is None
1668+ assert not invitation .organization .has_member (user )
1669+ assert response .status_code == 302
1670+
1671+ def test_accept_admin_with_verified_email (
1672+ self , rf , invitation_factory , user_factory
1673+ ):
1674+ """Users with a verified email can accept admin invitations"""
1675+ invitation = invitation_factory (role = InvitationRole .admin )
1676+ user = user_factory ()
1677+ self ._create_verified_email (user )
1678+ self .call_view (rf , user , {"action" : "accept" }, uuid = invitation .uuid )
1679+ invitation .refresh_from_db ()
1680+ assert invitation .accepted_at is not None
1681+ assert invitation .organization .has_member (user )
1682+
16521683 def test_reject (self , rf , invitation_factory , user_factory ):
16531684 invitation = invitation_factory ()
16541685 user = user_factory ()
0 commit comments