marketing_emails: Ask for user's consent at sign-up.

This commit is contained in:
Eeshan Garg
2021-08-16 16:33:33 -02:30
committed by Tim Abbott
parent 56f7282096
commit c9861b3c74
8 changed files with 108 additions and 0 deletions

View File

@@ -920,6 +920,11 @@ button#register_auth_button_gitlab {
&.inline-block {
margin-top: -1px;
}
&.marketing_emails_checkbox {
text-indent: -24px;
margin-left: 24px;
}
}
&.radio {

View File

@@ -249,6 +249,14 @@ Form is validated both client-side using jquery-validate (see signup.js) and ser
{% endif %}
</div>
{% endif %}
<div class="input-group">
<label for="id_enable_marketing_emails" class="inline-block checkbox marketing_emails_checkbox">
<input id="id_enable_marketing_emails" type="checkbox" name="enable_marketing_emails"
checked="checked" />
<span></span>
{% trans %}Send me occasional marketing emails about Zulip (a few times a year).{% endtrans %}
</label>
</div>
<div class="register-button-box">
<button class="register-button" type="submit">
<span>{{ _('Sign up') }}</span>

View File

@@ -116,6 +116,7 @@ class RegistrationForm(forms.Form):
realm_subdomain = forms.CharField(max_length=Realm.MAX_REALM_SUBDOMAIN_LENGTH, required=False)
realm_type = forms.IntegerField(required=False)
is_demo_organization = forms.BooleanField(required=False)
enable_marketing_emails = forms.BooleanField(required=False)
def __init__(self, *args: Any, **kwargs: Any) -> None:
# Since the superclass doesn't except random extra kwargs, we

View File

@@ -648,6 +648,7 @@ def do_create_user(
realm_creation: bool = False,
*,
acting_user: Optional[UserProfile],
enable_marketing_emails: bool = True,
) -> UserProfile:
user_profile = create_user(
@@ -665,6 +666,7 @@ def do_create_user(
default_events_register_stream=default_events_register_stream,
default_all_public_streams=default_all_public_streams,
source_profile=source_profile,
enable_marketing_emails=enable_marketing_emails,
)
event_time = user_profile.date_joined

View File

@@ -128,6 +128,7 @@ def create_user(
default_all_public_streams: Optional[bool] = None,
source_profile: Optional[UserProfile] = None,
force_id: Optional[int] = None,
enable_marketing_emails: bool = True,
) -> UserProfile:
user_profile = create_user_profile(
realm,
@@ -146,6 +147,7 @@ def create_user(
user_profile.timezone = timezone
user_profile.default_sending_stream = default_sending_stream
user_profile.default_events_register_stream = default_events_register_stream
user_profile.enable_marketing_emails = enable_marketing_emails
if role is not None:
user_profile.role = role
# Allow the ORM default to be used if not provided

View File

@@ -627,6 +627,7 @@ Output:
source_realm_id: str = "",
key: Optional[str] = None,
realm_type: Optional[int] = Realm.ORG_TYPES["business"]["id"],
enable_marketing_emails: Optional[bool] = True,
**kwargs: Any,
) -> HttpResponse:
"""
@@ -650,6 +651,7 @@ Output:
"from_confirmation": from_confirmation,
"default_stream_group": default_stream_groups,
"source_realm_id": source_realm_id,
"enable_marketing_emails": enable_marketing_emails,
}
if password is not None:
payload["password"] = password

View File

@@ -3074,6 +3074,92 @@ class RealmCreationTest(ZulipTestCase):
self.assertEqual(realm.name, realm_name)
self.assertEqual(realm.subdomain, string_id)
@override_settings(OPEN_REALM_CREATION=True)
def test_create_realm_with_marketing_emails_enabled(self) -> None:
password = "test"
string_id = "zuliptest"
email = "user1@test.com"
realm_name = "Test"
# Make sure the realm does not exist
with self.assertRaises(Realm.DoesNotExist):
get_realm(string_id)
# Create new realm with the email
result = self.client_post("/new/", {"email": email})
self.assertEqual(result.status_code, 302)
self.assertTrue(result["Location"].endswith(f"/accounts/new/send_confirm/{email}"))
result = self.client_get(result["Location"])
self.assert_in_response("Check your email so we can get started.", result)
# Visit the confirmation link.
confirmation_url = self.get_confirmation_url_from_outbox(email)
result = self.client_get(confirmation_url)
self.assertEqual(result.status_code, 200)
result = self.submit_reg_form_for_user(
email,
password,
realm_subdomain=string_id,
realm_name=realm_name,
enable_marketing_emails=True,
)
self.assertEqual(result.status_code, 302)
result = self.client_get(result.url, subdomain=string_id)
self.assertEqual(result.status_code, 302)
self.assertEqual(result.url, "http://zuliptest.testserver")
# Make sure the realm is created
realm = get_realm(string_id)
self.assertEqual(realm.string_id, string_id)
user = get_user(email, realm)
self.assertEqual(user.realm, realm)
self.assertTrue(user.enable_marketing_emails)
@override_settings(OPEN_REALM_CREATION=True)
def test_create_realm_with_marketing_emails_disabled(self) -> None:
password = "test"
string_id = "zuliptest"
email = "user1@test.com"
realm_name = "Test"
# Make sure the realm does not exist
with self.assertRaises(Realm.DoesNotExist):
get_realm(string_id)
# Create new realm with the email
result = self.client_post("/new/", {"email": email})
self.assertEqual(result.status_code, 302)
self.assertTrue(result["Location"].endswith(f"/accounts/new/send_confirm/{email}"))
result = self.client_get(result["Location"])
self.assert_in_response("Check your email so we can get started.", result)
# Visit the confirmation link.
confirmation_url = self.get_confirmation_url_from_outbox(email)
result = self.client_get(confirmation_url)
self.assertEqual(result.status_code, 200)
result = self.submit_reg_form_for_user(
email,
password,
realm_subdomain=string_id,
realm_name=realm_name,
enable_marketing_emails=False,
)
self.assertEqual(result.status_code, 302)
result = self.client_get(result.url, subdomain=string_id)
self.assertEqual(result.status_code, 302)
self.assertEqual(result.url, "http://zuliptest.testserver")
# Make sure the realm is created
realm = get_realm(string_id)
self.assertEqual(realm.string_id, string_id)
user = get_user(email, realm)
self.assertEqual(user.realm, realm)
self.assertFalse(user.enable_marketing_emails)
@override_settings(OPEN_REALM_CREATION=True, FREE_TRIAL_DAYS=30)
def test_create_realm_during_free_trial(self) -> None:
password = "test"

View File

@@ -332,6 +332,7 @@ def accounts_register(
assert realm is not None
full_name = form.cleaned_data["full_name"]
enable_marketing_emails = form.cleaned_data["enable_marketing_emails"]
default_stream_group_names = request.POST.getlist("default_stream_group")
default_stream_groups = lookup_default_stream_groups(default_stream_group_names, realm)
@@ -437,6 +438,7 @@ def accounts_register(
source_profile=source_profile,
realm_creation=realm_creation,
acting_user=None,
enable_marketing_emails=enable_marketing_emails,
)
if realm_creation: