diff --git a/zerver/tests/test_narrow.py b/zerver/tests/test_narrow.py index 1f5fdfe425..d7e8eee7e8 100644 --- a/zerver/tests/test_narrow.py +++ b/zerver/tests/test_narrow.py @@ -983,6 +983,42 @@ class GetOldMessagesTest(ZulipTestCase): self.assertEqual(link_search_result['messages'][0]['match_content'], '
') + def test_messages_in_narrow_for_non_search(self): + # type: () -> None + email = self.example_email("cordelia") + self.login(email) + + def send(content): + # type: (Text) -> int + msg_id = self.send_message( + sender_name=email, + raw_recipients="Verona", + message_type=Recipient.STREAM, + subject='test_topic', + content=content, + ) + return msg_id + + good_id = send('http://foo.com') + bad_id = send('no link here') + msg_ids = [good_id, bad_id] + send('http://bar.com but not in msg_ids') + + narrow = [ + dict(operator='has', operand='link'), + ] + + raw_params = dict(msg_ids=msg_ids, narrow=narrow) + params = {k: ujson.dumps(v) for k, v in raw_params.items()} + result = self.client_get('/json/messages/matches_narrow', params) + self.assert_json_success(result) + messages = result.json()['messages'] + self.assertEqual(len(list(messages.keys())), 1) + message = messages[str(good_id)] + self.assertIn('a href=', message['match_content']) + self.assertIn('http://foo.com', message['match_content']) + self.assertEqual(message['match_subject'], 'test_topic') + def test_get_messages_with_only_searching_anchor(self): # type: () -> None """ diff --git a/zerver/views/messages.py b/zerver/views/messages.py index 9124602ca7..a5366b998e 100644 --- a/zerver/views/messages.py +++ b/zerver/views/messages.py @@ -1198,8 +1198,19 @@ def messages_in_narrow_backend(request, user_profile, search_fields = dict() for row in query_result: - (message_id, subject, rendered_content, content_matches, subject_matches) = row - search_fields[message_id] = get_search_fields(rendered_content, subject, - content_matches, subject_matches) + message_id = row['message_id'] + subject = row['subject'] + rendered_content = row['rendered_content'] + + if 'content_matches' in row: + content_matches = row['content_matches'] + subject_matches = row['subject_matches'] + search_fields[message_id] = get_search_fields(rendered_content, subject, + content_matches, subject_matches) + else: + search_fields[message_id] = dict( + match_content=rendered_content, + match_subject=subject + ) return json_success({"messages": search_fields})