mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	populate_db: Add alert words for Zulip users.
This commit is contained in:
		@@ -4,7 +4,7 @@ from zerver.lib.actions import do_add_alert_words, do_remove_alert_words
 | 
				
			|||||||
from zerver.lib.alert_words import alert_words_in_realm, user_alert_words
 | 
					from zerver.lib.alert_words import alert_words_in_realm, user_alert_words
 | 
				
			||||||
from zerver.lib.test_classes import ZulipTestCase
 | 
					from zerver.lib.test_classes import ZulipTestCase
 | 
				
			||||||
from zerver.lib.test_helpers import most_recent_message, most_recent_usermessage
 | 
					from zerver.lib.test_helpers import most_recent_message, most_recent_usermessage
 | 
				
			||||||
from zerver.models import UserProfile
 | 
					from zerver.models import AlertWord, UserProfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class AlertWordTests(ZulipTestCase):
 | 
					class AlertWordTests(ZulipTestCase):
 | 
				
			||||||
@@ -13,7 +13,11 @@ class AlertWordTests(ZulipTestCase):
 | 
				
			|||||||
    def get_user(self) -> UserProfile:
 | 
					    def get_user(self) -> UserProfile:
 | 
				
			||||||
        # One nice thing about Hamlet is that he is
 | 
					        # One nice thing about Hamlet is that he is
 | 
				
			||||||
        # already subscribed to Denmark.
 | 
					        # already subscribed to Denmark.
 | 
				
			||||||
        return self.example_user('hamlet')
 | 
					        user = self.example_user('hamlet')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # delete words from populate_db to simplify tests
 | 
				
			||||||
 | 
					        AlertWord.objects.filter(user_profile=user).delete()
 | 
				
			||||||
 | 
					        return user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_internal_endpoint(self) -> None:
 | 
					    def test_internal_endpoint(self) -> None:
 | 
				
			||||||
        user = self.get_user()
 | 
					        user = self.get_user()
 | 
				
			||||||
