def test_jabber_mirror(self) -> None: reset_emails_in_zulip_realm() user = self.example_user("hamlet") sender = user recipients = [ self.nonreg_email("alice"), self.nonreg_email("bob"), self.nonreg_email("cordelia"), ] message_type = "private" client = get_client("jabber_mirror") mirror_sender = create_mirrored_message_users(client, user, recipients, sender.email, message_type) self.assertEqual(mirror_sender, sender) realm_users = UserProfile.objects.filter(realm=sender.realm) realm_emails = {user.email for user in realm_users} self.assertIn(self.nonreg_email("alice"), realm_emails) self.assertIn(self.nonreg_email("bob"), realm_emails) bob = get_user(self.nonreg_email("bob"), sender.realm) self.assertTrue(bob.is_mirror_dummy)
def test_jabber_mirror(self) -> None: reset_emails_in_zulip_realm() client = get_client(name="jabber_mirror") sender = self.example_user("hamlet") user = sender recipients = [ self.nonreg_email("alice"), self.nonreg_email("bob"), self.nonreg_email("cordelia"), ] # Now make the request. Request = namedtuple("Request", ["POST", "client"]) request = Request(POST=dict(sender=sender.email, type="private"), client=client) mirror_sender = create_mirrored_message_users(request, user, recipients) self.assertEqual(mirror_sender, sender) realm_users = UserProfile.objects.filter(realm=sender.realm) realm_emails = {user.email for user in realm_users} self.assertIn(self.nonreg_email("alice"), realm_emails) self.assertIn(self.nonreg_email("bob"), realm_emails) bob = get_user(self.nonreg_email("bob"), sender.realm) self.assertTrue(bob.is_mirror_dummy)
def test_jabber_mirror(self) -> None: reset_emails_in_zulip_realm() client = get_client(name='jabber_mirror') sender = self.example_user('hamlet') user = sender recipients = [self.nonreg_email('alice'), self.nonreg_email('bob'), self.nonreg_email('cordelia')] # Now make the request. Request = namedtuple('Request', ['POST', 'client']) request = Request(POST = dict(sender=sender.email, type='private'), client = client) mirror_sender = create_mirrored_message_users(request, user, recipients) self.assertEqual(mirror_sender, sender) realm_users = UserProfile.objects.filter(realm=sender.realm) realm_emails = {user.email for user in realm_users} self.assertIn(self.nonreg_email('alice'), realm_emails) self.assertIn(self.nonreg_email('bob'), realm_emails) bob = get_user(self.nonreg_email('bob'), sender.realm) self.assertTrue(bob.is_mirror_dummy)
def test_jabber_mirror(self) -> None: reset_emails_in_zulip_realm() sender = self.example_user("hamlet") user = sender recipients = [ self.nonreg_email("alice"), self.nonreg_email("bob"), self.nonreg_email("cordelia"), ] # Now make the request. post_data = dict(sender=sender.email, type="private") request = HostRequestMock(post_data=post_data, client_name="jabber_mirror") mirror_sender = create_mirrored_message_users(request, user, recipients) self.assertEqual(mirror_sender, sender) realm_users = UserProfile.objects.filter(realm=sender.realm) realm_emails = {user.email for user in realm_users} self.assertIn(self.nonreg_email("alice"), realm_emails) self.assertIn(self.nonreg_email("bob"), realm_emails) bob = get_user(self.nonreg_email("bob"), sender.realm) self.assertTrue(bob.is_mirror_dummy)
def test_change_email_address_visibility(self) -> None: # We need an admin user. user_profile = self.example_user("iago") hamlet = self.example_user("hamlet") cordelia = self.example_user("cordelia") self.login_user(user_profile) invalid_value = 12 req = dict(email_address_visibility=orjson.dumps(invalid_value).decode()) result = self.client_patch("/json/realm", req) self.assert_json_error(result, "Invalid email_address_visibility") reset_emails_in_zulip_realm() realm = get_realm("zulip") req = dict( email_address_visibility=orjson.dumps(Realm.EMAIL_ADDRESS_VISIBILITY_ADMINS).decode() ) result = self.client_patch("/json/realm", req) self.assert_json_success(result) realm = get_realm("zulip") self.assertEqual(realm.email_address_visibility, Realm.EMAIL_ADDRESS_VISIBILITY_ADMINS) edited_user_profile = get_user_profile_by_id(user_profile.id) self.assertEqual( edited_user_profile.email, f"user{edited_user_profile.id}@zulip.testserver" ) # Check normal user cannot access email result = self.api_get(cordelia, f"/api/v1/users/{hamlet.id}") self.assert_json_success(result) self.assertEqual(result.json()["user"]["email"], f"user{hamlet.id}@zulip.testserver") self.assertEqual(result.json()["user"].get("delivery_email"), None) # Check administrator gets delivery_email with EMAIL_ADDRESS_VISIBILITY_ADMINS result = self.api_get(user_profile, f"/api/v1/users/{hamlet.id}") self.assert_json_success(result) self.assertEqual(result.json()["user"]["email"], f"user{hamlet.id}@zulip.testserver") self.assertEqual(result.json()["user"].get("delivery_email"), hamlet.delivery_email) req = dict( email_address_visibility=orjson.dumps(Realm.EMAIL_ADDRESS_VISIBILITY_NOBODY).decode() ) result = self.client_patch("/json/realm", req) self.assert_json_success(result) realm = get_realm("zulip") self.assertEqual(realm.email_address_visibility, Realm.EMAIL_ADDRESS_VISIBILITY_NOBODY) edited_user_profile = get_user_profile_by_id(user_profile.id) self.assertEqual( edited_user_profile.email, f"user{edited_user_profile.id}@zulip.testserver" ) # Check even administrator doesn't get delivery_email with # EMAIL_ADDRESS_VISIBILITY_NOBODY result = self.api_get(user_profile, f"/api/v1/users/{hamlet.id}") self.assert_json_success(result) self.assertEqual(result.json()["user"]["email"], f"user{hamlet.id}@zulip.testserver") self.assertEqual(result.json()["user"].get("delivery_email"), None)
def test_change_email_address_visibility(self) -> None: # We need an admin user. user_profile = self.example_user("iago") hamlet = self.example_user("hamlet") cordelia = self.example_user("cordelia") self.login_user(user_profile) invalid_value = 12 req = dict(email_address_visibility = ujson.dumps(invalid_value)) result = self.client_patch('/json/realm', req) self.assert_json_error(result, 'Invalid email_address_visibility') reset_emails_in_zulip_realm() realm = get_realm("zulip") req = dict(email_address_visibility = ujson.dumps(Realm.EMAIL_ADDRESS_VISIBILITY_ADMINS)) result = self.client_patch('/json/realm', req) self.assert_json_success(result) realm = get_realm("zulip") self.assertEqual(realm.email_address_visibility, Realm.EMAIL_ADDRESS_VISIBILITY_ADMINS) edited_user_profile = get_user_profile_by_id(user_profile.id) self.assertEqual(edited_user_profile.email, "*****@*****.**" % (edited_user_profile.id,)) # Check normal user cannot access email result = self.api_get(cordelia, "/api/v1/users/%s" % (hamlet.id,)) self.assert_json_success(result) self.assertEqual(result.json()['user']['email'], '*****@*****.**' % (hamlet.id,)) self.assertEqual(result.json()['user'].get('delivery_email'), None) # Check administrator gets delivery_email with EMAIL_ADDRESS_VISIBILITY_ADMINS result = self.api_get(user_profile, "/api/v1/users/%s" % (hamlet.id,)) self.assert_json_success(result) self.assertEqual(result.json()['user']['email'], '*****@*****.**' % (hamlet.id,)) self.assertEqual(result.json()['user'].get('delivery_email'), hamlet.delivery_email) req = dict(email_address_visibility = ujson.dumps(Realm.EMAIL_ADDRESS_VISIBILITY_NOBODY)) result = self.client_patch('/json/realm', req) self.assert_json_success(result) realm = get_realm("zulip") self.assertEqual(realm.email_address_visibility, Realm.EMAIL_ADDRESS_VISIBILITY_NOBODY) edited_user_profile = get_user_profile_by_id(user_profile.id) self.assertEqual(edited_user_profile.email, "*****@*****.**" % (edited_user_profile.id,)) # Check even administrator doesn't get delivery_email with # EMAIL_ADDRESS_VISIBILITY_NOBODY result = self.api_get(user_profile, "/api/v1/users/%s" % (hamlet.id,)) self.assert_json_success(result) self.assertEqual(result.json()['user']['email'], '*****@*****.**' % (hamlet.id,)) self.assertEqual(result.json()['user'].get('delivery_email'), None)
def test_single_user_get(self) -> None: reset_emails_in_zulip_realm() # First, we setup the test with some data user = self.example_user("othello") self.login_user(user) result = self.client_post("/json/users/me/presence", {"status": "active"}) result = self.client_post("/json/users/me/presence", {"status": "active"}, HTTP_USER_AGENT="ZulipDesktop/1.0") result = self.api_post( user, "/api/v1/users/me/presence", {"status": "idle"}, HTTP_USER_AGENT="ZulipAndroid/1.0", ) self.assert_json_success(result) # Check some error conditions result = self.client_get("/json/users/[email protected]/presence") self.assert_json_error(result, "No such user") result = self.client_get("/json/users/[email protected]/presence") self.assert_json_error(result, "No presence data for [email protected]") do_deactivate_user(self.example_user("cordelia")) result = self.client_get("/json/users/[email protected]/presence") self.assert_json_error(result, "No such user") result = self.client_get("/json/users/[email protected]/presence") self.assert_json_error(result, "Presence is not supported for bot users.") sipbtest = self.mit_user("sipbtest") self.login_user(sipbtest) result = self.client_get("/json/users/[email protected]/presence", subdomain="zephyr") self.assert_json_error(result, "No such user") # Then, we check everything works self.login("hamlet") result = self.client_get("/json/users/[email protected]/presence") result_dict = result.json() self.assertEqual(set(result_dict["presence"].keys()), {"ZulipAndroid", "website", "aggregated"}) self.assertEqual(set(result_dict["presence"]["website"].keys()), {"status", "timestamp"})
def test_search(self) -> None: reset_emails_in_zulip_realm() def check_hamlet_user_query_result(result: HttpResponse) -> None: self.assert_in_success_response(['<span class="label">user</span>\n', '<h3>King Hamlet</h3>', '<b>Email</b>: [email protected]', '<b>Is active</b>: True<br>', '<b>Admins</b>: [email protected], [email protected]\n', 'class="copy-button" data-copytext="[email protected], [email protected]"', ], result) def check_zulip_realm_query_result(result: HttpResponse) -> None: zulip_realm = get_realm("zulip") self.assert_in_success_response([f'<input type="hidden" name="realm_id" value="{zulip_realm.id}"', 'Zulip Dev</h3>', '<option value="1" selected>Self Hosted</option>', '<option value="2" >Limited</option>', 'input type="number" name="discount" value="None"', '<option value="active" selected>Active</option>', '<option value="deactivated" >Deactivated</option>', '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="hidden" name="realm_id" value="{lear_realm.id}"', 'Lear & Co.</h3>', '<option value="1" selected>Self Hosted</option>', '<option value="2" >Limited</option>', 'input type="number" name="discount" value="None"', '<option value="active" selected>Active</option>', '<option value="deactivated" >Deactivated</option>', 'scrub-realm-button">', 'data-string-id="lear"', '<b>Name</b>: Zulip Standard', '<b>Status</b>: Active', '<b>Billing schedule</b>: Annual', '<b>Licenses</b>: 2/10 (Manual)', '<b>Price per license</b>: $80.0', '<b>Payment method</b>: Send invoice', '<b>Next invoice date</b>: 02 January 2017', ], result) def check_preregistration_user_query_result(result: HttpResponse, email: str, invite: bool=False) -> None: self.assert_in_success_response(['<span class="label">preregistration user</span>\n', f'<b>Email</b>: {email}', ], result) if invite: self.assert_in_success_response(['<span class="label">invite</span>'], result) self.assert_in_success_response(['<b>Expires in</b>: 1\xa0week, 3', '<b>Status</b>: Link has never been clicked'], result) self.assert_in_success_response([], result) else: self.assert_not_in_success_response(['<span class="label">invite</span>'], result) self.assert_in_success_response(['<b>Expires in</b>: 1\xa0day', '<b>Status</b>: Link has never been clicked'], result) def check_realm_creation_query_result(result: HttpResponse, email: str) -> None: self.assert_in_success_response(['<span class="label">preregistration user</span>\n', '<span class="label">realm creation</span>\n', '<b>Link</b>: http://testserver/accounts/do_confirm/', '<b>Expires in</b>: 1\xa0day<br>\n', ], result) def check_multiuse_invite_link_query_result(result: HttpResponse) -> None: self.assert_in_success_response(['<span class="label">multiuse invite</span>\n', '<b>Link</b>: http://zulip.testserver/join/', '<b>Expires in</b>: 1\xa0week, 3', ], result) def check_realm_reactivation_link_query_result(result: HttpResponse) -> None: self.assert_in_success_response(['<span class="label">realm reactivation</span>\n', '<b>Link</b>: http://zulip.testserver/reactivate/', '<b>Expires in</b>: 1\xa0day', ], result) self.login('cordelia') result = self.client_get("/activity/support") self.assertEqual(result.status_code, 302) self.assertEqual(result["Location"], "/login/") self.login('iago') customer = Customer.objects.create(realm=get_realm("lear"), stripe_customer_id='cus_123') now = datetime(2016, 1, 2, tzinfo=timezone.utc) plan = CustomerPlan.objects.create(customer=customer, billing_cycle_anchor=now, billing_schedule=CustomerPlan.ANNUAL, tier=CustomerPlan.STANDARD, price_per_license=8000, next_invoice_date=add_months(now, 12)) LicenseLedger.objects.create(licenses=10, licenses_at_next_renewal=10, event_time=timezone_now(), is_renewal=True, plan=plan) result = self.client_get("/activity/support") self.assert_in_success_response(['<input type="text" name="q" class="input-xxlarge search-query"'], result) result = self.client_get("/activity/support", {"q": "*****@*****.**"}) check_hamlet_user_query_result(result) check_zulip_realm_query_result(result) result = self.client_get("/activity/support", {"q": "lear"}) check_lear_realm_query_result(result) result = self.client_get("/activity/support", {"q": "http://lear.testserver"}) check_lear_realm_query_result(result) with self.settings(REALM_HOSTS={'zulip': 'localhost'}): result = self.client_get("/activity/support", {"q": "http://localhost"}) check_zulip_realm_query_result(result) result = self.client_get("/activity/support", {"q": "[email protected], lear"}) check_hamlet_user_query_result(result) check_zulip_realm_query_result(result) check_lear_realm_query_result(result) result = self.client_get("/activity/support", {"q": "lear, Hamlet <*****@*****.**>"}) check_hamlet_user_query_result(result) check_zulip_realm_query_result(result) check_lear_realm_query_result(result) self.client_post('/accounts/home/', {'email': self.nonreg_email("test")}) self.login('iago') result = self.client_get("/activity/support", {"q": self.nonreg_email("test")}) check_preregistration_user_query_result(result, self.nonreg_email("test")) check_zulip_realm_query_result(result) stream_ids = [self.get_stream_id("Denmark")] invitee_emails = [self.nonreg_email("test1")] self.client_post("/json/invites", {"invitee_emails": invitee_emails, "stream_ids": ujson.dumps(stream_ids), "invite_as": PreregistrationUser.INVITE_AS['MEMBER']}) result = self.client_get("/activity/support", {"q": self.nonreg_email("test1")}) check_preregistration_user_query_result(result, self.nonreg_email("test1"), invite=True) check_zulip_realm_query_result(result) email = self.nonreg_email('alice') self.client_post('/new/', {'email': email}) result = self.client_get("/activity/support", {"q": email}) check_realm_creation_query_result(result, email) do_create_multiuse_invite_link(self.example_user("hamlet"), invited_as=1) result = self.client_get("/activity/support", {"q": "zulip"}) check_multiuse_invite_link_query_result(result) check_zulip_realm_query_result(result) MultiuseInvite.objects.all().delete() do_send_realm_reactivation_email(get_realm("zulip")) result = self.client_get("/activity/support", {"q": "zulip"}) check_realm_reactivation_link_query_result(result) check_zulip_realm_query_result(result)
def test_search(self) -> None: reset_emails_in_zulip_realm() def assert_user_details_in_html_response(html_response: HttpResponse, full_name: str, email: str, role: str) -> None: self.assert_in_success_response( [ '<span class="label">user</span>\n', f"<h3>{full_name}</h3>", f"<b>Email</b>: {email}", "<b>Is active</b>: True<br />", f"<b>Role</b>: {role}<br />", ], 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"<b>Admins</b>: {self.example_email('iago')}\n", f"<b>Owners</b>: {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"<b>First human user</b>: {first_human_user.delivery_email}\n", f'<input type="hidden" name="realm_id" value="{zulip_realm.id}"', "Zulip Dev</h3>", '<option value="1" selected>Self hosted</option>', '<option value="2" >Limited</option>', 'input type="number" name="discount" value="None"', '<option value="active" selected>Active</option>', '<option value="deactivated" >Deactivated</option>', f'<option value="{zulip_realm.org_type}" selected>', '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="hidden" name="realm_id" value="{lear_realm.id}"', "Lear & Co.</h3>", '<option value="1" selected>Self hosted</option>', '<option value="2" >Limited</option>', 'input type="number" name="discount" value="None"', '<option value="active" selected>Active</option>', '<option value="deactivated" >Deactivated</option>', 'scrub-realm-button">', 'data-string-id="lear"', "<b>Name</b>: Zulip Standard", "<b>Status</b>: Active", "<b>Billing schedule</b>: Annual", "<b>Licenses</b>: 2/10 (Manual)", "<b>Price per license</b>: $80.0", "<b>Next invoice date</b>: 02 January 2017", '<option value="send_invoice" selected>', '<option value="charge_automatically" >', ], result, ) def check_preregistration_user_query_result( result: HttpResponse, email: str, invite: bool = False) -> None: self.assert_in_success_response( [ '<span class="label">preregistration user</span>\n', f"<b>Email</b>: {email}", ], result, ) if invite: self.assert_in_success_response( ['<span class="label">invite</span>'], result) self.assert_in_success_response( [ "<b>Expires in</b>: 1\xa0week, 3\xa0days", "<b>Status</b>: Link has never been clicked", ], result, ) self.assert_in_success_response([], result) else: self.assert_not_in_success_response( ['<span class="label">invite</span>'], result) self.assert_in_success_response( [ "<b>Expires in</b>: 1\xa0day", "<b>Status</b>: Link has never been clicked", ], result, ) def check_realm_creation_query_result(result: HttpResponse, email: str) -> None: self.assert_in_success_response( [ '<span class="label">preregistration user</span>\n', '<span class="label">realm creation</span>\n', "<b>Link</b>: http://testserver/accounts/do_confirm/", "<b>Expires in</b>: 1\xa0day", ], result, ) def check_multiuse_invite_link_query_result( result: HttpResponse) -> None: self.assert_in_success_response( [ '<span class="label">multiuse invite</span>\n', "<b>Link</b>: http://zulip.testserver/join/", "<b>Expires in</b>: 1\xa0week, 3\xa0days", ], result, ) def check_realm_reactivation_link_query_result( result: HttpResponse) -> None: self.assert_in_success_response( [ '<span class="label">realm reactivation</span>\n', "<b>Link</b>: http://zulip.testserver/reactivate/", "<b>Expires in</b>: 1\xa0day", ], result, ) self.login("cordelia") result = self.client_get("/activity/support") self.assertEqual(result.status_code, 302) self.assertEqual(result["Location"], "/login/") self.login("iago") do_set_realm_property( get_realm("zulip"), "email_address_visibility", Realm.EMAIL_ADDRESS_VISIBILITY_NOBODY, acting_user=None, ) customer = Customer.objects.create(realm=get_realm("lear"), stripe_customer_id="cus_123") now = datetime(2016, 1, 2, tzinfo=timezone.utc) plan = CustomerPlan.objects.create( customer=customer, billing_cycle_anchor=now, billing_schedule=CustomerPlan.ANNUAL, tier=CustomerPlan.STANDARD, price_per_license=8000, next_invoice_date=add_months(now, 12), ) LicenseLedger.objects.create( licenses=10, licenses_at_next_renewal=10, event_time=timezone_now(), is_renewal=True, plan=plan, ) result = self.client_get("/activity/support") self.assert_in_success_response( ['<input type="text" name="q" class="input-xxlarge search-query"'], result) result = self.client_get("/activity/support", {"q": self.example_email("hamlet")}) check_hamlet_user_query_result(result) check_zulip_realm_query_result(result) result = self.client_get("/activity/support", {"q": self.example_email("polonius")}) check_polonius_user_query_result(result) check_zulip_realm_query_result(result) result = self.client_get("/activity/support", {"q": "lear"}) check_lear_realm_query_result(result) result = self.client_get("/activity/support", {"q": "http://lear.testserver"}) check_lear_realm_query_result(result) with self.settings(REALM_HOSTS={"zulip": "localhost"}): result = self.client_get("/activity/support", {"q": "http://localhost"}) check_zulip_realm_query_result(result) result = self.client_get("/activity/support", {"q": "[email protected], lear"}) check_hamlet_user_query_result(result) check_zulip_realm_query_result(result) check_lear_realm_query_result(result) result = self.client_get("/activity/support", {"q": "King hamlet,lear"}) check_hamlet_user_query_result(result) check_zulip_realm_query_result(result) check_lear_realm_query_result(result) result = self.client_get("/activity/support", {"q": "Othello, the Moor of Venice"}) check_othello_user_query_result(result) check_zulip_realm_query_result(result) result = self.client_get("/activity/support", {"q": "lear, Hamlet <*****@*****.**>"}) check_hamlet_user_query_result(result) check_zulip_realm_query_result(result) check_lear_realm_query_result(result) with mock.patch( "analytics.views.support.timezone_now", return_value=timezone_now() - timedelta(minutes=50), ): self.client_post("/accounts/home/", {"email": self.nonreg_email("test")}) self.login("iago") result = self.client_get("/activity/support", {"q": self.nonreg_email("test")}) check_preregistration_user_query_result(result, self.nonreg_email("test")) check_zulip_realm_query_result(result) invite_expires_in_days = 10 stream_ids = [self.get_stream_id("Denmark")] invitee_emails = [self.nonreg_email("test1")] self.client_post( "/json/invites", { "invitee_emails": invitee_emails, "stream_ids": orjson.dumps(stream_ids).decode(), "invite_expires_in_days": invite_expires_in_days, "invite_as": PreregistrationUser.INVITE_AS["MEMBER"], }, ) result = self.client_get("/activity/support", {"q": self.nonreg_email("test1")}) check_preregistration_user_query_result(result, self.nonreg_email("test1"), invite=True) check_zulip_realm_query_result(result) email = self.nonreg_email("alice") self.client_post("/new/", {"email": email}) result = self.client_get("/activity/support", {"q": email}) check_realm_creation_query_result(result, email) do_create_multiuse_invite_link( self.example_user("hamlet"), invited_as=1, invite_expires_in_days=invite_expires_in_days, ) result = self.client_get("/activity/support", {"q": "zulip"}) check_multiuse_invite_link_query_result(result) check_zulip_realm_query_result(result) MultiuseInvite.objects.all().delete() do_send_realm_reactivation_email(get_realm("zulip"), acting_user=None) result = self.client_get("/activity/support", {"q": "zulip"}) check_realm_reactivation_link_query_result(result) check_zulip_realm_query_result(result)
def test_search(self) -> None: reset_emails_in_zulip_realm() def check_hamlet_user_query_result(result: HttpResponse) -> None: self.assert_in_success_response([ '<span class="label">user</span>\n', '<h3>King Hamlet</h3>', '<b>Email</b>: [email protected]', '<b>Is active</b>: True<br>', '<b>Admins</b>: [email protected]\n', 'class="copy-button" data-copytext="*****@*****.**"' ], result) def check_zulip_realm_query_result(result: HttpResponse) -> None: zulip_realm = get_realm("zulip") self.assert_in_success_response([ '<input type="hidden" name="realm_id" value="%s"' % (zulip_realm.id, ), 'Zulip Dev</h3>', '<option value="1" selected>Self Hosted</option>', '<option value="2" >Limited</option>', 'input type="number" name="discount" value="None"', '<option value="active" selected>Active</option>', '<option value="deactivated" >Deactivated</option>', '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([ '<input type="hidden" name="realm_id" value="%s"' % (lear_realm.id, ), 'Lear & Co.</h3>', '<option value="1" selected>Self Hosted</option>', '<option value="2" >Limited</option>', 'input type="number" name="discount" value="None"', '<option value="active" selected>Active</option>', '<option value="deactivated" >Deactivated</option>', 'scrub-realm-button">', 'data-string-id="lear"' ], result) def check_preregistration_user_query_result( result: HttpResponse, email: str, invite: Optional[bool] = False) -> None: self.assert_in_success_response([ '<span class="label">preregistration user</span>\n', '<b>Email</b>: {}'.format(email), ], result) if invite: self.assert_in_success_response( ['<span class="label">invite</span>'], result) self.assert_in_success_response([ '<b>Expires in</b>: 1\xa0week, 3', '<b>Status</b>: Link has never been clicked' ], result) self.assert_in_success_response([], result) else: self.assert_not_in_success_response( ['<span class="label">invite</span>'], result) self.assert_in_success_response([ '<b>Expires in</b>: 1\xa0day', '<b>Status</b>: Link has never been clicked' ], result) def check_realm_creation_query_result(result: HttpResponse, email: str) -> None: self.assert_in_success_response([ '<span class="label">preregistration user</span>\n', '<span class="label">realm creation</span>\n', '<b>Link</b>: http://zulip.testserver/accounts/do_confirm/', '<b>Expires in</b>: 1\xa0day<br>\n' ], result) def check_multiuse_invite_link_query_result( result: HttpResponse) -> None: self.assert_in_success_response([ '<span class="label">multiuse invite</span>\n', '<b>Link</b>: http://zulip.testserver/join/', '<b>Expires in</b>: 1\xa0week, 3' ], result) def check_realm_reactivation_link_query_result( result: HttpResponse) -> None: self.assert_in_success_response([ '<span class="label">realm reactivation</span>\n', '<b>Link</b>: http://zulip.testserver/reactivate/', '<b>Expires in</b>: 1\xa0day' ], result) self.login('cordelia') result = self.client_get("/activity/support") self.assertEqual(result.status_code, 302) self.assertEqual(result["Location"], "/login/") self.login('iago') result = self.client_get("/activity/support") self.assert_in_success_response( ['<input type="text" name="q" class="input-xxlarge search-query"'], result) result = self.client_get("/activity/support", {"q": "*****@*****.**"}) check_hamlet_user_query_result(result) check_zulip_realm_query_result(result) result = self.client_get("/activity/support", {"q": "lear"}) check_lear_realm_query_result(result) result = self.client_get("/activity/support", {"q": "http://lear.testserver"}) check_lear_realm_query_result(result) with self.settings(REALM_HOSTS={'zulip': 'localhost'}): result = self.client_get("/activity/support", {"q": "http://localhost"}) check_zulip_realm_query_result(result) result = self.client_get("/activity/support", {"q": "[email protected], lear"}) check_hamlet_user_query_result(result) check_zulip_realm_query_result(result) check_lear_realm_query_result(result) result = self.client_get("/activity/support", {"q": "lear, Hamlet <*****@*****.**>"}) check_hamlet_user_query_result(result) check_zulip_realm_query_result(result) check_lear_realm_query_result(result) self.client_post('/accounts/home/', {'email': self.nonreg_email("test")}) self.login('iago') result = self.client_get("/activity/support", {"q": self.nonreg_email("test")}) check_preregistration_user_query_result(result, self.nonreg_email("test")) check_zulip_realm_query_result(result) stream_ids = [self.get_stream_id("Denmark")] invitee_emails = [self.nonreg_email("test1")] self.client_post( "/json/invites", { "invitee_emails": invitee_emails, "stream_ids": ujson.dumps(stream_ids), "invite_as": 1 }) result = self.client_get("/activity/support", {"q": self.nonreg_email("test1")}) check_preregistration_user_query_result(result, self.nonreg_email("test1"), invite=True) check_zulip_realm_query_result(result) email = self.nonreg_email('alice') self.client_post('/new/', {'email': email}) result = self.client_get("/activity/support", {"q": email}) check_realm_creation_query_result(result, email) do_create_multiuse_invite_link(self.example_user("hamlet"), invited_as=1) result = self.client_get("/activity/support", {"q": "zulip"}) check_multiuse_invite_link_query_result(result) check_zulip_realm_query_result(result) MultiuseInvite.objects.all().delete() do_send_realm_reactivation_email(get_realm("zulip")) result = self.client_get("/activity/support", {"q": "zulip"}) check_realm_reactivation_link_query_result(result) check_zulip_realm_query_result(result)