From de222ade4addc8d8bf16ead2d5383270aa76826c Mon Sep 17 00:00:00 2001 From: Chris Blanchard Date: Tue, 2 Jun 2015 17:55:08 +0100 Subject: [PATCH 1/2] Remove rcon from annotate and added message model specs --- spec/factories/ban.rb | 23 +++++++++++++++ spec/factories/message.rb | 9 ++++++ spec/models/message_spec.rb | 57 +++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 spec/factories/ban.rb create mode 100644 spec/factories/message.rb create mode 100644 spec/models/message_spec.rb 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 From 0bfd7939c0bdfd92e94058d20cbd33844fcc881b Mon Sep 17 00:00:00 2001 From: Chris Blanchard Date: Tue, 2 Jun 2015 18:50:41 +0100 Subject: [PATCH 2/2] Add recipient to messages --- app/views/messages/_message.html.erb | 4 +- spec/features/messages/user_messages.rb | 59 +++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 spec/features/messages/user_messages.rb diff --git a/app/views/messages/_message.html.erb b/app/views/messages/_message.html.erb index 8422028..aed367f 100644 --- a/app/views/messages/_message.html.erb +++ b/app/views/messages/_message.html.erb @@ -5,5 +5,5 @@

- <%= namelink message.sender %> on <%= longdate message.created_at %> -

+ To: <%= namelink message.recipient %> From: <%= namelink message.sender %> on <%= longdate message.created_at %> +

\ No newline at end of file diff --git a/spec/features/messages/user_messages.rb b/spec/features/messages/user_messages.rb new file mode 100644 index 0000000..7f43b7b --- /dev/null +++ b/spec/features/messages/user_messages.rb @@ -0,0 +1,59 @@ +require 'spec_helper' + +feature 'Message creation' do + let!(:sender) { create :user } + let!(:recipient) { create :user } + + background do + sign_in_as sender + end + + scenario 'User creates a message' do + visit root_path + within '.links' do + click_link 'Messages' + end + expect(page).to have_content('Sent (0)') + visit user_path(recipient) + expect(page).to have_content(recipient.username) + click_link 'Send PM' + expect(page).to have_content('New Message') + title = "This is my title" + message = "This is my message" + fill_in 'Title', with: title + fill_in 'Text', with: message + click_button 'Send Message' + expect(page).to have_content('Message was successfully sent.') + expect(page).to have_content(title) + expect(page).to have_content(message) + within '.links' do + click_link 'Messages' + end + expect(page).to have_content('Sent (1)') + within '#sent' do + expect(page).to have_content(title) + expect(page).to have_content(message) + expect(page).to have_content(sender.username) + expect(page).to have_content(recipient.username) + end + end +end + +feature 'Message receiving' do + let!(:message) { create :message } + + background do + sign_in_as message.recipient + end + + scenario 'User receives a message' do + visit root_path + within '.links' do + expect(page).to have_content('(1)') + click_link 'Messages' + end + expect(page).to have_content(message.title) + expect(page).to have_content(message.text) + expect(page).to have_content(message.sender.username) + end +end \ No newline at end of file