from datetime import datetime, timedelta, timezone from unittest import mock import orjson from django.http import HttpResponse from django.utils.timezone import now as timezone_now from corporate.lib.stripe import add_months, update_sponsorship_status from corporate.models import Customer, CustomerPlan, LicenseLedger, get_customer_by_realm from zerver.lib.actions import ( do_create_multiuse_invite_link, do_send_realm_reactivation_email, do_set_realm_property, ) from zerver.lib.test_classes import ZulipTestCase from zerver.lib.test_helpers import reset_emails_in_zulip_realm from zerver.models import ( MultiuseInvite, PreregistrationUser, Realm, UserMessage, UserProfile, get_realm, ) class TestSupportEndpoint(ZulipTestCase): def test_search(self) -> None: reset_emails_in_zulip_realm() def assert_user_details_in_html_response( html_response: str, full_name: str, email: str, role: str ) -> None: self.assert_in_success_response( [ 'user\n', f"

{full_name}

", f"Email: {email}", "Is active: True
", f"Role: {role}
", ], html_response, ) def check_hamlet_user_query_result(result: HttpResponse) -> None: assert_user_details_in_html_response( result, "King Hamlet", self.example_email("hamlet"), "Member" ) self.assert_in_success_response( [ f"Admins: {self.example_email('iago')}\n", f"Owners: {self.example_email('desdemona')}\n", 'class="copy-button" data-copytext="{}">'.format(self.example_email("iago")), 'class="copy-button" data-copytext="{}">'.format( self.example_email("desdemona") ), ], result, ) def check_othello_user_query_result(result: HttpResponse) -> None: assert_user_details_in_html_response( result, "Othello, the Moor of Venice", self.example_email("othello"), "Member" ) def check_polonius_user_query_result(result: HttpResponse) -> None: assert_user_details_in_html_response( result, "Polonius", self.example_email("polonius"), "Guest" ) def check_zulip_realm_query_result(result: HttpResponse) -> None: zulip_realm = get_realm("zulip") first_human_user = zulip_realm.get_first_human_user() assert first_human_user is not None self.assert_in_success_response( [ f"First human user: {first_human_user.delivery_email}\n", f'", '', '', 'input type="number" name="discount" value="None"', '', '', 'scrub-realm-button">', 'data-string-id="zulip"', ], result, ) def check_lear_realm_query_result(result: HttpResponse) -> None: lear_realm = get_realm("lear") self.assert_in_success_response( [ f'", '', '', 'input type="number" name="discount" value="None"', '', '', 'scrub-realm-button">', 'data-string-id="lear"', "Name: Zulip Standard", "Status: Active", "Billing schedule: Annual", "Licenses: 2/10 (Manual)", "Price per license: $80.0", "Next invoice date: 02 January 2017", '