mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	populate_db: Add new admin user as 'Desdemona'.
This commit adds a second admin user named 'Desdemona' to dev and test database.
This commit is contained in:
		@@ -18,7 +18,7 @@ from zerver.lib.test_classes import ZulipTestCase
 | 
			
		||||
from zerver.lib.timestamp import ceiling_to_day, \
 | 
			
		||||
    ceiling_to_hour, datetime_to_timestamp
 | 
			
		||||
from zerver.lib.actions import do_create_multiuse_invite_link, \
 | 
			
		||||
    do_send_realm_reactivation_email, do_change_is_admin
 | 
			
		||||
    do_send_realm_reactivation_email
 | 
			
		||||
from zerver.models import Client, get_realm, MultiuseInvite
 | 
			
		||||
 | 
			
		||||
class TestStatsEndpoint(ZulipTestCase):
 | 
			
		||||
@@ -403,8 +403,8 @@ class TestSupportEndpoint(ZulipTestCase):
 | 
			
		||||
        def check_hamlet_user_query_result(result: HttpResponse) -> None:
 | 
			
		||||
            self.assert_in_success_response(['<span class="label">user</span>\n', '<h3>King Hamlet</h3>',
 | 
			
		||||
                                             '<b>Email</b>: hamlet@zulip.com', '<b>Is active</b>: True<br>',
 | 
			
		||||
                                             '<b>Admins</b>: iago@zulip.com, othello@zulip.com\n',
 | 
			
		||||
                                             'class="copy-button" data-copytext="iago@zulip.com, othello@zulip.com"'
 | 
			
		||||
                                             '<b>Admins</b>: desdemona@zulip.com, iago@zulip.com\n',
 | 
			
		||||
                                             'class="copy-button" data-copytext="desdemona@zulip.com, iago@zulip.com"'
 | 
			
		||||
                                             ], result)
 | 
			
		||||
 | 
			
		||||
        def check_zulip_realm_query_result(result: HttpResponse) -> None:
 | 
			
		||||
@@ -464,9 +464,6 @@ class TestSupportEndpoint(ZulipTestCase):
 | 
			
		||||
                                             '<b>Expires in</b>: 1\xa0day'
 | 
			
		||||
                                             ], result)
 | 
			
		||||
 | 
			
		||||
        othello = self.example_user('othello')
 | 
			
		||||
        do_change_is_admin(othello, True)
 | 
			
		||||
 | 
			
		||||
        self.login('cordelia')
 | 
			
		||||
 | 
			
		||||
        result = self.client_get("/activity/support")
 | 
			
		||||
 
 | 
			
		||||
@@ -247,6 +247,7 @@ class ZulipTestCase(TestCase):
 | 
			
		||||
        aaron='aaron@zulip.com',
 | 
			
		||||
        ZOE='ZOE@zulip.com',
 | 
			
		||||
        polonius='polonius@zulip.com',
 | 
			
		||||
        desdemona='desdemona@zulip.com',
 | 
			
		||||
        webhook_bot='webhook-bot@zulip.com',
 | 
			
		||||
        welcome_bot='welcome-bot@zulip.com',
 | 
			
		||||
        outgoing_webhook_bot='outgoing-webhook@zulip.com',
 | 
			
		||||
 
 | 
			
		||||
