diff --git a/spec/factories/ban.rb b/spec/factories/ban.rb new file mode 100644 index 0000000..81a5c7b --- /dev/null +++ b/spec/factories/ban.rb @@ -0,0 +1,23 @@ +FactoryGirl.define do + factory :ban do + ban_type Ban::TYPE_SITE + expiry Date.today + 1 + # Hack because of the awkward way bans are created (requires user_name) + before(:create) do |ban| + if ban.user.nil? + user = create :user + ban.user_name = user.username + else + ban.user_name = ban.user.username + end + end + end + + trait :mute do + ban_type Ban::TYPE_MUTE + end + + trait :expired do + expiry Date.yesterday - 1 + end +end \ No newline at end of file diff --git a/spec/factories/message.rb b/spec/factories/message.rb new file mode 100644 index 0000000..1f44662 --- /dev/null +++ b/spec/factories/message.rb @@ -0,0 +1,9 @@ +FactoryGirl.define do + factory :message do + association :sender, factory: :user + association :recipient, factory: :user + sequence(:text) { |n| "text-#{n}" } + sequence(:title) { |n| "title-#{n}" } + sequence(:text_parsed) { |n| "text-#{n}" } + end +end \ No newline at end of file diff --git a/spec/models/message_spec.rb b/spec/models/message_spec.rb new file mode 100644 index 0000000..b0aa6ef --- /dev/null +++ b/spec/models/message_spec.rb @@ -0,0 +1,57 @@ +# == Schema Information +# +# Table name: messages +# +# id :integer not null, primary key +# sender_type :string(255) +# sender_id :integer +# recipient_type :string(255) +# recipient_id :integer +# title :string(255) +# text :text +# created_at :datetime +# updated_at :datetime +# text_parsed :text +# + +require 'spec_helper' + +describe Message do + let!(:user) { create :user } + + describe 'create' do + let(:message) { build :message } + it 'creates a new message' do + expect(message.valid?).to be_true + expect do + message.save! + end.to change(Message, :count).by(1) + end + end + + describe 'Permissions' do + let(:message) { Message.new } + describe 'can_create?' do + it 'returns true for user' do + expect(message.can_create?(user)).to be_true + end + it 'returns false if user is banned' do + create :ban, :mute, user: user + expect(message.can_create?(user)).to be_false + end + end + + describe 'can_show?' do + let!(:message) { create :message } + it 'returns true if sender' do + expect(message.can_show?(message.sender)).to be_true + end + it 'returns true if receiver' do + expect(message.can_show?(message.recipient)).to be_true + end + it 'returns false if neither sender nor receiver' do + expect(message.can_show?(user)).to be_false + end + end + end +end \ No newline at end of file