mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	models: Add USER_CREATED event type constant to RealmAuditLog.
This commit is contained in:
		@@ -31,7 +31,7 @@ class Command(BaseCommand):
 | 
				
			|||||||
            realm=realm, short_name=full_name, pointer=-1, last_pointer_updater='none',
 | 
					            realm=realm, short_name=full_name, pointer=-1, last_pointer_updater='none',
 | 
				
			||||||
            api_key='42', date_joined=date_joined)
 | 
					            api_key='42', date_joined=date_joined)
 | 
				
			||||||
        RealmAuditLog.objects.create(
 | 
					        RealmAuditLog.objects.create(
 | 
				
			||||||
            realm=realm, modified_user=user, event_type='user_created',
 | 
					            realm=realm, modified_user=user, event_type=RealmAuditLog.USER_CREATED,
 | 
				
			||||||
            event_time=user.date_joined)
 | 
					            event_time=user.date_joined)
 | 
				
			||||||
        return user
 | 
					        return user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -896,7 +896,7 @@ class TestActiveUsersAudit(AnalyticsTestCase):
 | 
				
			|||||||
            event_time=self.TIME_ZERO - hours_offset*self.HOUR)
 | 
					            event_time=self.TIME_ZERO - hours_offset*self.HOUR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_user_deactivated_in_future(self) -> None:
 | 
					    def test_user_deactivated_in_future(self) -> None:
 | 
				
			||||||
        self.add_event('user_created', 1)
 | 
					        self.add_event(RealmAuditLog.USER_CREATED, 1)
 | 
				
			||||||
        self.add_event('user_deactivated', 0)
 | 
					        self.add_event('user_deactivated', 0)
 | 
				
			||||||
        do_fill_count_stat_at_hour(self.stat, self.TIME_ZERO)
 | 
					        do_fill_count_stat_at_hour(self.stat, self.TIME_ZERO)
 | 
				
			||||||
        self.assertTableState(UserCount, ['subgroup'], [['false']])
 | 
					        self.assertTableState(UserCount, ['subgroup'], [['false']])
 | 
				
			||||||
@@ -908,7 +908,7 @@ class TestActiveUsersAudit(AnalyticsTestCase):
 | 
				
			|||||||
        self.assertTableState(UserCount, [], [])
 | 
					        self.assertTableState(UserCount, [], [])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_user_active_then_deactivated_same_day(self) -> None:
 | 
					    def test_user_active_then_deactivated_same_day(self) -> None:
 | 
				
			||||||
        self.add_event('user_created', 1)
 | 
					        self.add_event(RealmAuditLog.USER_CREATED, 1)
 | 
				
			||||||
        self.add_event('user_deactivated', .5)
 | 
					        self.add_event('user_deactivated', .5)
 | 
				
			||||||
        do_fill_count_stat_at_hour(self.stat, self.TIME_ZERO)
 | 
					        do_fill_count_stat_at_hour(self.stat, self.TIME_ZERO)
 | 
				
			||||||
        self.assertTableState(UserCount, [], [])
 | 
					        self.assertTableState(UserCount, [], [])
 | 
				
			||||||
