Notifications can target robots, but the model did not reflect that
This fixes a breakage when deleting robots that have notifications targeting them.
This commit is contained in:
parent
0c3b6d5b1a
commit
f5fafc480f
2 changed files with 27 additions and 2 deletions
|
@ -1033,7 +1033,7 @@ class NotificationKind(BaseModel):
|
||||||
class Notification(BaseModel):
|
class Notification(BaseModel):
|
||||||
uuid = CharField(default=uuid_generator, index=True)
|
uuid = CharField(default=uuid_generator, index=True)
|
||||||
kind = ForeignKeyField(NotificationKind)
|
kind = ForeignKeyField(NotificationKind)
|
||||||
target = QuayUserField(index=True)
|
target = QuayUserField(index=True, allows_robots=True)
|
||||||
metadata_json = TextField(default='{}')
|
metadata_json = TextField(default='{}')
|
||||||
created = DateTimeField(default=datetime.now, index=True)
|
created = DateTimeField(default=datetime.now, index=True)
|
||||||
dismissed = BooleanField(default=False)
|
dismissed = BooleanField(default=False)
|
||||||
|
|
|
@ -5,10 +5,13 @@ import pytest
|
||||||
from mock import patch
|
from mock import patch
|
||||||
|
|
||||||
from data.database import EmailConfirmation, User, DeletedNamespace
|
from data.database import EmailConfirmation, User, DeletedNamespace
|
||||||
|
from data.model.organization import get_organization
|
||||||
|
from data.model.notification import create_notification
|
||||||
|
from data.model.team import create_team, add_user_to_team
|
||||||
from data.model.user import create_user_noverify, validate_reset_code, get_active_users
|
from data.model.user import create_user_noverify, validate_reset_code, get_active_users
|
||||||
from data.model.user import mark_namespace_for_deletion, delete_namespace_via_marker
|
from data.model.user import mark_namespace_for_deletion, delete_namespace_via_marker
|
||||||
from data.model.user import create_robot, lookup_robot, list_namespace_robots
|
from data.model.user import create_robot, lookup_robot, list_namespace_robots
|
||||||
from data.model.user import InvalidRobotException
|
from data.model.user import InvalidRobotException, delete_robot
|
||||||
from util.timedeltastring import convert_to_timedelta
|
from util.timedeltastring import convert_to_timedelta
|
||||||
from data.queue import WorkQueue
|
from data.queue import WorkQueue
|
||||||
from test.fixtures import *
|
from test.fixtures import *
|
||||||
|
@ -117,3 +120,25 @@ def test_delete_namespace_via_marker(initialized_db):
|
||||||
|
|
||||||
with pytest.raises(DeletedNamespace.DoesNotExist):
|
with pytest.raises(DeletedNamespace.DoesNotExist):
|
||||||
DeletedNamespace.get(id=marker_id)
|
DeletedNamespace.get(id=marker_id)
|
||||||
|
|
||||||
|
|
||||||
|
def test_delete_robot(initialized_db):
|
||||||
|
# Create a robot account.
|
||||||
|
user = create_user_noverify('foobar', 'foo@example.com', email_required=False)
|
||||||
|
robot, _ = create_robot('foo', user)
|
||||||
|
|
||||||
|
# Add some notifications and other rows pointing to the robot.
|
||||||
|
create_notification('repo_push', robot)
|
||||||
|
|
||||||
|
team = create_team('someteam', get_organization('buynlarge'), 'member')
|
||||||
|
add_user_to_team(robot, team)
|
||||||
|
|
||||||
|
# Ensure the robot exists.
|
||||||
|
assert lookup_robot(robot.username).id == robot.id
|
||||||
|
|
||||||
|
# Delete the robot.
|
||||||
|
delete_robot(robot.username)
|
||||||
|
|
||||||
|
# Ensure it is gone.
|
||||||
|
with pytest.raises(InvalidRobotException):
|
||||||
|
lookup_robot(robot.username)
|
||||||
|
|
Reference in a new issue