Created
May 3, 2014 15:18
-
-
Save koleksiuk/ac261f78727c6ce32e4a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Message | |
class Starred | |
attr_accessor :user, :message | |
InvalidUserError = Class.new(StandardError) | |
def initialize(user, message) | |
self.user = user | |
self.message = message | |
raise ArgumentError.new('User & message must be present') unless args_present? | |
end | |
def save | |
raise InvalidUserError.new("User can't star own message") if user_owns_message? | |
message.starred_by_users << user | |
end | |
def user_owns_message? | |
message.user_id == user.id | |
end | |
private | |
def args_present? | |
!user.nil? && !message.nil? | |
end | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'spec_helper' | |
describe Message::Starred do | |
let(:user_with_message) { double(:user, id: 1) } | |
let(:user) { double(:user, id: 2) } | |
let(:starred_by_users) { double(:collection) } | |
let(:message) { double(:message, user_id: 1, starred_by_users: starred_by_users) } | |
context 'when args are missing' do | |
it 'raises argument error for no user' do | |
expect { | |
described_class.new(nil, message) | |
}.to raise_error(ArgumentError) | |
end | |
it 'raises argument error for no message' do | |
expect { | |
described_class.new(user_with_message, nil) | |
}.to raise_error(ArgumentError) | |
end | |
end | |
describe '#save' do | |
let(:object) { described_class.new(user_context, message) } | |
context 'when user is an owner of message' do | |
let(:user_context) { user_with_message } | |
it 'raises error' do | |
expect { | |
object.save | |
}.to raise_error(described_class::InvalidUserError) | |
end | |
end | |
context 'when user is not an owner of message' do | |
let(:user_context) { user } | |
it 'stars the message by user' do | |
expect(starred_by_users).to receive(:<<).with(user) | |
object.save | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment