diff --git a/frontend_tests/node_tests/settings_org.js b/frontend_tests/node_tests/settings_org.js index 653926e2b2..531671a3af 100644 --- a/frontend_tests/node_tests/settings_org.js +++ b/frontend_tests/node_tests/settings_org.js @@ -588,6 +588,11 @@ function test_change_allow_subdomains(change_allow_subdomains) { assert.equal(stream_id, 75); return { name: 'some_stream' }; }; + page_params.new_user_bot_configured = false; + settings_org.render_signup_notifications_stream_ui(75); + assert.equal(elem.text(), 'translated: Disabled'); + assert(elem.hasClass('text-warning')); + page_params.new_user_bot_configured = true; settings_org.render_signup_notifications_stream_ui(75); assert.equal(elem.text(), '#some_stream'); assert(!elem.hasClass('text-warning')); diff --git a/static/js/admin.js b/static/js/admin.js index 666826c8ce..a8a90a4e14 100644 --- a/static/js/admin.js +++ b/static/js/admin.js @@ -50,6 +50,7 @@ function _setup_page() { realm_message_retention_days: page_params.realm_message_retention_days, realm_allow_edit_history: page_params.realm_allow_edit_history, language_list: page_params.language_list, + new_user_bot_configured: page_params.new_user_bot_configured, realm_default_language: page_params.realm_default_language, realm_waiting_period_threshold: page_params.realm_waiting_period_threshold, realm_notifications_stream_id: page_params.realm_notifications_stream_id, diff --git a/static/js/settings_org.js b/static/js/settings_org.js index 72a5f7bb7e..10bffef488 100644 --- a/static/js/settings_org.js +++ b/static/js/settings_org.js @@ -198,7 +198,7 @@ exports.render_signup_notifications_stream_ui = function (stream_id) { var name = stream_data.maybe_get_stream_name(stream_id); - if (!name) { + if (!name || !page_params.new_user_bot_configured) { elem.text(i18n.t("Disabled")); elem.addClass("text-warning"); return; diff --git a/static/templates/settings/organization-settings-admin.handlebars b/static/templates/settings/organization-settings-admin.handlebars index 5dd56d6495..e7ae10a50c 100644 --- a/static/templates/settings/organization-settings-admin.handlebars +++ b/static/templates/settings/organization-settings-admin.handlebars @@ -171,7 +171,7 @@ {{t "New user notifications:" }} - @@ -184,8 +184,13 @@ {{#if is_admin }} - {{t "[Disable]" }} + {{#if new_user_bot_configured }} + {{t "[Disable]" }} + {{/if}} {{/if}} + diff --git a/zerver/tests/test_home.py b/zerver/tests/test_home.py index 99e74b91ee..605265e507 100644 --- a/zerver/tests/test_home.py +++ b/zerver/tests/test_home.py @@ -93,6 +93,7 @@ class HomeTest(ZulipTestCase): "narrow_stream", "needs_tutorial", "never_subscribed", + "new_user_bot_configured", "night_mode", "password_min_guesses", "password_min_length", diff --git a/zerver/tests/test_realm.py b/zerver/tests/test_realm.py index 027b216119..1072af958c 100644 --- a/zerver/tests/test_realm.py +++ b/zerver/tests/test_realm.py @@ -216,6 +216,10 @@ class RealmTest(ZulipTestCase): new_signup_notifications_stream_id = 4 req = dict(signup_notifications_stream_id = ujson.dumps(new_signup_notifications_stream_id)) + with self.settings(NEW_USER_BOT=None): + result = self.client_patch("/json/realm", req) + self.assert_json_error(result, 'NEW_USER_BOT must configured first.') + result = self.client_patch('/json/realm', req) self.assert_json_success(result) realm = get_realm('zulip') diff --git a/zerver/views/home.py b/zerver/views/home.py index abb5956ea0..72be6d62ce 100644 --- a/zerver/views/home.py +++ b/zerver/views/home.py @@ -173,6 +173,7 @@ def home_real(request: HttpRequest) -> HttpResponse: # These end up in a global JavaScript Object named 'page_params'. page_params = dict( # Server settings. + new_user_bot_configured = settings.NEW_USER_BOT is not None, development_environment = settings.DEVELOPMENT, debug_mode = settings.DEBUG, test_suite = settings.TEST_SUITE, diff --git a/zerver/views/realm.py b/zerver/views/realm.py index dcaef461c1..f203a5e902 100644 --- a/zerver/views/realm.py +++ b/zerver/views/realm.py @@ -2,7 +2,7 @@ from typing import Any, Dict, Optional, List, Text from django.http import HttpRequest, HttpResponse from django.utils.translation import ugettext as _ - +from django.conf import settings from zerver.decorator import require_realm_admin, to_non_negative_int, to_not_negative_int_or_none from zerver.lib.actions import ( do_set_realm_message_editing, @@ -59,6 +59,8 @@ def update_realm( return json_error(_("Realm name is too long.")) if authentication_methods is not None and True not in list(authentication_methods.values()): return json_error(_("At least one authentication method must be enabled.")) + if signup_notifications_stream_id is not None and settings.NEW_USER_BOT is None: + return json_error(_("NEW_USER_BOT must configured first.")) # The user of `locals()` here is a bit of a code smell, but it's # restricted to the elements present in realm.property_types.