@@ -91,6 +95,10 @@ class AlertWordTests(ZulipTestCase):
 | 
				
			|||||||
        alert_words_in_realm. Alerts added for one user do not impact other
 | 
					        alert_words_in_realm. Alerts added for one user do not impact other
 | 
				
			||||||
        users.
 | 
					        users.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Clear all the words that we got from populate_db.
 | 
				
			||||||
 | 
					        AlertWord.objects.all().delete()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        user1 = self.get_user()
 | 
					        user1 = self.get_user()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        do_add_alert_words(user1, self.interesting_alert_word_list)
 | 
					        do_add_alert_words(user1, self.interesting_alert_word_list)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,16 @@ from zerver.models import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def check_flags(flags: List[str], expected: Set[str]) -> None:
 | 
				
			||||||
 | 
					    '''
 | 
				
			||||||
 | 
					    The has_alert_word flag can be ignored for most tests.
 | 
				
			||||||
 | 
					    '''
 | 
				
			||||||
 | 
					    assert 'has_alert_word' not in expected
 | 
				
			||||||
 | 
					    flag_set = set(flags)
 | 
				
			||||||
 | 
					    flag_set.discard('has_alert_word')
 | 
				
			||||||
 | 
					    if flag_set != expected:
 | 
				
			||||||
 | 
					        raise AssertionError(f'expected flags (ignoring has_alert_word) to be {expected}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class FirstUnreadAnchorTests(ZulipTestCase):
 | 
					class FirstUnreadAnchorTests(ZulipTestCase):
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    HISTORICAL NOTE:
 | 
					    HISTORICAL NOTE:
 | 
				
			||||||
@@ -167,7 +177,7 @@ class UnreadCountTests(ZulipTestCase):
 | 
				
			|||||||
        found = 0
 | 
					        found = 0
 | 
				
			||||||
        for msg in self.get_messages():
 | 
					        for msg in self.get_messages():
 | 
				
			||||||
            if msg['id'] in self.unread_msg_ids:
 | 
					            if msg['id'] in self.unread_msg_ids:
 | 
				
			||||||
                self.assertEqual(msg['flags'], ['read'])
 | 
					                check_flags(msg['flags'], {'read'})
 | 
				
			||||||
                found += 1
 | 
					                found += 1
 | 
				
			||||||
        self.assertEqual(found, 2)
 | 
					        self.assertEqual(found, 2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -179,9 +189,9 @@ class UnreadCountTests(ZulipTestCase):
 | 
				
			|||||||
        # Ensure we properly remove just one flag
 | 
					        # Ensure we properly remove just one flag
 | 
				
			||||||
        for msg in self.get_messages():
 | 
					        for msg in self.get_messages():
 | 
				
			||||||
            if msg['id'] == self.unread_msg_ids[0]:
 | 
					            if msg['id'] == self.unread_msg_ids[0]:
 | 
				
			||||||
                self.assertEqual(msg['flags'], ['read'])
 | 
					                check_flags(msg['flags'], {'read'})
 | 
				
			||||||
            elif msg['id'] == self.unread_msg_ids[1]:
 | 
					            elif msg['id'] == self.unread_msg_ids[1]:
 | 
				
			||||||
                self.assertEqual(msg['flags'], [])
 | 
					                check_flags(msg['flags'], set())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_mark_all_in_stream_read(self) -> None:
 | 
					    def test_mark_all_in_stream_read(self) -> None:
 | 
				
			||||||
        self.login('hamlet')
 | 
					        self.login('hamlet')
 | 
				
			||||||
@@ -914,17 +924,17 @@ class MessageAccessTests(ZulipTestCase):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        for msg in self.get_messages():
 | 
					        for msg in self.get_messages():
 | 
				
			||||||
            if msg['id'] in message_ids:
 | 
					            if msg['id'] in message_ids:
 | 
				
			||||||
                self.assertEqual(msg['flags'], ['starred'])
 | 
					                check_flags(msg['flags'], {'starred'})
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                self.assertEqual(msg['flags'], ['read'])
 | 
					                check_flags(msg['flags'], {'read'})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Remove the stars.
 | 
				
			||||||
        result = self.change_star(message_ids, False)
 | 
					        result = self.change_star(message_ids, False)
 | 
				
			||||||
        self.assert_json_success(result)
 | 
					        self.assert_json_success(result)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Remove the stars.
 | 
					 | 
				
			||||||
        for msg in self.get_messages():
 | 
					        for msg in self.get_messages():
 | 
				
			||||||
            if msg['id'] in message_ids:
 | 
					            if msg['id'] in message_ids:
 | 
				
			||||||
                self.assertEqual(msg['flags'], [])
 | 
					                check_flags(msg['flags'], set())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_change_star_public_stream_historical(self) -> None:
 | 
					    def test_change_star_public_stream_historical(self) -> None:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
@@ -981,11 +991,11 @@ class MessageAccessTests(ZulipTestCase):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        for msg in self.get_messages():
 | 
					        for msg in self.get_messages():
 | 
				
			||||||
            if msg['id'] in message_ids:
 | 
					            if msg['id'] in message_ids:
 | 
				
			||||||
                self.assertEqual(set(msg['flags']), {'starred', 'historical', 'read'})
 | 
					                check_flags(msg['flags'], {'starred', 'historical', 'read'})
 | 
				
			||||||
            elif msg['id'] in received_message_ids:
 | 
					            elif msg['id'] in received_message_ids:
 | 
				
			||||||
                self.assertEqual(msg['flags'], [])
 | 
					                check_flags(msg['flags'], set())
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                self.assertEqual(msg['flags'], ['read'])
 | 
					                check_flags(msg['flags'], {'read'})
 | 
				
			||||||
            self.assertNotIn(msg['id'], other_message_ids)
 | 
					            self.assertNotIn(msg['id'], other_message_ids)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        result = self.change_star(message_ids, False)
 | 
					        result = self.change_star(message_ids, False)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,6 +37,7 @@ from zerver.lib.user_groups import create_user_group
 | 
				
			|||||||
from zerver.lib.users import add_service
 | 
					from zerver.lib.users import add_service
 | 
				
			||||||
from zerver.lib.utils import generate_api_key
 | 
					from zerver.lib.utils import generate_api_key
 | 
				
			||||||
from zerver.models import (
 | 
					from zerver.models import (
 | 
				
			||||||
 | 
					    AlertWord,
 | 
				
			||||||
    Client,
 | 
					    Client,
 | 
				
			||||||
    CustomProfileField,
 | 
					    CustomProfileField,
 | 
				
			||||||
    DefaultStream,
 | 
					    DefaultStream,
 | 
				
			||||||
@@ -123,6 +124,41 @@ def subscribe_users_to_streams(realm: Realm, stream_dict: Dict[str, Dict[str, An
 | 
				
			|||||||
    Subscription.objects.bulk_create(subscriptions_to_add)
 | 
					    Subscription.objects.bulk_create(subscriptions_to_add)
 | 
				
			||||||
    RealmAuditLog.objects.bulk_create(all_subscription_logs)
 | 
					    RealmAuditLog.objects.bulk_create(all_subscription_logs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def create_alert_words(realm_id: int) -> None:
 | 
				
			||||||
 | 
					    user_ids = UserProfile.objects.filter(
 | 
				
			||||||
 | 
					        realm_id=realm_id,
 | 
				
			||||||
 | 
					        is_bot=False,
 | 
				
			||||||
 | 
					        is_active=True,
 | 
				
			||||||
 | 
					    ).values_list('id', flat=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    alert_words = [
 | 
				
			||||||
 | 
					        'algorithms',
 | 
				
			||||||
 | 
					        'complexity',
 | 
				
			||||||
 | 
					        'founded',
 | 
				
			||||||
 | 
					        'galaxy',
 | 
				
			||||||
 | 
					        'grammar',
 | 
				
			||||||
 | 
					        'illustrious',
 | 
				
			||||||
 | 
					        'natural',
 | 
				
			||||||
 | 
					        'objective',
 | 
				
			||||||
 | 
					        'people',
 | 
				
			||||||
 | 
					        'robotics',
 | 
				
			||||||
 | 
					        'study',
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    recs: List[AlertWord] = []
 | 
				
			||||||
 | 
					    for user_id in user_ids:
 | 
				
			||||||
 | 
					        random.shuffle(alert_words)
 | 
				
			||||||
 | 
					        for i in range(4):
 | 
				
			||||||
 | 
					            recs.append(
 | 
				
			||||||
 | 
					                AlertWord(
 | 
				
			||||||
 | 
					                    realm_id=realm_id,
 | 
				
			||||||
 | 
					                    user_profile_id=user_id,
 | 
				
			||||||
 | 
					                    word = alert_words[i],
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AlertWord.objects.bulk_create(recs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Command(BaseCommand):
 | 
					class Command(BaseCommand):
 | 
				
			||||||
    help = "Populate a test database"
 | 
					    help = "Populate a test database"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -522,6 +558,8 @@ class Command(BaseCommand):
 | 
				
			|||||||
        personals_pairs = [random.sample(user_profiles_ids, 2)
 | 
					        personals_pairs = [random.sample(user_profiles_ids, 2)
 | 
				
			||||||
                           for i in range(options["num_personals"])]
 | 
					                           for i in range(options["num_personals"])]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        create_alert_words(zulip_realm.id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Generate a new set of test data.
 | 
					        # Generate a new set of test data.
 | 
				
			||||||
        create_test_data()
 | 
					        create_test_data()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user