diff --git a/zerver/tests/test_migrations_0145.py b/zerver/tests/test_migrations_0145.py new file mode 100644 index 0000000000..f018f978b3 --- /dev/null +++ b/zerver/tests/test_migrations_0145.py @@ -0,0 +1,58 @@ +from zerver.lib.test_classes import MigrationsTestCase +from zerver.lib.test_helpers import use_db_models, make_client +from django.utils.timezone import now as timezone_now +from django.db.migrations.state import StateApps +from django.db.models.base import ModelBase + +from zerver.models import get_stream + +class EmojiName2IdTestCase(MigrationsTestCase): + + migrate_from = '0144_remove_realm_create_generic_bot_by_admins_only' + migrate_to = '0145_reactions_realm_emoji_name_to_id' + + @use_db_models + def setUpBeforeMigration(self, apps: StateApps) -> None: + Reaction = apps.get_model('zerver', 'Reaction') + RealmEmoji = apps.get_model('zerver', 'RealmEmoji') + Message = apps.get_model('zerver', 'Message') + Recipient = apps.get_model('zerver', 'Recipient') + + sender = self.example_user('iago') + realm = sender.realm + sending_client = make_client(name="test suite") + stream_name = 'Denmark' + stream = get_stream(stream_name, realm) + subject = 'foo' + + def send_fake_message(message_content: str, stream: ModelBase) -> ModelBase: + recipient = Recipient.objects.get(type_id=stream.id, type=2) + return Message.objects.create(sender = sender, + recipient = recipient, + subject = subject, + content = message_content, + pub_date = timezone_now(), + sending_client = sending_client) + message = send_fake_message('Test 1', stream) + + # Create reactions for all the realm emoji's on the message we faked. + for realm_emoji in RealmEmoji.objects.all(): + reaction = Reaction(user_profile=sender, message=message, + emoji_name=realm_emoji.name, emoji_code=realm_emoji.name, + reaction_type='realm_emoji') + reaction.save() + realm_emoji_reactions_count = Reaction.objects.filter(reaction_type='realm_emoji').count() + self.assertEqual(realm_emoji_reactions_count, 1) + + def test_tags_migrated(self) -> None: + Reaction = self.apps.get_model('zerver', 'Reaction') + RealmEmoji = self.apps.get_model('zerver', 'RealmEmoji') + + realm_emoji_reactions = Reaction.objects.filter(reaction_type='realm_emoji') + realm_emoji_reactions_count = realm_emoji_reactions.count() + self.assertEqual(realm_emoji_reactions_count, 1) + for reaction in realm_emoji_reactions: + realm_emoji = RealmEmoji.objects.get( + realm_id=reaction.user_profile.realm_id, + name=reaction.emoji_name) + self.assertEqual(reaction.emoji_code, str(realm_emoji.id))