mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 22:13:26 +00:00
unread: Convert mark_topic_as_read to use stream IDs.
This is safer in its handling of potentially renamed streams.
This commit is contained in:
@@ -328,7 +328,7 @@ exports.register_topic_handlers = function () {
|
||||
|
||||
var topic = $(e.currentTarget).attr('data-topic-name');
|
||||
exports.hide_topic_popover();
|
||||
unread_ops.mark_topic_as_read(sub.name, topic);
|
||||
unread_ops.mark_topic_as_read(sub.stream_id, topic);
|
||||
e.stopPropagation();
|
||||
});
|
||||
};
|
||||
|
||||
@@ -126,11 +126,11 @@ exports.mark_stream_as_read = function mark_stream_as_read(stream_id, cont) {
|
||||
success: cont});
|
||||
};
|
||||
|
||||
exports.mark_topic_as_read = function mark_topic_as_read(stream, topic, cont) {
|
||||
exports.mark_topic_as_read = function mark_topic_as_read(stream_id, topic, cont) {
|
||||
channel.post({
|
||||
url: '/json/mark_topic_as_read',
|
||||
idempotent: true,
|
||||
data: {stream_name: stream, topic_name: topic},
|
||||
data: {stream_id: stream_id, topic_name: topic},
|
||||
success: cont});
|
||||
};
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ from __future__ import absolute_import
|
||||
from typing import Any, Dict, List, Mapping
|
||||
|
||||
from zerver.models import (
|
||||
get_user, Recipient, UserMessage
|
||||
get_user, Recipient, UserMessage, get_stream, get_realm
|
||||
)
|
||||
|
||||
from zerver.lib.test_helpers import tornado_redirected_to_list
|
||||
@@ -262,12 +262,12 @@ class UnreadCountTests(ZulipTestCase):
|
||||
def test_mark_all_topics_unread_with_invalid_stream_name(self):
|
||||
# type: () -> None
|
||||
self.login(self.example_email("hamlet"))
|
||||
invalid_stream_name = "bogus"
|
||||
invalid_stream_id = "12345678"
|
||||
result = self.client_post("/json/mark_topic_as_read", {
|
||||
"stream_name": invalid_stream_name,
|
||||
"stream_id": invalid_stream_id,
|
||||
'topic_name': 'whatever',
|
||||
})
|
||||
self.assert_json_error(result, "No such stream 'bogus'")
|
||||
self.assert_json_error(result, "Invalid stream id")
|
||||
|
||||
def test_mark_all_in_stream_topic_read(self):
|
||||
# type: () -> None
|
||||
@@ -280,7 +280,7 @@ class UnreadCountTests(ZulipTestCase):
|
||||
events = [] # type: List[Mapping[str, Any]]
|
||||
with tornado_redirected_to_list(events):
|
||||
result = self.client_post("/json/mark_topic_as_read", {
|
||||
"stream_name": "test_stream",
|
||||
"stream_id": get_stream("test_stream", user_profile.realm).id,
|
||||
"topic_name": "test_topic",
|
||||
})
|
||||
|
||||
@@ -312,7 +312,7 @@ class UnreadCountTests(ZulipTestCase):
|
||||
self.login(self.example_email("hamlet"))
|
||||
invalid_topic_name = "abc"
|
||||
result = self.client_post("/json/mark_topic_as_read", {
|
||||
"stream_name": "Denmark",
|
||||
"stream_id": get_stream("Denmark", get_realm("zulip")).id,
|
||||
"topic_name": invalid_topic_name,
|
||||
})
|
||||
self.assert_json_error(result, 'No such topic \'abc\'')
|
||||
|
||||
@@ -35,7 +35,7 @@ from zerver.lib.message import (
|
||||
)
|
||||
from zerver.lib.response import json_success, json_error
|
||||
from zerver.lib.sqlalchemy_utils import get_sqlalchemy_connection
|
||||
from zerver.lib.streams import is_public_stream_by_name
|
||||
from zerver.lib.streams import access_stream_by_id, is_public_stream_by_name
|
||||
from zerver.lib.timestamp import datetime_to_timestamp
|
||||
from zerver.lib.utils import statsd
|
||||
from zerver.lib.validator import \
|
||||
@@ -815,18 +815,14 @@ def mark_stream_as_read(request,
|
||||
@has_request_variables
|
||||
def mark_topic_as_read(request,
|
||||
user_profile,
|
||||
stream_name=REQ(),
|
||||
stream_id=REQ(validator=check_int),
|
||||
topic_name=REQ()):
|
||||
# type: (HttpRequest, UserProfile, Text, Text) -> HttpResponse
|
||||
try:
|
||||
stream = get_stream(stream_name, user_profile.realm)
|
||||
except Stream.DoesNotExist:
|
||||
raise JsonableError(_('No such stream \'%s\'') % (stream_name,))
|
||||
# type: (HttpRequest, UserProfile, int, Text) -> HttpResponse
|
||||
stream, recipient, sub = access_stream_by_id(user_profile, stream_id)
|
||||
|
||||
if topic_name:
|
||||
topic_exists = UserMessage.objects.filter(user_profile=user_profile,
|
||||
message__recipient__type_id=stream.id,
|
||||
message__recipient__type=Recipient.STREAM,
|
||||
message__recipient=recipient,
|
||||
message__subject__iexact=topic_name).exists()
|
||||
if not topic_exists:
|
||||
raise JsonableError(_('No such topic \'%s\'') % (topic_name,))
|
||||
|
||||
Reference in New Issue
Block a user