From c70a3ffb0a3d3e1bed7513c2a06ab58d24eb0052 Mon Sep 17 00:00:00 2001 From: Prakhar Pratyush Date: Wed, 23 Oct 2024 12:59:43 +0530 Subject: [PATCH] populate_db: Mark onboarding steps as seen for existing users. This commit updates populate_db to mark all onboarding steps as seen for existing users to avoid unnecessary popups during development. Developers should create a new user in development environment to test the onboarding steps. --- web/e2e-tests/stream_create.test.ts | 4 ---- zerver/tests/test_events.py | 3 +++ zerver/tests/test_import_export.py | 1 + zerver/tests/test_upload.py | 8 +++++++- zerver/tests/test_upload_s3.py | 8 +++++++- zilencer/management/commands/populate_db.py | 13 +++++++------ 6 files changed, 25 insertions(+), 12 deletions(-) diff --git a/web/e2e-tests/stream_create.test.ts b/web/e2e-tests/stream_create.test.ts index c426ed5a4b..bdb2975ac3 100644 --- a/web/e2e-tests/stream_create.test.ts +++ b/web/e2e-tests/stream_create.test.ts @@ -92,10 +92,6 @@ async function create_stream(page: Page): Promise { await page.click("#stream_creation_go_to_subscribers"); await page.type("#create_stream_name", "Test Stream 2"); await page.click("form#stream_creation_form .finalize_create_stream"); - // an explanatory modal is shown for the first stream created - await common.wait_for_micromodal_to_open(page); - await page.click(".dialog_submit_button"); - await common.wait_for_micromodal_to_close(page); // We redirect to the channel message view. await page.waitForSelector("#subscription_overlay", {hidden: true}); diff --git a/zerver/tests/test_events.py b/zerver/tests/test_events.py index baaae159ae..9b1b7c0a66 100644 --- a/zerver/tests/test_events.py +++ b/zerver/tests/test_events.py @@ -3388,6 +3388,9 @@ class NormalActionsTest(BaseAction): check_realm_deactivated("events[0]", events[0]) def test_do_mark_onboarding_step_as_read(self) -> None: + self.user_profile = do_create_user( + "user@zulip.com", "password", self.user_profile.realm, "user", acting_user=None + ) with self.verify_action() as events: do_mark_onboarding_step_as_read(self.user_profile, "intro_inbox_view_modal") check_onboarding_steps("events[0]", events[0]) diff --git a/zerver/tests/test_import_export.py b/zerver/tests/test_import_export.py index ecac8398b6..8475fdb46b 100644 --- a/zerver/tests/test_import_export.py +++ b/zerver/tests/test_import_export.py @@ -977,6 +977,7 @@ class RealmImportExportTest(ExportFile): self.assertEqual(reaction.emoji_code, str(realm_emoji.id)) # data to test import of onboaring step + OnboardingStep.objects.filter(user=sample_user).delete() OnboardingStep.objects.create( user=sample_user, onboarding_step="intro_inbox_view_modal", diff --git a/zerver/tests/test_upload.py b/zerver/tests/test_upload.py index dc8f348d9e..6da2a59ac8 100644 --- a/zerver/tests/test_upload.py +++ b/zerver/tests/test_upload.py @@ -48,7 +48,7 @@ from zerver.lib.upload import sanitize_name, upload_message_attachment from zerver.lib.upload.base import ZulipUploadBackend from zerver.lib.upload.local import LocalUploadBackend from zerver.lib.upload.s3 import S3UploadBackend -from zerver.models import Attachment, Message, Realm, RealmDomain, UserProfile +from zerver.models import Attachment, Message, OnboardingStep, Realm, RealmDomain, UserProfile from zerver.models.realms import get_realm from zerver.models.users import get_system_bot, get_user_by_delivery_email @@ -1454,6 +1454,12 @@ class AvatarTest(UploadSerializeMixin, ZulipTestCase): "user@zulip.com", "password", get_realm("zulip"), "user", acting_user=None ) + # 'visibility_policy_banner' is already marked as read for new users. + # Delete that row to avoid integrity error in copy_default_settings. + OnboardingStep.objects.filter( + user=target_user_profile, onboarding_step="visibility_policy_banner" + ).delete() + copy_default_settings(source_user_profile, target_user_profile) source_path_id = avatar_disk_path(source_user_profile) diff --git a/zerver/tests/test_upload_s3.py b/zerver/tests/test_upload_s3.py index ebc561ef93..848d226a39 100644 --- a/zerver/tests/test_upload_s3.py +++ b/zerver/tests/test_upload_s3.py @@ -44,7 +44,7 @@ from zerver.lib.upload import ( ) from zerver.lib.upload.base import StreamingSourceWithSize from zerver.lib.upload.s3 import S3UploadBackend -from zerver.models import Attachment, RealmEmoji, UserProfile +from zerver.models import Attachment, OnboardingStep, RealmEmoji, UserProfile from zerver.models.realms import get_realm from zerver.models.users import get_system_bot @@ -361,6 +361,12 @@ class S3Test(ZulipTestCase): "user@zulip.com", "password", get_realm("zulip"), "user", acting_user=None ) + # 'visibility_policy_banner' is already marked as read for new users. + # Delete that row to avoid integrity error in copy_default_settings. + OnboardingStep.objects.filter( + user=target_user_profile, onboarding_step="visibility_policy_banner" + ).delete() + copy_default_settings(source_user_profile, target_user_profile) source_path_id = user_avatar_path(source_user_profile) diff --git a/zilencer/management/commands/populate_db.py b/zilencer/management/commands/populate_db.py index abcfbbec1f..6b932fd228 100644 --- a/zilencer/management/commands/populate_db.py +++ b/zilencer/management/commands/populate_db.py @@ -39,6 +39,7 @@ from zerver.lib.bulk_create import bulk_create_streams from zerver.lib.generate_test_data import create_test_data, generate_topics from zerver.lib.management import ZulipBaseCommand from zerver.lib.onboarding import create_if_missing_realm_internal_bots +from zerver.lib.onboarding_steps import ALL_ONBOARDING_STEPS from zerver.lib.push_notifications import logger as push_notifications_logger from zerver.lib.remote_server import get_realms_info_for_push_bouncer from zerver.lib.server_initialization import create_internal_realm, create_users @@ -932,16 +933,16 @@ class Command(ZulipBaseCommand): ) user_profiles_ids = [] - onboarding_steps = [] + onboarding_steps: list[OnboardingStep] = [] for user_profile in user_profiles: user_profiles_ids.append(user_profile.id) - onboarding_steps.append( - OnboardingStep( - user=user_profile, onboarding_step="narrow_to_dm_with_welcome_bot_new_user" - ) + onboarding_steps.extend( + OnboardingStep(user=user_profile, onboarding_step=onboarding_step.name) + for onboarding_step in ALL_ONBOARDING_STEPS ) - # Existing users shouldn't narrow to DM with welcome bot on first login. + # Mark onboarding steps as seen for existing users to avoid + # unnecessary popups during development. OnboardingStep.objects.bulk_create(onboarding_steps) # Create several initial direct message groups