zulip/zerver/tests
The Dance a028a6b9fd custom_emails: Prevent duplicate emails from send_custom_email command.
This adds infrastructure to prevent duplicate custom emails from being
sent to users when the management command is run multiple times
with identical email template content.
The implementation uses RealmAuditLog tracking with a new
CUSTOM_EMAIL_SENT event type (810) that stores a hash of the email
template content.

Fixes: #19529.
2025-11-02 11:17:09 -08:00
..
fixtures markdown: Render inline audio files using the ![title](url) syntax. 2025-07-11 13:11:56 -07:00
images thumbnail: Show the first few frames of large animated images. 2025-01-15 09:56:19 -08:00
__init__.py
test_alert_words.py
test_attachments.py mypy: Enable new error explicit-override. 2023-10-12 12:28:41 -07:00
test_audit_log.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_auth_backends.py requirements: Upgrade Python requirements. 2025-09-30 16:47:54 -07:00
test_bots.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_cache.py cache: Do not fail the request on cache-set failures. 2025-03-05 09:48:58 -08:00
test_channel_access.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_channel_creation.py test_channel_creation: Fix misuse of test helper APIs. 2025-10-03 15:49:20 -07:00
test_channel_fetch.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_channel_folders.py channel-folders: Send event when reordering channel folders. 2025-08-12 11:17:17 -07:00
test_channel_permissions.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_compatibility.py python: Reformat with Ruff formatter. 2024-02-29 17:07:16 -08:00
test_create_video_call.py video-calls: Add Zoom Serverto Server OAuth integration. 2025-02-13 16:35:43 -08:00
test_custom_profile_data.py user: Remove is_billing_admin user property. 2025-03-10 09:36:30 -07:00
test_decorators.py zephyr: Remove Zephyr mirroring support. 2025-09-16 11:18:18 -07:00
test_default_channels.py tests: Move test for updating default stream to test_default_channels. 2025-06-11 15:41:50 -07:00
test_delete_unclaimed_attachments.py do_delete_old_unclaimed_attachments: Cap deletions at batch size. 2024-08-28 13:57:57 -07:00
test_digest.py email: Apply message content visibility settings to digest too. 2025-04-15 16:24:59 -07:00
test_docs.py docs: Remove trailing slash from canonical URL for non-root docs. 2025-10-22 13:48:23 -04:00
test_drafts.py ruff: Fix UP007 Use X | Y for type annotations. 2024-07-13 22:28:22 -07:00
test_e2ee_push_notifications.py push_notification: Prepare payload only if registered device exists. 2025-10-28 13:29:02 -07:00
test_email_change.py validate_email_not_already_in_realm: Add kwarg for mirror dummies. 2025-07-07 17:15:08 -07:00
test_email_log.py send_email: Skip the ScheduledEmail table for 0-delay emails. 2025-03-04 16:09:25 -08:00
test_email_mirror.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
test_email_notifications.py send_email: Skip the ScheduledEmail table for 0-delay emails. 2025-03-04 16:09:25 -08:00
test_embedded_bot_system.py ruff: Fix SIM117 Use a single with statement with multiple contexts. 2024-07-14 13:48:32 -07:00
test_event_queue.py push_notifications: Skip enqueuing notif for users without push devices. 2025-09-17 12:32:49 -07:00
test_event_system.py register-queue: Add push_devices in response. 2025-07-14 14:52:38 -07:00
test_events.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_example.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_external.py zephyr: Remove Zephyr mirroring support. 2025-09-16 11:18:18 -07:00
test_github.py apps: Provide arm64 app build by default for macOS. 2025-03-28 16:45:07 -07:00
test_handle_push_notification.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
test_health.py ruff: Bump target-version from py38 to py310. 2024-07-13 22:28:22 -07:00
test_home.py events: Remove realm_is_zephyr_mirror_realm from API. 2025-09-16 11:23:10 -07:00
test_i18n.py i18n: Update translation data from Transifex. 2024-11-18 16:12:31 -08:00
test_import_export.py export: Move all queries, when possible, to iterators. 2025-10-01 11:21:34 -07:00
test_integrations_dev_panel.py ruff: Bump target-version from py38 to py310. 2024-07-13 22:28:22 -07:00
test_integrations.py test_integrations: Extend tests to cover fixtureless integrations. 2025-10-20 10:24:49 -07:00
test_internet.py
test_invite.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_legacy_subject.py
test_link_embed.py embeds: Propagate group membership before updating UserMessage flags. 2025-08-13 10:38:40 -07:00
test_management_commands.py custom_emails: Prevent duplicate emails from send_custom_email command. 2025-11-02 11:17:09 -08:00
test_markdown_thumbnail.py thumbnail: Add a tool to re-thumbnail spinners, or process old images. 2025-04-23 17:41:51 -07:00
test_markdown.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
test_mattermost_importer.py test_mattermost_importer: Condition html2text crash on Python version. 2025-08-13 14:11:05 -07:00
test_message_delete.py push_notifications: Clear push notifications on message deletion. 2025-10-31 16:05:21 -07:00
test_message_dict.py test_message_dict: Add test for checking "subject" field value. 2025-06-19 10:44:37 -07:00
test_message_edit_notifications.py push_notifications: Skip enqueuing notif for users without push devices. 2025-09-17 12:32:49 -07:00
test_message_edit.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
test_message_fetch.py zephyr: Remove Zephyr mirroring support. 2025-09-16 11:18:18 -07:00
test_message_flags.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_message_move_stream.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
test_message_move_topic.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
test_message_notification_emails.py timestamp: Use localized formatting in format_datetime_to_string. 2025-10-03 10:43:16 -07:00
test_message_report.py streams: Handle empty topic only streams being used for announcements. 2025-07-22 16:59:47 -07:00
test_message_send.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_message_summary.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_message_topics.py zephyr: Remove Zephyr mirroring support. 2025-09-16 11:18:18 -07:00
test_messages.py direct_message_group: Add new group_size field. 2024-08-23 11:09:41 -07:00
test_middleware.py help: Do not treat Help Center as a proper noun. 2025-09-17 13:20:25 -07:00
test_migration_status.py migration_status: Refactor parse_migration_status. 2025-03-20 10:57:54 -07:00
test_migrations.py CVE-2024-27286: Delete dangling UserMessage rows. 2024-03-19 18:22:24 -04:00
test_mirror_users.py zephyr: Remove Zephyr mirroring support. 2025-09-16 11:18:18 -07:00
test_muted_users.py variables: Correct instances of misspelled 'message'. 2025-04-16 13:17:19 -07:00
test_navigation_views.py navigation_views: Add backend for navigation views in left sidebar. 2025-05-23 16:25:08 -07:00
test_new_users.py timestamp: Use localized formatting in format_datetime_to_string. 2025-10-03 10:43:16 -07:00
test_notification_data.py push_notifications: Skip enqueuing notif for users without push devices. 2025-09-17 12:32:49 -07:00
test_onboarding_steps.py onboarding_steps: Add 'navigation_tour_video' for new users. 2025-03-13 14:38:16 -07:00
test_onboarding.py
test_openapi.py api_docs: Update get-file-temporary-url endpoint and add to sidebar. 2025-08-29 10:21:42 -07:00
test_outgoing_http.py requirements: Upgrade Python requirements. 2024-09-24 19:27:21 -07:00
test_outgoing_webhook_interfaces.py avatar: Add option to disable gravatars per realm. 2025-01-30 18:46:02 -08:00
test_outgoing_webhook_system.py url_encoding: Add support for with message links. 2025-06-30 11:19:00 -07:00
test_populate_db.py stream: Add subscriber_count field. 2025-05-13 17:36:53 -07:00
test_presence.py zephyr: Remove Zephyr mirroring support. 2025-09-16 11:18:18 -07:00
test_push_notifications.py register_remote_server: Check for NS records, now just A/AAAA. 2025-10-06 22:20:02 -07:00
test_push_registration.py push_notifications: Remove vestiges of base64 storage of tokens. 2025-07-16 16:59:58 -07:00
test_queue_worker.py email-mirror: Add a standalone server that processes incoming email. 2025-05-19 16:39:44 -07:00
test_queue.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
test_rate_limiter.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
test_reactions.py message_cache: Skip pickling JSON-encoded string in cache. 2025-08-27 09:22:56 -07:00
test_read_receipts.py refactor: Rename huddle to direct_message_group in non API. 2024-07-04 07:56:31 -07:00
test_realm_domains.py models: Extract zerver.models.realms. 2023-12-16 22:08:44 -08:00
test_realm_emoji.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_realm_export.py export: Add guardrails against generating a dysfunctional export via UI. 2025-03-28 17:44:58 -07:00
test_realm_linkifiers.py audit-log: Move realm event types to AuditLogEventType enum. 2024-09-09 11:50:13 -07:00
test_realm_playgrounds.py code_playground: Add custom playground options in the default_options list. 2025-02-16 17:22:47 -08:00
test_realm.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_recipient_parsing.py scheduled_messages: Migrate to typed_endpoint. 2024-08-20 10:03:22 -07:00
test_redis_utils.py mypy: Enable new error explicit-override. 2023-10-12 12:28:41 -07:00
test_reminders.py reminders: Stop interpolating user-provided values in format string. 2025-08-27 12:07:21 -07:00
test_report.py
test_retention.py push_notifications: Clear push notifications on message deletion. 2025-10-31 16:05:21 -07:00
test_rocketchat_importer.py import: Send channel Welcome Bot messages to imported organizations. 2025-07-21 11:08:25 -07:00
test_saved_snippets.py api: Update saved snippets edit endpoint. 2025-03-17 11:03:25 -07:00
test_scheduled_messages.py scheduled_messages: Set read_by_sender for self-DMs using DM group. 2025-07-21 22:46:38 -07:00
test_scim.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_send_email.py ruff: Fix SIM117 Use a single with statement with multiple contexts. 2024-07-14 13:48:32 -07:00
test_server_settings.py
test_service_bot_system.py worker: Flag messages processed by embedded bot. 2025-01-24 17:56:44 -08:00
test_sessions.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
test_settings.py emoji: Remove setting for deprecated Google blobs emoji set. 2025-10-01 13:35:06 -07:00
test_signup.py test-signup: Confirm all invalid email field error messages. 2025-10-14 12:19:07 -07:00
test_slack_importer.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
test_slack_message_conversion.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
test_soft_deactivation.py audit-log: Move user event types to AuditLogEventType enum. 2024-09-09 11:50:13 -07:00
test_subdomains.py ruff: Fix UP035 Import from collections.abc, typing instead. 2024-07-13 22:28:22 -07:00
test_submessage.py queue: Rename queue_json_publish to queue_json_publish_rollback_unsafe. 2024-12-06 09:23:02 -08:00
test_subs.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_subscription_settings.py tests: Move subscription properties test to new file. 2025-06-11 15:41:50 -07:00
test_templates.py tabbed-instructions: Delete activate_correct_tab. 2025-09-04 09:37:34 -07:00
test_thumbnail.py upload: Rename attachment_vips_source, as it's not just for vips_source. 2025-07-29 10:01:40 -07:00
test_timeout.py timeout: Rename to unsafe_timeout. 2024-04-18 11:50:38 -07:00
test_timestamp.py timestamp: Use localized formatting in format_datetime_to_string. 2025-10-03 10:43:16 -07:00
test_timezone.py test_timezone: Ignore legacy MET, MEST aliases. 2025-08-13 14:11:05 -07:00
test_topic_link_util.py topic_link_util: Support message links in backend. 2025-06-18 13:03:56 -07:00
test_tornado.py test_tornado: Add nocoverage for task cleanup. 2025-02-14 17:04:51 -08:00
test_transfer.py transfer: Upload thumbnails for image files. 2025-08-06 15:46:07 -07:00
test_tusd.py upload: Attempt to guess character set text/* which are served inline. 2025-07-24 22:40:12 -07:00
test_tutorial.py help: Do not treat Help Center as a proper noun. 2025-09-17 13:20:25 -07:00
test_typed_endpoint_validators.py zerver: Migrate some files to typed_endpoint. 2024-07-20 15:46:48 -07:00
test_typed_endpoint.py ruff: Enable B008 function-call-in-default-argument. 2024-11-10 22:43:55 -08:00
test_typing.py api: Rename edit typing endpoint to /messages/{message_id}/typing. 2025-02-28 13:20:46 -08:00
test_upload_local.py upload: Rename attachment_vips_source, as it's not just for vips_source. 2025-07-29 10:01:40 -07:00
test_upload_s3.py upload: Serve 0-byte files locally, not from S3. 2025-08-13 14:07:21 -07:00
test_upload.py ruff: Fix RUF059 Unpacked variable is never used. 2025-09-30 16:47:54 -07:00
test_url_decoding.py url_decoding: Add parse_narrow_url. 2025-02-24 15:37:40 -08:00
test_url_encoding.py url_encoding: Refactor a encode_user_full_name_and_id. 2025-07-03 14:40:49 -07:00
test_urls.py test_urls: Skip api_docs/unmerged.d/ while testing api doc pages. 2025-08-11 14:37:31 -07:00
test_user_groups.py groups: Use realm_for_sharding for limiting NamedUserGroup queries. 2025-09-23 12:15:53 -07:00
test_user_status.py api: Add administrator endpoint for updating user status. 2025-07-18 17:37:26 -07:00
test_user_topics.py tests: Pass update_fields to all stream.save(). 2025-04-15 10:28:18 -07:00
test_users.py push_notifications: Skip enqueuing notif for users without push devices. 2025-09-17 12:32:49 -07:00
test_validators.py validator: Disable WildValue equality comparison. 2025-06-25 11:49:02 -07:00
test_webhooks_common.py integrations: Prevent logging of MissingHTTPEventHeaderError. 2025-06-06 18:06:06 -07:00
test_welcome_bot_custom_message.py welcome-bot: Only send message with custom text when testing. 2025-08-12 00:12:52 -07:00
test_widgets.py ruff: Fix UP006 Use list instead of List for type annotation. 2024-07-13 22:28:22 -07:00
test_zcommand.py zcommand: Rename night->dark and day->light in the color scheme backend. 2024-06-30 22:45:26 -07:00
test_zilencer_analytics.py test_push_notifications: Split AnalyticsBouncerTest to a separate file. 2025-04-17 10:55:05 -07:00
test_zulip_update_announcements.py send_zulip_update_announcements: Log updates in the post-deploy hook. 2025-08-06 09:52:45 -07:00