|  |  | @@ -34,7 +34,7 @@ from zerver.lib.test_classes import ( | 
			
		
	
		
		
			
				
					
					|  |  |  | ) |  |  |  | ) | 
			
		
	
		
		
			
				
					
					|  |  |  | from zerver.views.messages import ( |  |  |  | from zerver.views.messages import ( | 
			
		
	
		
		
			
				
					
					|  |  |  |     exclude_muting_conditions, |  |  |  |     exclude_muting_conditions, | 
			
		
	
		
		
			
				
					
					|  |  |  |     get_old_messages_backend, ok_to_include_history, |  |  |  |     get_messages_backend, ok_to_include_history, | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     NarrowBuilder, BadNarrowOperator, Query, |  |  |  |     NarrowBuilder, BadNarrowOperator, Query, | 
			
		
	
		
		
			
				
					
					|  |  |  |     LARGER_THAN_MAX_MESSAGE_ID, |  |  |  |     LARGER_THAN_MAX_MESSAGE_ID, | 
			
		
	
		
		
			
				
					
					|  |  |  | ) |  |  |  | ) | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -431,7 +431,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         return query_ids |  |  |  |         return query_ids | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_successful_get_old_messages_reaction(self): |  |  |  |     def test_successful_get_messages_reaction(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         Test old `/json/messages` returns reactions. |  |  |  |         Test old `/json/messages` returns reactions. | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -459,7 +459,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.assertEqual(message_to_assert['reactions'][0]['emoji_name'], |  |  |  |         self.assertEqual(message_to_assert['reactions'][0]['emoji_name'], | 
			
		
	
		
		
			
				
					
					|  |  |  |                          reaction_name) |  |  |  |                          reaction_name) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_successful_get_old_messages(self): |  |  |  |     def test_successful_get_messages(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         A call to GET /json/messages with valid parameters returns a list of |  |  |  |         A call to GET /json/messages with valid parameters returns a list of | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -474,7 +474,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.get_and_check_messages(dict(narrow=ujson.dumps([dict(operator='pm-with', operand='othello@zulip.com')]))) |  |  |  |         self.get_and_check_messages(dict(narrow=ujson.dumps([dict(operator='pm-with', operand='othello@zulip.com')]))) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_narrow_pm_with(self): |  |  |  |     def test_get_messages_with_narrow_pm_with(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         A request for old messages with a narrow by pm-with only returns |  |  |  |         A request for old messages with a narrow by pm-with only returns | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -504,7 +504,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |             for message in result["messages"]: |  |  |  |             for message in result["messages"]: | 
			
		
	
		
		
			
				
					
					|  |  |  |                 self.assertEqual(dr_emails(message['display_recipient']), emails) |  |  |  |                 self.assertEqual(dr_emails(message['display_recipient']), emails) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_narrow_stream(self): |  |  |  |     def test_get_messages_with_narrow_stream(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         A request for old messages with a narrow by stream only returns |  |  |  |         A request for old messages with a narrow by stream only returns | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -528,7 +528,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |             self.assertEqual(message["type"], "stream") |  |  |  |             self.assertEqual(message["type"], "stream") | 
			
		
	
		
		
			
				
					
					|  |  |  |             self.assertEqual(message["recipient_id"], stream_id) |  |  |  |             self.assertEqual(message["recipient_id"], stream_id) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_narrow_stream_mit_unicode_regex(self): |  |  |  |     def test_get_messages_with_narrow_stream_mit_unicode_regex(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         A request for old messages for a user in the mit.edu relam with unicode |  |  |  |         A request for old messages for a user in the mit.edu relam with unicode | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -560,7 +560,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |             stream_id = stream_messages[i].recipient.id |  |  |  |             stream_id = stream_messages[i].recipient.id | 
			
		
	
		
		
			
				
					
					|  |  |  |             self.assertEqual(message["recipient_id"], stream_id) |  |  |  |             self.assertEqual(message["recipient_id"], stream_id) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_narrow_stream_mit_unicode_null_regex(self): |  |  |  |     def test_get_messages_with_narrow_stream_mit_unicode_null_regex(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.login("starnine@mit.edu") |  |  |  |         self.login("starnine@mit.edu") | 
			
		
	
		
		
			
				
					
					|  |  |  |         null_stream_name = u"foo\000-stream" |  |  |  |         null_stream_name = u"foo\000-stream" | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -576,7 +576,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.assertEqual(result["messages"][0]["type"], "stream") |  |  |  |         self.assertEqual(result["messages"][0]["type"], "stream") | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.assertEqual(result["messages"][0]["recipient_id"], stream_messages[0].recipient.id) |  |  |  |         self.assertEqual(result["messages"][0]["recipient_id"], stream_messages[0].recipient.id) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_narrow_topic_mit_unicode_regex(self): |  |  |  |     def test_get_messages_with_narrow_topic_mit_unicode_regex(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         A request for old messages for a user in the mit.edu realm with unicode |  |  |  |         A request for old messages for a user in the mit.edu realm with unicode | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -612,7 +612,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |             stream_id = stream_messages[i].recipient.id |  |  |  |             stream_id = stream_messages[i].recipient.id | 
			
		
	
		
		
			
				
					
					|  |  |  |             self.assertEqual(message["recipient_id"], stream_id) |  |  |  |             self.assertEqual(message["recipient_id"], stream_id) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_narrow_topic_mit_personal(self): |  |  |  |     def test_get_messages_with_narrow_topic_mit_personal(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         We handle .d grouping for MIT realm personal messages correctly. |  |  |  |         We handle .d grouping for MIT realm personal messages correctly. | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -652,7 +652,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |             stream_id = stream_messages[i].recipient.id |  |  |  |             stream_id = stream_messages[i].recipient.id | 
			
		
	
		
		
			
				
					
					|  |  |  |             self.assertEqual(message["recipient_id"], stream_id) |  |  |  |             self.assertEqual(message["recipient_id"], stream_id) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_narrow_sender(self): |  |  |  |     def test_get_messages_with_narrow_sender(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         A request for old messages with a narrow by sender only returns |  |  |  |         A request for old messages with a narrow by sender only returns | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -723,7 +723,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |                          u'<p><span class="highlight">KEYWORDMATCH</span> and should work</p>') |  |  |  |                          u'<p><span class="highlight">KEYWORDMATCH</span> and should work</p>') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     @override_settings(USING_PGROONGA=False) |  |  |  |     @override_settings(USING_PGROONGA=False) | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_search(self): |  |  |  |     def test_get_messages_with_search(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.login("cordelia@zulip.com") |  |  |  |         self.login("cordelia@zulip.com") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -789,7 +789,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.assertEqual(multi_search_result['messages'][0]['match_content'], '<p><span class="highlight">discuss</span> lunch <span class="highlight">after</span> lunch</p>') |  |  |  |         self.assertEqual(multi_search_result['messages'][0]['match_content'], '<p><span class="highlight">discuss</span> lunch <span class="highlight">after</span> lunch</p>') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     @override_settings(USING_PGROONGA=False) |  |  |  |     @override_settings(USING_PGROONGA=False) | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_search_not_subscribed(self): |  |  |  |     def test_get_messages_with_search_not_subscribed(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """Verify support for searching a stream you're not subscribed to""" |  |  |  |         """Verify support for searching a stream you're not subscribed to""" | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.subscribe_to_stream("hamlet@zulip.com", "newstream") |  |  |  |         self.subscribe_to_stream("hamlet@zulip.com", "newstream") | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -819,7 +819,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |                          '<p>Public <span class="highlight">special</span> content!</p>') |  |  |  |                          '<p>Public <span class="highlight">special</span> content!</p>') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     @override_settings(USING_PGROONGA=True) |  |  |  |     @override_settings(USING_PGROONGA=True) | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_search_pgroonga(self): |  |  |  |     def test_get_messages_with_search_pgroonga(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.login("cordelia@zulip.com") |  |  |  |         self.login("cordelia@zulip.com") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -891,7 +891,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.assertEqual(len(multi_search_result['messages']), 1) |  |  |  |         self.assertEqual(len(multi_search_result['messages']), 1) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.assertEqual(multi_search_result['messages'][0]['match_content'], '<p><span class="highlight">Can</span> you <span class="highlight">speak</span> Japanese?</p>') |  |  |  |         self.assertEqual(multi_search_result['messages'][0]['match_content'], '<p><span class="highlight">Can</span> you <span class="highlight">speak</span> Japanese?</p>') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_only_searching_anchor(self): |  |  |  |     def test_get_messages_with_only_searching_anchor(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         Test that specifying an anchor but 0 for num_before and num_after |  |  |  |         Test that specifying an anchor but 0 for num_before and num_after | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -916,7 +916,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         anchor, num_before, and num_after are all required |  |  |  |         anchor, num_before, and num_after are all required | 
			
		
	
		
		
			
				
					
					|  |  |  |         POST parameters for get_old_messages. |  |  |  |         POST parameters for get_messages. | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.login("hamlet@zulip.com") |  |  |  |         self.login("hamlet@zulip.com") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1006,7 +1006,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_bad_narrow_stream_content(self): |  |  |  |     def test_bad_narrow_stream_content(self): | 
			
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         If an invalid stream name is requested in get_old_messages, an error is |  |  |  |         If an invalid stream name is requested in get_messages, an error is | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         returned. |  |  |  |         returned. | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.login("hamlet@zulip.com") |  |  |  |         self.login("hamlet@zulip.com") | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1017,7 +1017,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_bad_narrow_one_on_one_email_content(self): |  |  |  |     def test_bad_narrow_one_on_one_email_content(self): | 
			
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         If an invalid 'pm-with' is requested in get_old_messages, an |  |  |  |         If an invalid 'pm-with' is requested in get_messages, an | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         error is returned. |  |  |  |         error is returned. | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.login("hamlet@zulip.com") |  |  |  |         self.login("hamlet@zulip.com") | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1047,19 +1047,19 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |         d = MessageDict.to_dict_uncached_helper(m, True) |  |  |  |         d = MessageDict.to_dict_uncached_helper(m, True) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.assertEqual(d['content'], '<p>test content</p>') |  |  |  |         self.assertEqual(d['content'], '<p>test content</p>') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def common_check_get_old_messages_query(self, query_params, expected): |  |  |  |     def common_check_get_messages_query(self, query_params, expected): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: (Dict[str, object], Text) -> None |  |  |  |         # type: (Dict[str, object], Text) -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         user_profile = get_user_profile_by_email("hamlet@zulip.com") |  |  |  |         user_profile = get_user_profile_by_email("hamlet@zulip.com") | 
			
		
	
		
		
			
				
					
					|  |  |  |         request = POSTRequestMock(query_params, user_profile) |  |  |  |         request = POSTRequestMock(query_params, user_profile) | 
			
		
	
		
		
			
				
					
					|  |  |  |         with queries_captured() as queries: |  |  |  |         with queries_captured() as queries: | 
			
		
	
		
		
			
				
					
					|  |  |  |             get_old_messages_backend(request, user_profile) |  |  |  |             get_messages_backend(request, user_profile) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         for query in queries: |  |  |  |         for query in queries: | 
			
		
	
		
		
			
				
					
					|  |  |  |             if "/* get_old_messages */" in query['sql']: |  |  |  |             if "/* get_messages */" in query['sql']: | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 sql = str(query['sql']).replace(" /* get_old_messages */", '') |  |  |  |                 sql = str(query['sql']).replace(" /* get_messages */", '') | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                 self.assertEqual(sql, expected) |  |  |  |                 self.assertEqual(sql, expected) | 
			
		
	
		
		
			
				
					
					|  |  |  |                 return |  |  |  |                 return | 
			
		
	
		
		
			
				
					
					|  |  |  |         raise AssertionError("get_old_messages query not found") |  |  |  |         raise AssertionError("get_messages query not found") | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_use_first_unread_anchor_with_some_unread_messages(self): |  |  |  |     def test_use_first_unread_anchor_with_some_unread_messages(self): | 
			
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1084,10 +1084,10 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |         request = POSTRequestMock(query_params, user_profile) |  |  |  |         request = POSTRequestMock(query_params, user_profile) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         with queries_captured() as all_queries: |  |  |  |         with queries_captured() as all_queries: | 
			
		
	
		
		
			
				
					
					|  |  |  |             get_old_messages_backend(request, user_profile) |  |  |  |             get_messages_backend(request, user_profile) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         # Verify the query for old messages looks correct. |  |  |  |         # Verify the query for old messages looks correct. | 
			
		
	
		
		
			
				
					
					|  |  |  |         queries = [q for q in all_queries if '/* get_old_messages */' in q['sql']] |  |  |  |         queries = [q for q in all_queries if '/* get_messages */' in q['sql']] | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         self.assertEqual(len(queries), 1) |  |  |  |         self.assertEqual(len(queries), 1) | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = queries[0]['sql'] |  |  |  |         sql = queries[0]['sql'] | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.assertNotIn('AND message_id = %s' % (LARGER_THAN_MAX_MESSAGE_ID,), sql) |  |  |  |         self.assertNotIn('AND message_id = %s' % (LARGER_THAN_MAX_MESSAGE_ID,), sql) | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1112,11 +1112,11 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |         request = POSTRequestMock(query_params, user_profile) |  |  |  |         request = POSTRequestMock(query_params, user_profile) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         with queries_captured() as all_queries: |  |  |  |         with queries_captured() as all_queries: | 
			
		
	
		
		
			
				
					
					|  |  |  |             get_old_messages_backend(request, user_profile) |  |  |  |             get_messages_backend(request, user_profile) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         # Next, verify the use_first_unread_anchor setting invokes |  |  |  |         # Next, verify the use_first_unread_anchor setting invokes | 
			
		
	
		
		
			
				
					
					|  |  |  |         # the `message_id = LARGER_THAN_MAX_MESSAGE_ID` hack. |  |  |  |         # the `message_id = LARGER_THAN_MAX_MESSAGE_ID` hack. | 
			
		
	
		
		
			
				
					
					|  |  |  |         queries = [q for q in all_queries if '/* get_old_messages */' in q['sql']] |  |  |  |         queries = [q for q in all_queries if '/* get_messages */' in q['sql']] | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         self.assertEqual(len(queries), 1) |  |  |  |         self.assertEqual(len(queries), 1) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.assertIn('AND message_id <= %d' % (LARGER_THAN_MAX_MESSAGE_ID - 1,), queries[0]['sql']) |  |  |  |         self.assertIn('AND message_id <= %d' % (LARGER_THAN_MAX_MESSAGE_ID - 1,), queries[0]['sql']) | 
			
		
	
		
		
			
				
					
					|  |  |  |         # There should not be an after_query in this case, since it'd be useless |  |  |  |         # There should not be an after_query in this case, since it'd be useless | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1127,11 +1127,11 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
		
		
			
				
					
					|  |  |  |         Test that our logic related to `use_first_unread_anchor` |  |  |  |         Test that our logic related to `use_first_unread_anchor` | 
			
		
	
		
		
			
				
					
					|  |  |  |         invokes the `message_id = LARGER_THAN_MAX_MESSAGE_ID` hack for |  |  |  |         invokes the `message_id = LARGER_THAN_MAX_MESSAGE_ID` hack for | 
			
		
	
		
		
			
				
					
					|  |  |  |         the `/* get_old_messages */` query when relevant muting |  |  |  |         the `/* get_messages */` query when relevant muting | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         is in effect. |  |  |  |         is in effect. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         This is a very arcane test on arcane, but very heavily |  |  |  |         This is a very arcane test on arcane, but very heavily | 
			
		
	
		
		
			
				
					
					|  |  |  |         field-tested, logic in get_old_messages_backend().  If |  |  |  |         field-tested, logic in get_messages_backend().  If | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         this test breaks, be absolutely sure you know what you're |  |  |  |         this test breaks, be absolutely sure you know what you're | 
			
		
	
		
		
			
				
					
					|  |  |  |         doing. |  |  |  |         doing. | 
			
		
	
		
		
			
				
					
					|  |  |  |         """ |  |  |  |         """ | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1152,7 +1152,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |         request = POSTRequestMock(query_params, user_profile) |  |  |  |         request = POSTRequestMock(query_params, user_profile) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         with queries_captured() as all_queries: |  |  |  |         with queries_captured() as all_queries: | 
			
		
	
		
		
			
				
					
					|  |  |  |             get_old_messages_backend(request, user_profile) |  |  |  |             get_messages_backend(request, user_profile) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         # Do some tests on the main query, to verify the muting logic |  |  |  |         # Do some tests on the main query, to verify the muting logic | 
			
		
	
		
		
			
				
					
					|  |  |  |         # runs on this code path. |  |  |  |         # runs on this code path. | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1166,7 +1166,7 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         # Next, verify the use_first_unread_anchor setting invokes |  |  |  |         # Next, verify the use_first_unread_anchor setting invokes | 
			
		
	
		
		
			
				
					
					|  |  |  |         # the `message_id = LARGER_THAN_MAX_MESSAGE_ID` hack. |  |  |  |         # the `message_id = LARGER_THAN_MAX_MESSAGE_ID` hack. | 
			
		
	
		
		
			
				
					
					|  |  |  |         queries = [q for q in all_queries if '/* get_old_messages */' in q['sql']] |  |  |  |         queries = [q for q in all_queries if '/* get_messages */' in q['sql']] | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         self.assertEqual(len(queries), 1) |  |  |  |         self.assertEqual(len(queries), 1) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.assertIn('AND message_id = %d' % (LARGER_THAN_MAX_MESSAGE_ID,), |  |  |  |         self.assertIn('AND message_id = %d' % (LARGER_THAN_MAX_MESSAGE_ID,), | 
			
		
	
		
		
			
				
					
					|  |  |  |                       queries[0]['sql']) |  |  |  |                       queries[0]['sql']) | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1233,94 +1233,94 @@ class GetOldMessagesTest(ZulipTestCase): | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.assertEqual(params['recipient_id_3'], get_recipient_id_for_stream_name(realm, 'web stuff')) |  |  |  |         self.assertEqual(params['recipient_id_3'], get_recipient_id_for_stream_name(realm, 'web stuff')) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.assertEqual(params['upper_2'], 'css') |  |  |  |         self.assertEqual(params['upper_2'], 'css') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_queries(self): |  |  |  |     def test_get_messages_queries(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         query_ids = self.get_query_ids() |  |  |  |         query_ids = self.get_query_ids() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage \nWHERE user_profile_id = {hamlet_id} AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 11) AS anon_1 ORDER BY message_id ASC' |  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage \nWHERE user_profile_id = {hamlet_id} AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 11) AS anon_1 ORDER BY message_id ASC' | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10}, sql) |  |  |  |         self.common_check_get_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10}, sql) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage \nWHERE user_profile_id = {hamlet_id} AND message_id <= 100 ORDER BY message_id DESC \n LIMIT 11) AS anon_1 ORDER BY message_id ASC' |  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage \nWHERE user_profile_id = {hamlet_id} AND message_id <= 100 ORDER BY message_id DESC \n LIMIT 11) AS anon_1 ORDER BY message_id ASC' | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 100, 'num_before': 10, 'num_after': 0}, sql) |  |  |  |         self.common_check_get_messages_query({'anchor': 100, 'num_before': 10, 'num_after': 0}, sql) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM ((SELECT message_id, flags \nFROM zerver_usermessage \nWHERE user_profile_id = {hamlet_id} AND message_id <= 99 ORDER BY message_id DESC \n LIMIT 10) UNION ALL (SELECT message_id, flags \nFROM zerver_usermessage \nWHERE user_profile_id = {hamlet_id} AND message_id >= 100 ORDER BY message_id ASC \n LIMIT 11)) AS anon_1 ORDER BY message_id ASC' |  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM ((SELECT message_id, flags \nFROM zerver_usermessage \nWHERE user_profile_id = {hamlet_id} AND message_id <= 99 ORDER BY message_id DESC \n LIMIT 10) UNION ALL (SELECT message_id, flags \nFROM zerver_usermessage \nWHERE user_profile_id = {hamlet_id} AND message_id >= 100 ORDER BY message_id ASC \n LIMIT 11)) AS anon_1 ORDER BY message_id ASC' | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 100, 'num_before': 10, 'num_after': 10}, sql) |  |  |  |         self.common_check_get_messages_query({'anchor': 100, 'num_before': 10, 'num_after': 10}, sql) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_narrow_queries(self): |  |  |  |     def test_get_messages_with_narrow_queries(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         query_ids = self.get_query_ids() |  |  |  |         query_ids = self.get_query_ids() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND (sender_id = {othello_id} AND recipient_id = {hamlet_recipient} OR sender_id = {hamlet_id} AND recipient_id = {othello_recipient}) AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' |  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND (sender_id = {othello_id} AND recipient_id = {hamlet_recipient} OR sender_id = {hamlet_id} AND recipient_id = {othello_recipient}) AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, |  |  |  |         self.common_check_get_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                   'narrow': '[["pm-with", "othello@zulip.com"]]'}, |  |  |  |                                               'narrow': '[["pm-with", "othello@zulip.com"]]'}, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                  sql) |  |  |  |                                              sql) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND (flags & 2) != 0 AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' |  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND (flags & 2) != 0 AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, |  |  |  |         self.common_check_get_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                   'narrow': '[["is", "starred"]]'}, |  |  |  |                                               'narrow': '[["is", "starred"]]'}, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                  sql) |  |  |  |                                              sql) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND sender_id = {othello_id} AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' |  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND sender_id = {othello_id} AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, |  |  |  |         self.common_check_get_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                   'narrow': '[["sender", "othello@zulip.com"]]'}, |  |  |  |                                               'narrow': '[["sender", "othello@zulip.com"]]'}, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                  sql) |  |  |  |                                              sql) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = 'SELECT anon_1.message_id \nFROM (SELECT id AS message_id \nFROM zerver_message \nWHERE recipient_id = {scotland_recipient} AND zerver_message.id >= 0 ORDER BY zerver_message.id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' |  |  |  |         sql_template = 'SELECT anon_1.message_id \nFROM (SELECT id AS message_id \nFROM zerver_message \nWHERE recipient_id = {scotland_recipient} AND zerver_message.id >= 0 ORDER BY zerver_message.id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, |  |  |  |         self.common_check_get_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                   'narrow': '[["stream", "Scotland"]]'}, |  |  |  |                                               'narrow': '[["stream", "Scotland"]]'}, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                  sql) |  |  |  |                                              sql) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = "SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND upper(subject) = upper('blah') AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC" |  |  |  |         sql_template = "SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND upper(subject) = upper('blah') AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC" | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, |  |  |  |         self.common_check_get_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                   'narrow': '[["topic", "blah"]]'}, |  |  |  |                                               'narrow': '[["topic", "blah"]]'}, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                  sql) |  |  |  |                                              sql) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = "SELECT anon_1.message_id \nFROM (SELECT id AS message_id \nFROM zerver_message \nWHERE recipient_id = {scotland_recipient} AND upper(subject) = upper('blah') AND zerver_message.id >= 0 ORDER BY zerver_message.id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC" |  |  |  |         sql_template = "SELECT anon_1.message_id \nFROM (SELECT id AS message_id \nFROM zerver_message \nWHERE recipient_id = {scotland_recipient} AND upper(subject) = upper('blah') AND zerver_message.id >= 0 ORDER BY zerver_message.id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC" | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, |  |  |  |         self.common_check_get_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                   'narrow': '[["stream", "Scotland"], ["topic", "blah"]]'}, |  |  |  |                                               'narrow': '[["stream", "Scotland"], ["topic", "blah"]]'}, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                  sql) |  |  |  |                                              sql) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         # Narrow to pms with yourself |  |  |  |         # Narrow to pms with yourself | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND sender_id = {hamlet_id} AND recipient_id = {hamlet_recipient} AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' |  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND sender_id = {hamlet_id} AND recipient_id = {hamlet_recipient} AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, |  |  |  |         self.common_check_get_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                   'narrow': '[["pm-with", "hamlet@zulip.com"]]'}, |  |  |  |                                               'narrow': '[["pm-with", "hamlet@zulip.com"]]'}, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                  sql) |  |  |  |                                              sql) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND recipient_id = {scotland_recipient} AND (flags & 2) != 0 AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' |  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags \nFROM (SELECT message_id, flags \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND recipient_id = {scotland_recipient} AND (flags & 2) != 0 AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, |  |  |  |         self.common_check_get_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                   'narrow': '[["stream", "Scotland"], ["is", "starred"]]'}, |  |  |  |                                               'narrow': '[["stream", "Scotland"], ["is", "starred"]]'}, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                  sql) |  |  |  |                                              sql) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     @override_settings(USING_PGROONGA=False) |  |  |  |     @override_settings(USING_PGROONGA=False) | 
			
		
	
		
		
			
				
					
					|  |  |  |     def test_get_old_messages_with_search_queries(self): |  |  |  |     def test_get_messages_with_search_queries(self): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         # type: () -> None |  |  |  |         # type: () -> None | 
			
		
	
		
		
			
				
					
					|  |  |  |         query_ids = self.get_query_ids() |  |  |  |         query_ids = self.get_query_ids() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = "SELECT anon_1.message_id, anon_1.flags, anon_1.subject, anon_1.rendered_content, anon_1.content_matches, anon_1.subject_matches \nFROM (SELECT message_id, flags, subject, rendered_content, ts_match_locs_array('zulip.english_us_search', rendered_content, plainto_tsquery('zulip.english_us_search', 'jumping')) AS content_matches, ts_match_locs_array('zulip.english_us_search', escape_html(subject), plainto_tsquery('zulip.english_us_search', 'jumping')) AS subject_matches \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND (search_tsvector @@ plainto_tsquery('zulip.english_us_search', 'jumping')) AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC" # type: Text |  |  |  |         sql_template = "SELECT anon_1.message_id, anon_1.flags, anon_1.subject, anon_1.rendered_content, anon_1.content_matches, anon_1.subject_matches \nFROM (SELECT message_id, flags, subject, rendered_content, ts_match_locs_array('zulip.english_us_search', rendered_content, plainto_tsquery('zulip.english_us_search', 'jumping')) AS content_matches, ts_match_locs_array('zulip.english_us_search', escape_html(subject), plainto_tsquery('zulip.english_us_search', 'jumping')) AS subject_matches \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND (search_tsvector @@ plainto_tsquery('zulip.english_us_search', 'jumping')) AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC" # type: Text | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, |  |  |  |         self.common_check_get_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                   'narrow': '[["search", "jumping"]]'}, |  |  |  |                                               'narrow': '[["search", "jumping"]]'}, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                  sql) |  |  |  |                                              sql) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = "SELECT anon_1.message_id, anon_1.subject, anon_1.rendered_content, anon_1.content_matches, anon_1.subject_matches \nFROM (SELECT id AS message_id, subject, rendered_content, ts_match_locs_array('zulip.english_us_search', rendered_content, plainto_tsquery('zulip.english_us_search', 'jumping')) AS content_matches, ts_match_locs_array('zulip.english_us_search', escape_html(subject), plainto_tsquery('zulip.english_us_search', 'jumping')) AS subject_matches \nFROM zerver_message \nWHERE recipient_id = {scotland_recipient} AND (search_tsvector @@ plainto_tsquery('zulip.english_us_search', 'jumping')) AND zerver_message.id >= 0 ORDER BY zerver_message.id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC" |  |  |  |         sql_template = "SELECT anon_1.message_id, anon_1.subject, anon_1.rendered_content, anon_1.content_matches, anon_1.subject_matches \nFROM (SELECT id AS message_id, subject, rendered_content, ts_match_locs_array('zulip.english_us_search', rendered_content, plainto_tsquery('zulip.english_us_search', 'jumping')) AS content_matches, ts_match_locs_array('zulip.english_us_search', escape_html(subject), plainto_tsquery('zulip.english_us_search', 'jumping')) AS subject_matches \nFROM zerver_message \nWHERE recipient_id = {scotland_recipient} AND (search_tsvector @@ plainto_tsquery('zulip.english_us_search', 'jumping')) AND zerver_message.id >= 0 ORDER BY zerver_message.id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC" | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, |  |  |  |         self.common_check_get_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                   'narrow': '[["stream", "Scotland"], ["search", "jumping"]]'}, |  |  |  |                                               'narrow': '[["stream", "Scotland"], ["search", "jumping"]]'}, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                  sql) |  |  |  |                                              sql) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags, anon_1.subject, anon_1.rendered_content, anon_1.content_matches, anon_1.subject_matches \nFROM (SELECT message_id, flags, subject, rendered_content, ts_match_locs_array(\'zulip.english_us_search\', rendered_content, plainto_tsquery(\'zulip.english_us_search\', \'"jumping" quickly\')) AS content_matches, ts_match_locs_array(\'zulip.english_us_search\', escape_html(subject), plainto_tsquery(\'zulip.english_us_search\', \'"jumping" quickly\')) AS subject_matches \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND (content ILIKE \'%jumping%\' OR subject ILIKE \'%jumping%\') AND (search_tsvector @@ plainto_tsquery(\'zulip.english_us_search\', \'"jumping" quickly\')) AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' |  |  |  |         sql_template = 'SELECT anon_1.message_id, anon_1.flags, anon_1.subject, anon_1.rendered_content, anon_1.content_matches, anon_1.subject_matches \nFROM (SELECT message_id, flags, subject, rendered_content, ts_match_locs_array(\'zulip.english_us_search\', rendered_content, plainto_tsquery(\'zulip.english_us_search\', \'"jumping" quickly\')) AS content_matches, ts_match_locs_array(\'zulip.english_us_search\', escape_html(subject), plainto_tsquery(\'zulip.english_us_search\', \'"jumping" quickly\')) AS subject_matches \nFROM zerver_usermessage JOIN zerver_message ON zerver_usermessage.message_id = zerver_message.id \nWHERE user_profile_id = {hamlet_id} AND (content ILIKE \'%jumping%\' OR subject ILIKE \'%jumping%\') AND (search_tsvector @@ plainto_tsquery(\'zulip.english_us_search\', \'"jumping" quickly\')) AND message_id >= 0 ORDER BY message_id ASC \n LIMIT 10) AS anon_1 ORDER BY message_id ASC' | 
			
		
	
		
		
			
				
					
					|  |  |  |         sql = sql_template.format(**query_ids) |  |  |  |         sql = sql_template.format(**query_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.common_check_get_old_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, |  |  |  |         self.common_check_get_messages_query({'anchor': 0, 'num_before': 0, 'num_after': 10, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                   'narrow': '[["search", "\\"jumping\\" quickly"]]'}, |  |  |  |                                               'narrow': '[["search", "\\"jumping\\" quickly"]]'}, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                                                  sql) |  |  |  |                                              sql) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
	
		
		
			
				
					
					| 
						
						
						
						 |  |   |