From 8eb600af4e25fe4ca949036b337f865febffec9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joe=E2=80=AE=20=E2=80=ACKaufeld?= Date: Wed, 20 Jul 2022 10:16:12 -0400 Subject: [PATCH] Update migration command (#432) * modify transcriptions along with submissions * Bump version number Co-authored-by: itsthejoker --- api/models.py | 14 +++++--- .../slack/commands/test_account_migration.py | 35 ++++++++++++++++--- pyproject.toml | 2 +- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/api/models.py b/api/models.py index fd47da53..4dada140 100644 --- a/api/models.py +++ b/api/models.py @@ -451,16 +451,22 @@ def perform_migration(self) -> None: existing_submissions = Submission.objects.filter(completed_by=self.old_user) self.affected_submissions.add(*existing_submissions) + # need to process transcriptions first because the submissions they're + # linked to are about to change + transcriptions = Transcription.objects.filter( + submission__in=existing_submissions, author=self.old_user + ) + transcriptions.update(author=self.new_user) existing_submissions.update( claimed_by=self.new_user, completed_by=self.new_user ) - def get_number_affected(self) -> int: - """Get the number of records that have been modified.""" - return self.affected_submissions.count() - def revert(self) -> None: """Undo the account migration.""" + transcriptions = Transcription.objects.filter( + submission__in=self.affected_submissions.all(), author=self.new_user + ) + transcriptions.update(author=self.old_user) self.affected_submissions.update( claimed_by=self.old_user, completed_by=self.old_user ) diff --git a/api/tests/slack/commands/test_account_migration.py b/api/tests/slack/commands/test_account_migration.py index b3777f78..038f5902 100644 --- a/api/tests/slack/commands/test_account_migration.py +++ b/api/tests/slack/commands/test_account_migration.py @@ -1,13 +1,13 @@ from unittest.mock import patch -from api.models import AccountMigration, Submission +from api.models import AccountMigration, Submission, Transcription from api.slack.commands.migrate_user import ( _create_blocks, migrate_user_cmd, process_migrate_user, ) from blossom.strings import translation -from utils.test_helpers import create_submission, create_user +from utils.test_helpers import create_submission, create_transcription, create_user i18n = translation() @@ -18,20 +18,31 @@ def test_perform_migration() -> None: user2 = create_user(id=200, username="Moddington") submission1 = create_submission(claimed_by=user1, completed_by=user1) - create_submission(claimed_by=user2, completed_by=user2) + submission2 = create_submission(claimed_by=user2, completed_by=user2) + + transcription1 = create_transcription(submission=submission1, user=user1) + transcription2 = create_transcription(submission=submission2, user=user2) assert Submission.objects.filter(completed_by=user1).count() == 1 assert Submission.objects.filter(completed_by=user2).count() == 1 + assert Transcription.objects.filter(author=user1).count() == 1 + assert Transcription.objects.filter(author=user2).count() == 1 migration = AccountMigration.objects.create(old_user=user1, new_user=user2) migration.perform_migration() assert migration.affected_submissions.count() == 1 assert Submission.objects.filter(completed_by=user1).count() == 0 assert Submission.objects.filter(completed_by=user2).count() == 2 + assert Transcription.objects.filter(author=user1).count() == 0 + assert Transcription.objects.filter(author=user2).count() == 2 submission1.refresh_from_db() + transcription1.refresh_from_db() + transcription2.refresh_from_db() assert submission1.claimed_by == user2 assert submission1.completed_by == user2 + assert transcription1.author == user2 + assert transcription2.author == user2 def test_revert() -> None: @@ -40,7 +51,11 @@ def test_revert() -> None: user2 = create_user(id=200, username="Moddington") submission1 = create_submission(claimed_by=user1, completed_by=user1) - create_submission(claimed_by=user2, completed_by=user2) + submission2 = create_submission(claimed_by=user2, completed_by=user2) + transcription1 = create_transcription(submission=submission1, user=user1) + transcription2 = create_transcription(submission=submission2, user=user2) + assert Transcription.objects.filter(author=user1).count() == 1 + assert Transcription.objects.filter(author=user2).count() == 1 assert Submission.objects.filter(completed_by=user1).count() == 1 assert Submission.objects.filter(completed_by=user2).count() == 1 @@ -50,15 +65,27 @@ def test_revert() -> None: assert Submission.objects.filter(completed_by=user1).count() == 0 assert Submission.objects.filter(completed_by=user2).count() == 2 + assert Transcription.objects.filter(author=user1).count() == 0 + assert Transcription.objects.filter(author=user2).count() == 2 + transcription1.refresh_from_db() + transcription2.refresh_from_db() + assert transcription1.author == user2 + assert transcription2.author == user2 migration.revert() + assert Submission.objects.filter(completed_by=user1).count() == 1 + assert Submission.objects.filter(completed_by=user2).count() == 1 assert Submission.objects.filter(completed_by=user1).count() == 1 assert Submission.objects.filter(completed_by=user2).count() == 1 submission1.refresh_from_db() + transcription1.refresh_from_db() + transcription2.refresh_from_db() assert submission1.claimed_by == user1 assert submission1.completed_by == user1 + assert transcription1.author == user1 + assert transcription2.author == user2 def test_create_blocks() -> None: diff --git a/pyproject.toml b/pyproject.toml index ca830675..995ba5b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "blossom" -version = "1.77.0" +version = "1.78.0" description = "The site!" authors = ["Grafeas Group Ltd. "]