@@ -922,7 +922,7 @@ class TestActiveUsersAudit(AnalyticsTestCase):
 | 
				
			|||||||
    # Arguably these next two tests are duplicates of the _in_future tests, but are
 | 
					    # Arguably these next two tests are duplicates of the _in_future tests, but are
 | 
				
			||||||
    # a guard against future refactorings where they may no longer be duplicates
 | 
					    # a guard against future refactorings where they may no longer be duplicates
 | 
				
			||||||
    def test_user_active_then_deactivated_with_day_gap(self) -> None:
 | 
					    def test_user_active_then_deactivated_with_day_gap(self) -> None:
 | 
				
			||||||
        self.add_event('user_created', 2)
 | 
					        self.add_event(RealmAuditLog.USER_CREATED, 2)
 | 
				
			||||||
        self.add_event('user_deactivated', 1)
 | 
					        self.add_event('user_deactivated', 1)
 | 
				
			||||||
        process_count_stat(self.stat, self.TIME_ZERO)
 | 
					        process_count_stat(self.stat, self.TIME_ZERO)
 | 
				
			||||||
        self.assertTableState(UserCount, ['subgroup', 'end_time'],
 | 
					        self.assertTableState(UserCount, ['subgroup', 'end_time'],
 | 
				
			||||||
@@ -935,7 +935,7 @@ class TestActiveUsersAudit(AnalyticsTestCase):
 | 
				
			|||||||
        self.assertTableState(UserCount, ['subgroup'], [['false']])
 | 
					        self.assertTableState(UserCount, ['subgroup'], [['false']])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_event_types(self) -> None:
 | 
					    def test_event_types(self) -> None:
 | 
				
			||||||
        self.add_event('user_created', 4)
 | 
					        self.add_event(RealmAuditLog.USER_CREATED, 4)
 | 
				
			||||||
        self.add_event('user_deactivated', 3)
 | 
					        self.add_event('user_deactivated', 3)
 | 
				
			||||||
        self.add_event('user_activated', 2)
 | 
					        self.add_event('user_activated', 2)
 | 
				
			||||||
        self.add_event('user_reactivated', 1)
 | 
					        self.add_event('user_reactivated', 1)
 | 
				
			||||||
@@ -953,7 +953,7 @@ class TestActiveUsersAudit(AnalyticsTestCase):
 | 
				
			|||||||
        user3 = self.create_user(realm=second_realm)
 | 
					        user3 = self.create_user(realm=second_realm)
 | 
				
			||||||
        user4 = self.create_user(realm=second_realm, is_bot=True)
 | 
					        user4 = self.create_user(realm=second_realm, is_bot=True)
 | 
				
			||||||
        for user in [user1, user2, user3, user4]:
 | 
					        for user in [user1, user2, user3, user4]:
 | 
				
			||||||
            self.add_event('user_created', 1, user=user)
 | 
					            self.add_event(RealmAuditLog.USER_CREATED, 1, user=user)
 | 
				
			||||||
        do_fill_count_stat_at_hour(self.stat, self.TIME_ZERO)
 | 
					        do_fill_count_stat_at_hour(self.stat, self.TIME_ZERO)
 | 
				
			||||||
        self.assertTableState(UserCount, ['subgroup', 'user'],
 | 
					        self.assertTableState(UserCount, ['subgroup', 'user'],
 | 
				
			||||||
                              [['false', user1], ['false', user2], ['false', user3], ['true', user4]])
 | 
					                              [['false', user1], ['false', user2], ['false', user3], ['true', user4]])
 | 
				
			||||||
@@ -971,7 +971,7 @@ class TestActiveUsersAudit(AnalyticsTestCase):
 | 
				
			|||||||
    # CountStat.HOUR from CountStat.DAY, this will fail, while many of the
 | 
					    # CountStat.HOUR from CountStat.DAY, this will fail, while many of the
 | 
				
			||||||
    # tests above will not.
 | 
					    # tests above will not.
 | 
				
			||||||
    def test_update_from_two_days_ago(self) -> None:
 | 
					    def test_update_from_two_days_ago(self) -> None:
 | 
				
			||||||
        self.add_event('user_created', 2)
 | 
					        self.add_event(RealmAuditLog.USER_CREATED, 2)
 | 
				
			||||||
        process_count_stat(self.stat, self.TIME_ZERO)
 | 
					        process_count_stat(self.stat, self.TIME_ZERO)
 | 
				
			||||||
        self.assertTableState(UserCount, ['subgroup', 'end_time'],
 | 
					        self.assertTableState(UserCount, ['subgroup', 'end_time'],
 | 
				
			||||||
                              [['false', self.TIME_ZERO], ['false', self.TIME_ZERO-self.DAY]])
 | 
					                              [['false', self.TIME_ZERO], ['false', self.TIME_ZERO-self.DAY]])
 | 
				
			||||||
@@ -987,14 +987,14 @@ class TestActiveUsersAudit(AnalyticsTestCase):
 | 
				
			|||||||
        self.assertTableState(UserCount, [], [])
 | 
					        self.assertTableState(UserCount, [], [])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_max_audit_entry_is_unrelated(self) -> None:
 | 
					    def test_max_audit_entry_is_unrelated(self) -> None:
 | 
				
			||||||
        self.add_event('user_created', 1)
 | 
					        self.add_event(RealmAuditLog.USER_CREATED, 1)
 | 
				
			||||||
        self.add_event('unrelated', .5)
 | 
					        self.add_event('unrelated', .5)
 | 
				
			||||||
        do_fill_count_stat_at_hour(self.stat, self.TIME_ZERO)
 | 
					        do_fill_count_stat_at_hour(self.stat, self.TIME_ZERO)
 | 
				
			||||||
        self.assertTableState(UserCount, ['subgroup'], [['false']])
 | 
					        self.assertTableState(UserCount, ['subgroup'], [['false']])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Simultaneous related audit entries should not be allowed, and so not testing for that.
 | 
					    # Simultaneous related audit entries should not be allowed, and so not testing for that.
 | 
				
			||||||
    def test_simultaneous_unrelated_audit_entry(self) -> None:
 | 
					    def test_simultaneous_unrelated_audit_entry(self) -> None:
 | 
				
			||||||
        self.add_event('user_created', 1)
 | 
					        self.add_event(RealmAuditLog.USER_CREATED, 1)
 | 
				
			||||||
        self.add_event('unrelated', 1)
 | 
					        self.add_event('unrelated', 1)
 | 
				
			||||||
        do_fill_count_stat_at_hour(self.stat, self.TIME_ZERO)
 | 
					        do_fill_count_stat_at_hour(self.stat, self.TIME_ZERO)
 | 
				
			||||||
        self.assertTableState(UserCount, ['subgroup'], [['false']])
 | 
					        self.assertTableState(UserCount, ['subgroup'], [['false']])
 | 
				
			||||||
@@ -1003,9 +1003,9 @@ class TestActiveUsersAudit(AnalyticsTestCase):
 | 
				
			|||||||
        user1 = self.create_user()
 | 
					        user1 = self.create_user()
 | 
				
			||||||
        user2 = self.create_user()
 | 
					        user2 = self.create_user()
 | 
				
			||||||
        user3 = self.create_user()
 | 
					        user3 = self.create_user()
 | 
				
			||||||
        self.add_event('user_created', .5, user=user1)
 | 
					        self.add_event(RealmAuditLog.USER_CREATED, .5, user=user1)
 | 
				
			||||||
        self.add_event('user_created', .5, user=user2)
 | 
					        self.add_event(RealmAuditLog.USER_CREATED, .5, user=user2)
 | 
				
			||||||
        self.add_event('user_created', 1, user=user3)
 | 
					        self.add_event(RealmAuditLog.USER_CREATED, 1, user=user3)
 | 
				
			||||||
        self.add_event('user_deactivated', .5, user=user3)
 | 
					        self.add_event('user_deactivated', .5, user=user3)
 | 
				
			||||||
        do_fill_count_stat_at_hour(self.stat, self.TIME_ZERO)
 | 
					        do_fill_count_stat_at_hour(self.stat, self.TIME_ZERO)
 | 
				
			||||||
        self.assertTableState(UserCount, ['user', 'subgroup'],
 | 
					        self.assertTableState(UserCount, ['user', 'subgroup'],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -520,7 +520,7 @@ def do_create_user(email: str, password: Optional[str], realm: Realm, full_name:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    event_time = user_profile.date_joined
 | 
					    event_time = user_profile.date_joined
 | 
				
			||||||
    RealmAuditLog.objects.create(realm=user_profile.realm, modified_user=user_profile,
 | 
					    RealmAuditLog.objects.create(realm=user_profile.realm, modified_user=user_profile,
 | 
				
			||||||
                                 event_type='user_created', event_time=event_time,
 | 
					                                 event_type=RealmAuditLog.USER_CREATED, event_time=event_time,
 | 
				
			||||||
                                 requires_billing_update=activity_change_requires_seat_update(user_profile))
 | 
					                                 requires_billing_update=activity_change_requires_seat_update(user_profile))
 | 
				
			||||||
    do_increment_logging_stat(user_profile.realm, COUNT_STATS['active_users_log:is_bot:day'],
 | 
					    do_increment_logging_stat(user_profile.realm, COUNT_STATS['active_users_log:is_bot:day'],
 | 
				
			||||||
                              user_profile.is_bot, event_time)
 | 
					                              user_profile.is_bot, event_time)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ def bulk_create_users(realm: Realm,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    RealmAuditLog.objects.bulk_create(
 | 
					    RealmAuditLog.objects.bulk_create(
 | 
				
			||||||
        [RealmAuditLog(realm=realm, modified_user=profile_,
 | 
					        [RealmAuditLog(realm=realm, modified_user=profile_,
 | 
				
			||||||
                       event_type='user_created', event_time=profile_.date_joined)
 | 
					                       event_type=RealmAuditLog.USER_CREATED, event_time=profile_.date_joined)
 | 
				
			||||||
         for profile_ in profiles_to_create])
 | 
					         for profile_ in profiles_to_create])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    profiles_by_email = {}  # type: Dict[str, UserProfile]
 | 
					    profiles_by_email = {}  # type: Dict[str, UserProfile]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1961,6 +1961,9 @@ class RealmAuditLog(models.Model):
 | 
				
			|||||||
    CARD_ADDED = 'card_added'
 | 
					    CARD_ADDED = 'card_added'
 | 
				
			||||||
    PLAN_START = 'plan_start'
 | 
					    PLAN_START = 'plan_start'
 | 
				
			||||||
    PLAN_UPDATE_QUANTITY = 'plan_update_quantity'
 | 
					    PLAN_UPDATE_QUANTITY = 'plan_update_quantity'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    USER_CREATED = 'user_created'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    event_type = models.CharField(max_length=40)  # type: str
 | 
					    event_type = models.CharField(max_length=40)  # type: str
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__(self) -> str:
 | 
					    def __str__(self) -> str:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ class TestRealmAuditLog(ZulipTestCase):
 | 
				
			|||||||
            realm=realm, acting_user=None, modified_user=user, modified_stream=None,
 | 
					            realm=realm, acting_user=None, modified_user=user, modified_stream=None,
 | 
				
			||||||
            event_time__gte=now, event_time__lte=now+timedelta(minutes=60))
 | 
					            event_time__gte=now, event_time__lte=now+timedelta(minutes=60))
 | 
				
			||||||
            .order_by('event_time').values_list('event_type', flat=True))
 | 
					            .order_by('event_time').values_list('event_type', flat=True))
 | 
				
			||||||
        self.assertEqual(event_types, ['user_created', 'user_deactivated', 'user_activated',
 | 
					        self.assertEqual(event_types, [RealmAuditLog.USER_CREATED, 'user_deactivated', 'user_activated',
 | 
				
			||||||
                                       'user_deactivated', 'user_reactivated'])
 | 
					                                       'user_deactivated', 'user_reactivated'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_change_password(self) -> None:
 | 
					    def test_change_password(self) -> None:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user