147 lines
4.6 KiB
Ruby
147 lines
4.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe ConversationService do
|
|
opts = {
|
|
subject: "conversation subject",
|
|
message: {text: "conversation text"},
|
|
participant_ids: [bob.person.id]
|
|
}
|
|
conversation = alice.build_conversation(opts)
|
|
conversation.save
|
|
|
|
describe "#all_for_user" do
|
|
before do
|
|
opts = {
|
|
subject: "conversation subject 2",
|
|
message: {text: "conversation text 2"},
|
|
participant_ids: [bob.person.id]
|
|
}
|
|
@conversation = alice.build_conversation(opts)
|
|
@conversation.save!
|
|
sleep(1)
|
|
@date = @conversation.created_at
|
|
opts = {
|
|
subject: "conversation subject 3",
|
|
message: {text: "conversation text 3"},
|
|
participant_ids: [bob.person.id]
|
|
}
|
|
@conversation = alice.build_conversation(opts)
|
|
@conversation.save!
|
|
end
|
|
|
|
it "returns all conversations" do
|
|
expect(alice_conversation_service.all_for_user.length).to eq(2)
|
|
expect(bob_conversation_service.all_for_user.length).to eq(3)
|
|
end
|
|
|
|
it "returns all unread conversations" do
|
|
@conversation.conversation_visibilities[0].unread = true
|
|
@conversation.conversation_visibilities[0].save!
|
|
conversations = bob_conversation_service.all_for_user(unread: true)
|
|
expect(conversations.length).to eq(2)
|
|
end
|
|
|
|
it "returns conversation after a given date" do
|
|
conversations = bob_conversation_service.all_for_user(only_after: @date)
|
|
expect(conversations.length).to eq(2)
|
|
end
|
|
end
|
|
|
|
describe "#find!" do
|
|
it "returns the conversation, if it is the user's conversation" do
|
|
expect(bob_conversation_service.find!(conversation.guid)).to eq(
|
|
conversation
|
|
)
|
|
end
|
|
|
|
it "returns the conversation, if the user is recipient" do
|
|
expect(bob_conversation_service.find!(conversation.guid)).to eq(
|
|
conversation
|
|
)
|
|
end
|
|
|
|
it "raises RecordNotFound if the conversation cannot be found" do
|
|
expect {
|
|
alice_conversation_service.find!("unknown")
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
|
|
it "raises RecordNotFound if the user is not recipient" do
|
|
expect {
|
|
eve_conversation_service.find!(conversation.guid)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
end
|
|
|
|
describe "#build" do
|
|
it "creates the conversation for given user and recipients" do
|
|
new_conversation = alice_conversation_service.build(
|
|
"subject test",
|
|
"message test",
|
|
[bob.person.id]
|
|
)
|
|
expect(new_conversation.subject).to eq("subject test")
|
|
expect(new_conversation.author_id).to eq(alice.person.id)
|
|
expect(new_conversation.messages[0].text).to eq("message test")
|
|
expect(new_conversation.messages[0].author_id).to eq(alice.person.id)
|
|
expect(new_conversation.participants.length).to eq(2)
|
|
end
|
|
|
|
it "doesn't add recipients if they are not user contacts" do
|
|
new_conversation = alice_conversation_service.build(
|
|
"subject test",
|
|
"message test",
|
|
[bob.person.id, eve.person.id]
|
|
)
|
|
expect(new_conversation.participants.length).to eq(2)
|
|
expect(new_conversation.messages[0].text).to eq("message test")
|
|
expect(new_conversation.messages[0].author_id).to eq(alice.person.id)
|
|
end
|
|
end
|
|
|
|
describe "#get_visibility" do
|
|
it "returns visibility for current user" do
|
|
visibility = alice_conversation_service.get_visibility(conversation.guid)
|
|
expect(visibility).to_not be_nil
|
|
end
|
|
|
|
it "raises RecordNotFound if the user has no visibility" do
|
|
expect {
|
|
eve_conversation_service.get_visibility(conversation.id)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
end
|
|
|
|
describe "#destroy!" do
|
|
it "deletes the conversation, when it is the user conversation" do
|
|
alice_conversation_service.destroy!(conversation.guid)
|
|
expect {
|
|
alice_conversation_service.find!(conversation.guid)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
|
|
it "raises RecordNotFound if the conversation cannot be found" do
|
|
expect {
|
|
alice_conversation_service.destroy!("unknown")
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
|
|
it "raises RecordNotFound if the user is not part of the conversation" do
|
|
expect {
|
|
eve_conversation_service.destroy!(conversation.guid)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
end
|
|
|
|
def alice_conversation_service
|
|
ConversationService.new(alice)
|
|
end
|
|
|
|
def bob_conversation_service
|
|
ConversationService.new(bob)
|
|
end
|
|
|
|
def eve_conversation_service
|
|
ConversationService.new(eve)
|
|
end
|
|
end
|