@@ -603,11 +603,11 @@ def send_message(client: Client) -> int:
 | 
			
		||||
    assert result['result'] == 'success'
 | 
			
		||||
    assert result['raw_content'] == request['content']
 | 
			
		||||
 | 
			
		||||
    ensure_users([9], ['hamlet'])
 | 
			
		||||
    ensure_users([10], ['hamlet'])
 | 
			
		||||
 | 
			
		||||
    # {code_example|start}
 | 
			
		||||
    # Send a private message
 | 
			
		||||
    user_id = 9
 | 
			
		||||
    user_id = 10
 | 
			
		||||
    request = {
 | 
			
		||||
        "type": "private",
 | 
			
		||||
        "to": [user_id],
 | 
			
		||||
@@ -896,12 +896,12 @@ def get_stream_topics(client: Client, stream_id: int) -> None:
 | 
			
		||||
 | 
			
		||||
@openapi_test_function("/typing:post")
 | 
			
		||||
def set_typing_status(client: Client) -> None:
 | 
			
		||||
    ensure_users([9, 10], ['hamlet', 'iago'])
 | 
			
		||||
    ensure_users([10, 11], ['hamlet', 'iago'])
 | 
			
		||||
 | 
			
		||||
    # {code_example|start}
 | 
			
		||||
    # The user has started to type in the group PM with Iago and Polonius
 | 
			
		||||
    user_id1 = 9
 | 
			
		||||
    user_id2 = 10
 | 
			
		||||
    user_id1 = 10
 | 
			
		||||
    user_id2 = 11
 | 
			
		||||
 | 
			
		||||
    request = {
 | 
			
		||||
        'op': 'start',
 | 
			
		||||
@@ -914,8 +914,8 @@ def set_typing_status(client: Client) -> None:
 | 
			
		||||
 | 
			
		||||
    # {code_example|start}
 | 
			
		||||
    # The user has finished typing in the group PM with Iago and Polonius
 | 
			
		||||
    user_id1 = 9
 | 
			
		||||
    user_id2 = 10
 | 
			
		||||
    user_id1 = 10
 | 
			
		||||
    user_id2 = 11
 | 
			
		||||
 | 
			
		||||
    request = {
 | 
			
		||||
        'op': 'stop',
 | 
			
		||||
@@ -969,13 +969,13 @@ def remove_alert_words(client: Client) -> None:
 | 
			
		||||
 | 
			
		||||
@openapi_test_function("/user_groups/create:post")
 | 
			
		||||
def create_user_group(client: Client) -> None:
 | 
			
		||||
    ensure_users([6, 7, 8, 9], ['aaron', 'zoe', 'cordelia', 'hamlet'])
 | 
			
		||||
    ensure_users([6, 7, 8, 10], ['aaron', 'zoe', 'cordelia', 'hamlet'])
 | 
			
		||||
 | 
			
		||||
    # {code_example|start}
 | 
			
		||||
    request = {
 | 
			
		||||
        'name': 'marketing',
 | 
			
		||||
        'description': 'The marketing team.',
 | 
			
		||||
        'members': [6, 7, 8, 9],
 | 
			
		||||
        'members': [6, 7, 8, 10],
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    result = client.create_user_group(request)
 | 
			
		||||
@@ -1008,12 +1008,12 @@ def remove_user_group(client: Client, group_id: int) -> None:
 | 
			
		||||
 | 
			
		||||
@openapi_test_function("/user_groups/{group_id}/members:post")
 | 
			
		||||
def update_user_group_members(client: Client, group_id: int) -> None:
 | 
			
		||||
    ensure_users([8, 9, 10], ['cordelia', 'hamlet', 'iago'])
 | 
			
		||||
    ensure_users([8, 10, 11], ['cordelia', 'hamlet', 'iago'])
 | 
			
		||||
 | 
			
		||||
    request = {
 | 
			
		||||
        'group_id': group_id,
 | 
			
		||||
        'delete': [8, 9],
 | 
			
		||||
        'add': [10]
 | 
			
		||||
        'delete': [8, 10],
 | 
			
		||||
        'add': [11]
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    result = client.update_user_group_members(request)
 | 
			
		||||
 
 | 
			
		||||
@@ -3693,7 +3693,7 @@ components:
 | 
			
		||||
        The target user's ID.
 | 
			
		||||
      schema:
 | 
			
		||||
        type: integer
 | 
			
		||||
      example: 11
 | 
			
		||||
      example: 12
 | 
			
		||||
      required: true
 | 
			
		||||
    StreamPostPolicy:
 | 
			
		||||
      name: stream_post_policy
 | 
			
		||||
 
 | 
			
		||||
@@ -3717,6 +3717,9 @@ class DeactivateUserTest(ZulipTestCase):
 | 
			
		||||
 | 
			
		||||
    def test_do_not_deactivate_final_admin(self) -> None:
 | 
			
		||||
        user = self.example_user('iago')
 | 
			
		||||
        user_2 = self.example_user('desdemona')
 | 
			
		||||
        do_change_is_admin(user_2, False)
 | 
			
		||||
        self.assertFalse(user_2.is_realm_admin)
 | 
			
		||||
        self.login_user(user)
 | 
			
		||||
        self.assertTrue(user.is_active)
 | 
			
		||||
        result = self.client_delete('/json/users/me')
 | 
			
		||||
@@ -3724,7 +3727,6 @@ class DeactivateUserTest(ZulipTestCase):
 | 
			
		||||
        user = self.example_user('iago')
 | 
			
		||||
        self.assertTrue(user.is_active)
 | 
			
		||||
        self.assertTrue(user.is_realm_admin)
 | 
			
		||||
        user_2 = self.example_user('hamlet')
 | 
			
		||||
        do_change_is_admin(user_2, True)
 | 
			
		||||
        self.assertTrue(user_2.is_realm_admin)
 | 
			
		||||
        result = self.client_delete('/json/users/me')
 | 
			
		||||
@@ -3733,6 +3735,7 @@ class DeactivateUserTest(ZulipTestCase):
 | 
			
		||||
 | 
			
		||||
    def test_do_not_deactivate_final_user(self) -> None:
 | 
			
		||||
        realm = get_realm('zulip')
 | 
			
		||||
        do_change_is_admin(self.example_user("desdemona"), False)
 | 
			
		||||
        UserProfile.objects.filter(realm=realm).exclude(
 | 
			
		||||
            role=UserProfile.ROLE_REALM_ADMINISTRATOR).update(is_active=False)
 | 
			
		||||
        user = self.example_user("iago")
 | 
			
		||||
 
 | 
			
		||||
@@ -58,6 +58,7 @@ class UserSoftDeactivationTests(ZulipTestCase):
 | 
			
		||||
            self.example_user('prospero'),
 | 
			
		||||
            self.example_user('aaron'),
 | 
			
		||||
            self.example_user('polonius'),
 | 
			
		||||
            self.example_user('desdemona'),
 | 
			
		||||
        ]
 | 
			
		||||
        client, _ = Client.objects.get_or_create(name='website')
 | 
			
		||||
        query = '/json/users/me/pointer'
 | 
			
		||||
@@ -74,7 +75,7 @@ class UserSoftDeactivationTests(ZulipTestCase):
 | 
			
		||||
        filter_kwargs = dict(user_profile__realm=get_realm('zulip'))
 | 
			
		||||
        users_to_deactivate = get_users_for_soft_deactivation(-1, filter_kwargs)
 | 
			
		||||
 | 
			
		||||
        self.assert_length(users_to_deactivate, 8)
 | 
			
		||||
        self.assert_length(users_to_deactivate, 9)
 | 
			
		||||
        for user in users_to_deactivate:
 | 
			
		||||
            self.assertTrue(user in users)
 | 
			
		||||
 | 
			
		||||
@@ -108,6 +109,7 @@ class UserSoftDeactivationTests(ZulipTestCase):
 | 
			
		||||
            self.example_user('prospero'),
 | 
			
		||||
            self.example_user('aaron'),
 | 
			
		||||
            self.example_user('polonius'),
 | 
			
		||||
            self.example_user('desdemona'),
 | 
			
		||||
        ]
 | 
			
		||||
        for user_profile in UserProfile.objects.all():
 | 
			
		||||
            user_profile.long_term_idle = True
 | 
			
		||||
@@ -116,7 +118,7 @@ class UserSoftDeactivationTests(ZulipTestCase):
 | 
			
		||||
        filter_kwargs = dict(realm=get_realm('zulip'))
 | 
			
		||||
        users_to_catch_up = get_soft_deactivated_users_for_catch_up(filter_kwargs)
 | 
			
		||||
 | 
			
		||||
        self.assert_length(users_to_catch_up, 8)
 | 
			
		||||
        self.assert_length(users_to_catch_up, 9)
 | 
			
		||||
        for user in users_to_catch_up:
 | 
			
		||||
            self.assertTrue(user in users)
 | 
			
		||||
 | 
			
		||||
@@ -157,6 +159,7 @@ class UserSoftDeactivationTests(ZulipTestCase):
 | 
			
		||||
            self.example_user('prospero'),
 | 
			
		||||
            self.example_user('aaron'),
 | 
			
		||||
            self.example_user('polonius'),
 | 
			
		||||
            self.example_user('desdemona'),
 | 
			
		||||
        ]
 | 
			
		||||
        sender = self.example_user('hamlet')
 | 
			
		||||
        realm = get_realm('zulip')
 | 
			
		||||
 
 | 
			
		||||
@@ -134,7 +134,9 @@ class TestCreateStreams(ZulipTestCase):
 | 
			
		||||
        self.assertEqual(events[0]['event']['type'], 'stream')
 | 
			
		||||
        self.assertEqual(events[0]['event']['op'], 'create')
 | 
			
		||||
        # Send private stream creation event to only realm admins.
 | 
			
		||||
        self.assertEqual(events[0]['users'], [self.example_user("iago").id])
 | 
			
		||||
        self.assertEqual(len(events[0]['users']), 2)
 | 
			
		||||
        self.assertTrue(self.example_user("iago").id in events[0]['users'])
 | 
			
		||||
        self.assertTrue(self.example_user("desdemona").id in events[0]['users'])
 | 
			
		||||
        self.assertEqual(events[0]['event']['streams'][0]['name'], "Private stream")
 | 
			
		||||
 | 
			
		||||
        new_streams, existing_streams = create_streams_if_needed(
 | 
			
		||||
@@ -2496,7 +2498,7 @@ class SubscriptionAPITest(ZulipTestCase):
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.assertNotIn(self.example_user('polonius').id, add_peer_event['users'])
 | 
			
		||||
        self.assertEqual(len(add_peer_event['users']), 10)
 | 
			
		||||
        self.assertEqual(len(add_peer_event['users']), 11)
 | 
			
		||||
        self.assertEqual(add_peer_event['event']['type'], 'subscription')
 | 
			
		||||
        self.assertEqual(add_peer_event['event']['op'], 'peer_add')
 | 
			
		||||
        self.assertEqual(add_peer_event['event']['user_id'], self.user_profile.id)
 | 
			
		||||
@@ -2528,7 +2530,7 @@ class SubscriptionAPITest(ZulipTestCase):
 | 
			
		||||
        # We don't send a peer_add event to othello
 | 
			
		||||
        self.assertNotIn(user_profile.id, add_peer_event['users'])
 | 
			
		||||
        self.assertNotIn(self.example_user('polonius').id, add_peer_event['users'])
 | 
			
		||||
        self.assertEqual(len(add_peer_event['users']), 10)
 | 
			
		||||
        self.assertEqual(len(add_peer_event['users']), 11)
 | 
			
		||||
        self.assertEqual(add_peer_event['event']['type'], 'subscription')
 | 
			
		||||
        self.assertEqual(add_peer_event['event']['op'], 'peer_add')
 | 
			
		||||
        self.assertEqual(add_peer_event['event']['user_id'], user_profile.id)
 | 
			
		||||
@@ -2569,7 +2571,7 @@ class SubscriptionAPITest(ZulipTestCase):
 | 
			
		||||
        # We don't send a peer_add event to othello, but we do send peer_add event to
 | 
			
		||||
        # all realm admins.
 | 
			
		||||
        self.assertNotIn(user_profile.id, add_peer_event['users'])
 | 
			
		||||
        self.assertEqual(len(add_peer_event['users']), 2)
 | 
			
		||||
        self.assertEqual(len(add_peer_event['users']), 3)
 | 
			
		||||
        self.assertEqual(add_peer_event['event']['type'], 'subscription')
 | 
			
		||||
        self.assertEqual(add_peer_event['event']['op'], 'peer_add')
 | 
			
		||||
        self.assertEqual(add_peer_event['event']['user_id'], user_profile.id)
 | 
			
		||||
@@ -2582,8 +2584,8 @@ class SubscriptionAPITest(ZulipTestCase):
 | 
			
		||||
        with tornado_redirected_to_list(events):
 | 
			
		||||
            bulk_add_subscriptions([new_stream], [self.example_user("iago")])
 | 
			
		||||
 | 
			
		||||
        self.assert_length(events, 2)
 | 
			
		||||
        create_event, add_event = events
 | 
			
		||||
        self.assert_length(events, 3)
 | 
			
		||||
        create_event, add_event, add_peer_event = events
 | 
			
		||||
        self.assertEqual(create_event['event']['type'], 'stream')
 | 
			
		||||
        self.assertEqual(create_event['event']['op'], 'create')
 | 
			
		||||
        self.assertEqual(create_event['users'], [])
 | 
			
		||||
@@ -2592,6 +2594,11 @@ class SubscriptionAPITest(ZulipTestCase):
 | 
			
		||||
        self.assertEqual(add_event['event']['op'], 'add')
 | 
			
		||||
        self.assertEqual(add_event['users'], [self.example_user("iago").id])
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(len(add_peer_event['users']), 1)
 | 
			
		||||
        self.assertEqual(add_peer_event['event']['type'], 'subscription')
 | 
			
		||||
        self.assertEqual(add_peer_event['event']['op'], 'peer_add')
 | 
			
		||||
        self.assertEqual(add_peer_event['event']['user_id'], self.example_user("iago").id)
 | 
			
		||||
 | 
			
		||||
    def test_subscribe_to_stream_post_policy_admins_stream(self) -> None:
 | 
			
		||||
        """
 | 
			
		||||
        Members can subscribe to streams where only admins can post
 | 
			
		||||
 
 | 
			
		||||
@@ -128,22 +128,20 @@ class PermissionTest(ZulipTestCase):
 | 
			
		||||
        self.assert_json_error(result, 'No such user')
 | 
			
		||||
 | 
			
		||||
    def test_admin_api(self) -> None:
 | 
			
		||||
        self.login('hamlet')
 | 
			
		||||
        self.login('desdemona')
 | 
			
		||||
 | 
			
		||||
        hamlet = self.example_user('hamlet')
 | 
			
		||||
        othello = self.example_user('othello')
 | 
			
		||||
        iago = self.example_user('iago')
 | 
			
		||||
        desdemona = self.example_user('desdemona')
 | 
			
		||||
        realm = hamlet.realm
 | 
			
		||||
 | 
			
		||||
        # Make hamlet an additional admin
 | 
			
		||||
        do_change_is_admin(hamlet, True)
 | 
			
		||||
 | 
			
		||||
        # Make sure we see is_admin flag in /json/users
 | 
			
		||||
        result = self.client_get('/json/users')
 | 
			
		||||
        self.assert_json_success(result)
 | 
			
		||||
        members = result.json()['members']
 | 
			
		||||
        hamlet_dict = find_dict(members, 'email', hamlet.email)
 | 
			
		||||
        self.assertTrue(hamlet_dict['is_admin'])
 | 
			
		||||
        desdemona_dict = find_dict(members, 'email', desdemona.email)
 | 
			
		||||
        self.assertTrue(desdemona_dict['is_admin'])
 | 
			
		||||
        othello_dict = find_dict(members, 'email', othello.email)
 | 
			
		||||
        self.assertFalse(othello_dict['is_admin'])
 | 
			
		||||
 | 
			
		||||
@@ -177,12 +175,12 @@ class PermissionTest(ZulipTestCase):
 | 
			
		||||
        req = dict(is_admin=ujson.dumps(False))
 | 
			
		||||
        events = []
 | 
			
		||||
        with tornado_redirected_to_list(events):
 | 
			
		||||
            result = self.client_patch('/json/users/{}'.format(hamlet.id), req)
 | 
			
		||||
            result = self.client_patch('/json/users/{}'.format(desdemona.id), req)
 | 
			
		||||
        self.assert_json_success(result)
 | 
			
		||||
        admin_users = realm.get_human_admin_users()
 | 
			
		||||
        self.assertFalse(hamlet in admin_users)
 | 
			
		||||
        self.assertFalse(desdemona in admin_users)
 | 
			
		||||
        person = events[0]['event']['person']
 | 
			
		||||
        self.assertEqual(person['user_id'], hamlet.id)
 | 
			
		||||
        self.assertEqual(person['user_id'], desdemona.id)
 | 
			
		||||
        self.assertEqual(person['is_admin'], False)
 | 
			
		||||
        with tornado_redirected_to_list([]):
 | 
			
		||||
            result = self.client_patch('/json/users/{}'.format(iago.id), req)
 | 
			
		||||
@@ -1016,9 +1014,8 @@ class ActivateTest(ZulipTestCase):
 | 
			
		||||
        self.assertTrue(user.is_active)
 | 
			
		||||
 | 
			
		||||
    def test_api_with_nonexistent_user(self) -> None:
 | 
			
		||||
        admin = self.example_user('othello')
 | 
			
		||||
        do_change_is_admin(admin, True)
 | 
			
		||||
        self.login('othello')
 | 
			
		||||
        admin = self.example_user('desdemona')
 | 
			
		||||
        self.login_user(admin)
 | 
			
		||||
 | 
			
		||||
        # Cannot deactivate a user with the bot api
 | 
			
		||||
        result = self.client_delete('/json/bots/{}'.format(self.example_user("hamlet").id))
 | 
			
		||||
 
 | 
			
		||||
@@ -238,6 +238,7 @@ class Command(BaseCommand):
 | 
			
		||||
                ("King Hamlet", "hamlet@zulip.com"),
 | 
			
		||||
                ("aaron", "AARON@zulip.com"),
 | 
			
		||||
                ("Polonius", "polonius@zulip.com"),
 | 
			
		||||
                ("Desdemona", "desdemona@zulip.com"),
 | 
			
		||||
            ]
 | 
			
		||||
 | 
			
		||||
            # For testing really large batches:
 | 
			
		||||
@@ -281,6 +282,9 @@ class Command(BaseCommand):
 | 
			
		||||
            iago.is_staff = True
 | 
			
		||||
            iago.save(update_fields=['is_staff'])
 | 
			
		||||
 | 
			
		||||
            desdemona = get_user_by_delivery_email("desdemona@zulip.com", zulip_realm)
 | 
			
		||||
            do_change_is_admin(desdemona, True)
 | 
			
		||||
 | 
			
		||||
            guest_user = get_user_by_delivery_email("polonius@zulip.com", zulip_realm)
 | 
			
		||||
            guest_user.role = UserProfile.ROLE_GUEST
 | 
			
		||||
            guest_user.save(update_fields=['role'])
 | 
			
		||||
@@ -356,6 +360,7 @@ class Command(BaseCommand):
 | 
			
		||||
                    'prospero@zulip.com': ['Verona', 'Denmark', 'Scotland', 'Venice'],
 | 
			
		||||
                    'ZOE@zulip.com': ['Verona', 'Denmark', 'Scotland', 'Venice', 'Rome'],
 | 
			
		||||
                    'polonius@zulip.com': ['Verona'],
 | 
			
		||||
                    'desdemona@zulip.com': ['Verona', 'Denmark', 'Venice'],
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                for profile in profiles:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user