mirror of
https://github.com/discourse/discourse.git
synced 2025-06-06 03:06:53 +08:00
FEATURE: Dismiss new and unread for PM inboxes.
This commit is contained in:
@ -2838,6 +2838,116 @@ RSpec.describe TopicsController do
|
||||
expect(TopicUser.get(post1.topic, post1.user).last_read_post_number).to eq(2)
|
||||
end
|
||||
|
||||
context "private message" do
|
||||
fab!(:user_2) { Fabricate(:user) }
|
||||
|
||||
fab!(:group) do
|
||||
Fabricate(:group, messageable_level: Group::ALIAS_LEVELS[:everyone]).tap do |g|
|
||||
g.add(user_2)
|
||||
end
|
||||
end
|
||||
|
||||
fab!(:group_message) do
|
||||
create_post(
|
||||
user: user,
|
||||
target_group_names: [group.name],
|
||||
archetype: Archetype.private_message
|
||||
).topic
|
||||
end
|
||||
|
||||
fab!(:private_message) do
|
||||
create_post(
|
||||
user: user,
|
||||
target_usernames: [user_2.username],
|
||||
archetype: Archetype.private_message
|
||||
).topic
|
||||
end
|
||||
|
||||
fab!(:group_pm_topic_user) do
|
||||
TopicUser.find_by(user: user_2, topic: group_message).tap do |tu|
|
||||
tu.update!(last_read_post_number: 1)
|
||||
end
|
||||
end
|
||||
|
||||
fab!(:regular_pm_topic_user) do
|
||||
TopicUser.find_by(user: user_2, topic: private_message).tap do |tu|
|
||||
tu.update!(last_read_post_number: 1)
|
||||
end
|
||||
end
|
||||
|
||||
before do
|
||||
create_post(user: user, topic: group_message)
|
||||
create_post(user: user, topic: private_message)
|
||||
sign_in(user_2)
|
||||
end
|
||||
|
||||
it "can dismiss all user and group private message topics" do
|
||||
expect do
|
||||
put "/topics/bulk.json", params: {
|
||||
filter: "unread",
|
||||
operation: { type: 'dismiss_posts' },
|
||||
private_message_inbox: "all"
|
||||
}
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
end.to change { group_pm_topic_user.reload.last_read_post_number }.from(1).to(2)
|
||||
.and change { regular_pm_topic_user.reload.last_read_post_number }.from(1).to(2)
|
||||
end
|
||||
|
||||
it "can dismiss all user unread private message topics" do
|
||||
expect do
|
||||
put "/topics/bulk.json", params: {
|
||||
filter: "unread",
|
||||
operation: { type: 'dismiss_posts' },
|
||||
private_message_inbox: "user"
|
||||
}
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
end.to change { regular_pm_topic_user.reload.last_read_post_number }.from(1).to(2)
|
||||
|
||||
expect(group_pm_topic_user.reload.last_read_post_number).to eq(1)
|
||||
end
|
||||
|
||||
it "returns the right response when trying to dismiss private messages of an invalid group" do
|
||||
put "/topics/bulk.json", params: {
|
||||
filter: "unread",
|
||||
operation: { type: 'dismiss_posts' },
|
||||
private_message_inbox: "group",
|
||||
group_name: 'randomgroup'
|
||||
}
|
||||
|
||||
expect(response.status).to eq(404)
|
||||
end
|
||||
|
||||
it "returns the right response when trying to dismiss private messages of a restricted group" do
|
||||
sign_in(user)
|
||||
|
||||
put "/topics/bulk.json", params: {
|
||||
filter: "unread",
|
||||
operation: { type: 'dismiss_posts' },
|
||||
private_message_inbox: "group",
|
||||
group_name: group.name
|
||||
}
|
||||
|
||||
expect(response.status).to eq(404)
|
||||
end
|
||||
|
||||
it "can dismiss all group unread private message topics" do
|
||||
expect do
|
||||
put "/topics/bulk.json", params: {
|
||||
filter: "unread",
|
||||
operation: { type: 'dismiss_posts' },
|
||||
private_message_inbox: "group",
|
||||
group_name: group.name
|
||||
}
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
end.to change { group_pm_topic_user.reload.last_read_post_number }.from(1).to(2)
|
||||
|
||||
expect(regular_pm_topic_user.reload.last_read_post_number).to eq(1)
|
||||
end
|
||||
end
|
||||
|
||||
it "can find unread" do
|
||||
# mark all unread muted
|
||||
put "/topics/bulk.json", params: {
|
||||
@ -4081,4 +4191,133 @@ RSpec.describe TopicsController do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#private_message_reset_new' do
|
||||
fab!(:user_2) { Fabricate(:user) }
|
||||
|
||||
fab!(:group) do
|
||||
Fabricate(:group, messageable_level: Group::ALIAS_LEVELS[:everyone]).tap do |g|
|
||||
g.add(user_2)
|
||||
end
|
||||
end
|
||||
|
||||
fab!(:group_message) do
|
||||
create_post(
|
||||
user: user,
|
||||
target_group_names: [group.name],
|
||||
archetype: Archetype.private_message
|
||||
).topic
|
||||
end
|
||||
|
||||
fab!(:private_message) do
|
||||
create_post(
|
||||
user: user,
|
||||
target_usernames: [user_2.username],
|
||||
archetype: Archetype.private_message
|
||||
).topic
|
||||
end
|
||||
|
||||
before do
|
||||
sign_in(user_2)
|
||||
end
|
||||
|
||||
it 'returns the right response when inbox param is missing' do
|
||||
put "/topics/pm-reset-new.json"
|
||||
|
||||
expect(response.status).to eq(400)
|
||||
end
|
||||
|
||||
it "returns the right response when trying to reset new private messages of an invalid group" do
|
||||
put "/topics/pm-reset-new.json", params: {
|
||||
inbox: "group",
|
||||
group_name: "randomgroup"
|
||||
}
|
||||
|
||||
expect(response.status).to eq(404)
|
||||
end
|
||||
|
||||
it "returns the right response when trying to reset new private messages of a restricted group" do
|
||||
sign_in(user)
|
||||
|
||||
put "/topics/pm-reset-new.json", params: {
|
||||
inbox: "group",
|
||||
group_name: group.name
|
||||
}
|
||||
|
||||
expect(response.status).to eq(404)
|
||||
end
|
||||
|
||||
it "can reset all new group private messages" do
|
||||
put "/topics/pm-reset-new.json", params: {
|
||||
inbox: "group",
|
||||
group_name: group.name
|
||||
}
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
|
||||
expect(DismissedTopicUser.count).to eq(1)
|
||||
|
||||
expect(DismissedTopicUser.exists?(topic: group_message, user: user_2))
|
||||
.to eq(true)
|
||||
end
|
||||
|
||||
it "can reset new personal private messages" do
|
||||
put "/topics/pm-reset-new.json", params: {
|
||||
inbox: "user",
|
||||
}
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
|
||||
expect(DismissedTopicUser.count).to eq(1)
|
||||
|
||||
expect(DismissedTopicUser.exists?(topic: private_message, user: user_2))
|
||||
.to eq(true)
|
||||
end
|
||||
|
||||
it 'can reset new personal and group private messages' do
|
||||
put "/topics/pm-reset-new.json", params: {
|
||||
inbox: "all",
|
||||
}
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
|
||||
expect(DismissedTopicUser.count).to eq(2)
|
||||
|
||||
expect(DismissedTopicUser.exists?(topic: private_message, user: user_2))
|
||||
.to eq(true)
|
||||
|
||||
expect(DismissedTopicUser.exists?(topic: group_message, user: user_2))
|
||||
.to eq(true)
|
||||
end
|
||||
|
||||
it 'returns the right response is topic_ids params is not valid' do
|
||||
put "/topics/pm-reset-new.json", params: {
|
||||
topic_ids: '1'
|
||||
}
|
||||
|
||||
expect(response.status).to eq(400)
|
||||
end
|
||||
|
||||
it 'can reset new private messages from given topic ids' do
|
||||
put "/topics/pm-reset-new.json", params: {
|
||||
topic_ids: [group_message.id, '12345']
|
||||
}
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
|
||||
expect(DismissedTopicUser.count).to eq(1)
|
||||
|
||||
expect(DismissedTopicUser.exists?(topic: group_message, user: user_2))
|
||||
.to eq(true)
|
||||
|
||||
put "/topics/pm-reset-new.json", params: {
|
||||
topic_ids: [private_message.id, '12345']
|
||||
}
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
|
||||
expect(DismissedTopicUser.exists?(topic: private_message, user: user_2))
|
||||
.to eq(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user