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",
                    '