support: Add support for activating and deactivating realm.

This commit is contained in:
Vishnu Ks
2019-04-19 13:19:49 +00:00
committed by Tim Abbott
parent 9c1e409ea3
commit f6203f068b
4 changed files with 68 additions and 18 deletions

View File

@@ -339,13 +339,17 @@ class TestSupportEndpoint(ZulipTestCase):
self.assert_in_success_response(['<input type="hidden" name="realm_id" value="1"', 'Zulip Dev</h3>',
'<option value="1" selected>Self Hosted</option>',
'<option value="2" >Limited</option>',
'input type="number" name="discount" value="None"'], result)
'input type="number" name="discount" value="None"',
'<option value="active" selected>Active</option>',
'<option value="deactive" >Deactive</option>'], result)
def check_lear_realm_result(result: HttpResponse) -> None:
self.assert_in_success_response(['<input type="hidden" name="realm_id" value="3"', 'Lear &amp; Co.</h3>',
'<option value="1" selected>Self Hosted</option>',
'<option value="2" >Limited</option>',
'input type="number" name="discount" value="None"'], result)
'input type="number" name="discount" value="None"',
'<option value="active" selected>Active</option>',
'<option value="deactive" >Deactive</option>'], result)
cordelia_email = self.example_email("cordelia")
self.login(cordelia_email)
@@ -416,6 +420,27 @@ class TestSupportEndpoint(ZulipTestCase):
m.assert_called_once_with(get_realm("lear"), 25)
self.assert_in_success_response(["Discount of Lear &amp; Co. changed to 25 from None"], result)
def test_activate_or_deactivate_realm(self) -> None:
cordelia_email = self.example_email("cordelia")
self.login(cordelia_email)
result = self.client_post("/activity/support", {"realm_id": "3", "status": "deactive"})
self.assertEqual(result.status_code, 302)
self.assertEqual(result["Location"], "/login/")
iago_email = self.example_email("iago")
self.login(iago_email)
with mock.patch("analytics.views.do_deactivate_realm") as m:
result = self.client_post("/activity/support", {"realm_id": "3", "status": "deactive"})
m.assert_called_once_with(get_realm("lear"))
self.assert_in_success_response(["Lear &amp; Co. deactivated"], result)
with mock.patch("analytics.views.do_reactivate_realm") as m:
result = self.client_post("/activity/support", {"realm_id": "3", "status": "active"})
m.assert_called_once_with(get_realm("lear"))
self.assert_in_success_response(["Lear &amp; Co. reactivated."], result)
class TestGetChartDataHelpers(ZulipTestCase):
# last_successful_fill is in analytics/models.py, but get_chart_data is
# the only function that uses it at the moment

View File

@@ -39,7 +39,8 @@ from zerver.lib.timestamp import convert_to_UTC, timestamp_to_datetime
from zerver.lib.realm_icon import realm_icon_url
from zerver.views.invite import get_invitee_emails_set
from zerver.lib.subdomains import get_subdomain_from_hostname
from zerver.lib.actions import do_change_plan_type
from zerver.lib.actions import do_change_plan_type, do_deactivate_realm, \
do_reactivate_realm
if settings.BILLING_ENABLED:
from corporate.lib.stripe import attach_discount_to_realm, get_discount_for_realm
@@ -1040,7 +1041,7 @@ def support(request: HttpRequest) -> HttpResponse:
do_change_plan_type(realm, new_plan_type)
msg = "Plan type of {} changed to {} from {} ".format(realm.name, get_plan_name(new_plan_type),
get_plan_name(current_plan_type))
context["plan_type_msg"] = msg
context["message"] = msg
new_discount = request.POST.get("discount", None)
if new_discount is not None:
@@ -1048,7 +1049,16 @@ def support(request: HttpRequest) -> HttpResponse:
current_discount = get_discount_for_realm(realm)
attach_discount_to_realm(realm, new_discount)
msg = "Discount of {} changed to {} from {} ".format(realm.name, new_discount, current_discount)
context["discount_msg"] = msg
context["message"] = msg
status = request.POST.get("status", None)
if status is not None:
if status == "active":
do_reactivate_realm(realm)
context["message"] = "{} reactivated.".format(realm.name)
elif status == "deactive":
do_deactivate_realm(realm)
context["message"] = "{} deactivated.".format(realm.name)
query = request.GET.get("q", None)
if query:

View File

@@ -66,6 +66,11 @@ tr.admin td:first-child {
}
.support-discount-form {
position: relative;
top: -50px;
}
.support-plan-type-form {
position: relative;
top: -25px;
}

View File

@@ -22,18 +22,10 @@
</center>
</form>
{% if plan_type_msg %}
{% if message %}
<div class="alert alert-success">
<center>
{{ plan_type_msg }}
</center>
</div>
{% endif %}
{% if discount_msg %}
<div class="alert alert-success">
<center>
{{ discount_msg }}
{{ message }}
</center>
</div>
{% endif %}
@@ -53,9 +45,18 @@
<h3><img src="{{ user.realm.realm_icon_url }}" class="support-realm-icon"> {{ user.realm.name }}</h3>
<b>URL</b>: <a target="_blank" href="{{ user.realm.uri }}">{{ user.realm.uri }}</a><br>
<b>Date created</b>: {{ user.realm.date_created|timesince }} ago<br>
<b>Is active</b>: {{ not user.realm.deactivated }}<br>
<b>Admins</b>: {% for admin in user.realm.admins %}{{ admin.email }} {% endfor %}<br>
<form method="POST">
<b>Status</b>:<br>
{{ csrf_input }}
<input type="hidden" name="realm_id" value="{{ user.realm.id }}" />
<select name="status">
<option value="active" {% if not user.realm.deactivated %}selected{% endif %}>Active</option>
<option value="deactive" {% if user.realm.deactivated %}selected{% endif %}>Deactive</option>
</select>
<button type="submit" class="btn btn-small support-submit-button">Update</button>
</form>
<form method="POST" class="support-plan-type-form">
{{ csrf_input }}
<input type="hidden" name="realm_id" value="{{ user.realm.id }}" />
<b>Plan type</b>:<br>
@@ -85,10 +86,19 @@
<h3><img src="{{ realm.realm_icon_url }}" class="support-realm-icon"> {{ realm.name }}</h3>
<b>URL</b>: <a target="_blank" href="{{ realm.uri }}">{{ realm.uri }}</a><br>
<b>Date created</b>: {{ realm.date_created|timesince }} ago<br>
<b>Is active</b>: {{ not realm.deactivated }}<br>
<b>Admins</b>: {% for admin in realm.admins %}{{ admin.email }} {% endfor %}<br>
<b>Plan type</b>:
<form method="POST">
<b>Status</b>:<br>
{{ csrf_input }}
<input type="hidden" name="realm_id" value="{{ realm.id }}" />
<select name="status">
<option value="active" {% if not realm.deactivated %}selected{% endif %}>Active</option>
<option value="deactive" {% if realm.deactivated %}selected{% endif %}>Deactive</option>
</select>
<button type="submit" class="btn btn-small support-submit-button">Update</button>
</form>
<form method="POST" class="support-plan-type-form">
<b>Plan type</b>:<br>
{{ csrf_input }}
<input type="hidden" name="realm_id" value="{{ realm.id }}" />
<select name="plan_type">