58 lines
2.4 KiB
Ruby
58 lines
2.4 KiB
Ruby
# Copyright (c) 2010-2011, Diaspora Inc. This file is
|
|
# licensed under the Affero General Public License version 3 or later. See
|
|
# the COPYRIGHT file.
|
|
|
|
describe Message, type: :model do
|
|
let(:create_hash) {
|
|
{
|
|
author: bob.person,
|
|
participant_ids: [bob.person.id, alice.person.id],
|
|
subject: "cool stuff",
|
|
messages_attributes: [{author: bob.person, text: "stuff"}]
|
|
}
|
|
}
|
|
let(:conversation) { Conversation.create!(create_hash) }
|
|
let(:message) { conversation.messages.first }
|
|
|
|
it "validates that the author is a participant in the conversation" do
|
|
message = Message.new(text: "yo", author: eve.person, conversation_id: conversation.id)
|
|
expect(message).not_to be_valid
|
|
end
|
|
|
|
describe "#subscribers" do
|
|
let(:cnv_hash) {
|
|
{
|
|
participant_ids: [local_luke.person, local_leia.person, remote_raphael].map(&:id),
|
|
subject: "cool story, bro",
|
|
messages_attributes: [{author: remote_raphael, text: "hey"}]
|
|
}
|
|
}
|
|
let(:local_conv) { Conversation.create(cnv_hash.merge(author: local_luke.person)) }
|
|
let(:remote_conv) { Conversation.create(cnv_hash.merge(author: remote_raphael)) }
|
|
|
|
it "returns all participants, if the conversation and the author is local" do
|
|
message = Message.create(author: local_luke.person, text: "yo", conversation: local_conv)
|
|
expect(message.subscribers).to match_array([local_luke.person, local_leia.person, remote_raphael])
|
|
end
|
|
|
|
it "returns all participants, if the author is local and the conversation is remote" do
|
|
message = Message.create(author: local_luke.person, text: "yo", conversation: remote_conv)
|
|
expect(message.subscribers).to match_array([local_luke.person, local_leia.person, remote_raphael])
|
|
end
|
|
|
|
it "returns only remote participants, if the conversation is local, but the author is remote" do
|
|
message = Message.create(author: remote_raphael, text: "yo", conversation: local_conv)
|
|
expect(message.subscribers).to match_array([remote_raphael])
|
|
end
|
|
end
|
|
|
|
describe "#increase_unread" do
|
|
it "increments the conversation visibility for the conversation" do
|
|
conf = ConversationVisibility.find_by(conversation_id: conversation.id, person_id: alice.person.id)
|
|
expect(conf.unread).to eq(0)
|
|
|
|
message.increase_unread(alice)
|
|
expect(conf.reload.unread).to eq(1)
|
|
end
|
|
end
|
|
end
|