zilencer: Implement do_reactivate_remote_server utility function.

The inverse of do_deactivate_remote_server. It's just flipping the
.deactivated flag, but we also should have an AuditLog for these events.
This commit is contained in:
Mateusz Mandera 2024-02-18 01:41:37 +01:00 committed by Tim Abbott
parent cc8a4636ba
commit be03dabf76
3 changed files with 42 additions and 1 deletions

View File

@ -4699,6 +4699,28 @@ def do_change_remote_server_plan_type(remote_server: RemoteZulipServer, plan_typ
)
@transaction.atomic
def do_reactivate_remote_server(remote_server: RemoteZulipServer) -> None:
"""
Utility function for reactivating deactivated registrations.
"""
if not remote_server.deactivated:
billing_logger.warning(
"Cannot reactivate remote server with ID %d, server is already active.",
remote_server.id,
)
return
remote_server.deactivated = False
remote_server.save(update_fields=["deactivated"])
RemoteZulipServerAuditLog.objects.create(
event_type=RealmAuditLog.REMOTE_SERVER_REACTIVATED,
server=remote_server,
event_time=timezone_now(),
)
@transaction.atomic
def do_deactivate_remote_server(
remote_server: RemoteZulipServer, billing_session: RemoteServerBillingSession

View File

@ -66,6 +66,7 @@ from corporate.lib.stripe import (
customer_has_last_n_invoices_open,
do_change_remote_server_plan_type,
do_deactivate_remote_server,
do_reactivate_remote_server,
downgrade_small_realms_behind_on_payments_as_needed,
get_latest_seat_count,
get_plan_renewal_or_end_date,
@ -4761,7 +4762,7 @@ class BillingHelpersTest(ZulipTestCase):
self.assertEqual(remote_realm_audit_log.extra_data, expected_extra_data)
self.assertEqual(remote_server.plan_type, RemoteZulipServer.PLAN_TYPE_BUSINESS)
def test_deactivate_remote_server(self) -> None:
def test_deactivate_reactivate_remote_server(self) -> None:
server_uuid = str(uuid.uuid4())
remote_server = RemoteZulipServer.objects.create(
uuid=server_uuid,
@ -4792,6 +4793,23 @@ class BillingHelpersTest(ZulipTestCase):
],
)
do_reactivate_remote_server(remote_server)
remote_server.refresh_from_db()
self.assertFalse(remote_server.deactivated)
remote_realm_audit_log = RemoteZulipServerAuditLog.objects.latest("id")
self.assertEqual(remote_realm_audit_log.event_type, RealmAuditLog.REMOTE_SERVER_REACTIVATED)
self.assertEqual(remote_realm_audit_log.server, remote_server)
with self.assertLogs("corporate.stripe", "WARN") as warning_log:
do_reactivate_remote_server(remote_server)
self.assertEqual(
warning_log.output,
[
"WARNING:corporate.stripe:Cannot reactivate remote server with ID "
f"{remote_server.id}, server is already active."
],
)
class AnalyticsHelpersTest(ZulipTestCase):
def test_get_realms_to_default_discount_dict(self) -> None:

View File

@ -130,6 +130,7 @@ class AbstractRealmAuditLog(models.Model):
# value used for the same purpose in RealmAuditLog (e.g.
# REALM_DEACTIVATED = 201, and REMOTE_SERVER_DEACTIVATED = 10201).
REMOTE_SERVER_DEACTIVATED = 10201
REMOTE_SERVER_REACTIVATED = 10202
REMOTE_SERVER_PLAN_TYPE_CHANGED = 10204
REMOTE_SERVER_DISCOUNT_CHANGED = 10209
REMOTE_SERVER_SPONSORSHIP_APPROVED = 10210