* invitatations table and model build and tested
This commit is contained in:
parent
a8f46f8d7d
commit
9ab04a7e74
|
|
@ -17,6 +17,7 @@ require "jam_ruby/models/band"
|
|||
require "jam_ruby/models/connection"
|
||||
require "jam_ruby/models/friendship"
|
||||
require "jam_ruby/models/music_session"
|
||||
require "jam_ruby/models/invitation"
|
||||
require "jam_ruby/models/friend_request"
|
||||
|
||||
include Jampb
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ module JamRuby
|
|||
|
||||
self.primary_key = 'id'
|
||||
|
||||
belongs_to :user, :class_name => "JamRuby::User"
|
||||
belongs_to :friend, :class_name => "JamRuby::User"
|
||||
belongs_to :user, :class_name => "JamRuby::User", :foreign_key => "user_id", :inverse_of => :inverse_friendships
|
||||
belongs_to :friend, :class_name => "JamRuby::User", :foreign_key => "friend_id", :inverse_of => :friendships
|
||||
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
module JamRuby
|
||||
class Invitation < ActiveRecord::Base
|
||||
|
||||
FRIENDSHIP_REQUIRED_VALIDATION_ERROR = "You can only invite friends"
|
||||
|
||||
self.primary_key = 'id'
|
||||
belongs_to :sender, :inverse_of => :sent_invitations, :class_name => "JamRuby::User", :foreign_key => "sender_id"
|
||||
belongs_to :receiver, :inverse_of => :received_invitations, :class_name => "JamRuby::User", :foreign_key => "receiver_id"
|
||||
belongs_to :music_session, :inverse_of => :invitations, :class_name => "JamRuby::MusicSession"
|
||||
|
||||
validates :sender, :presence => true
|
||||
validates :receiver, :presence => true
|
||||
validates :music_session, :presence => true
|
||||
|
||||
validate :require_are_friends
|
||||
|
||||
private
|
||||
|
||||
def require_are_friends
|
||||
unless receiver.friends.exists? sender
|
||||
errors.add(:receiver, FRIENDSHIP_REQUIRED_VALIDATION_ERROR)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -8,6 +8,8 @@ module JamRuby
|
|||
has_many :users, :through => :connections, :class_name => "JamRuby::User"
|
||||
has_and_belongs_to_many :genres, :class_name => "::JamRuby::Genre", :join_table => "genres_music_sessions"
|
||||
|
||||
has_many :invitations, :foreign_key => "music_session_id", :inverse_of => :music_session, :class_name => "JamRuby::Invitation"
|
||||
|
||||
after_save :require_at_least_one_genre, :limit_to_three_genres
|
||||
|
||||
# Verifies that the specified user can join this jam session
|
||||
|
|
|
|||
|
|
@ -13,14 +13,17 @@ module JamRuby
|
|||
|
||||
has_many :friend_requests, :class_name => "JamRuby::FriendRequest"
|
||||
|
||||
has_many :friendships, :class_name => "JamRuby::Friendship"
|
||||
has_many :friends, :through => :friendships, :class_name => "JamRuby::Friend"
|
||||
has_many :friendships, :class_name => "JamRuby::Friendship", :foreign_key => "user_id"
|
||||
has_many :friends, :through => :friendships, :class_name => "JamRuby::User"
|
||||
has_many :inverse_friendships, :class_name => "JamRuby::Friendship", :foreign_key => "friend_id"
|
||||
has_many :inverse_friends, :through => :inverse_friendships, :source => :user, :class_name => "JamRuby::Friend"
|
||||
has_many :inverse_friends, :through => :inverse_friendships, :source => :user, :class_name => "JamRuby::User"
|
||||
|
||||
has_many :music_session_clients, :class_name => "JamRuby::MusicSessionClient"
|
||||
has_many :created_music_sessions, :foreign_key => "user_id", :inverse_of => :user, :class_name => "JamRuby::MusicSession" # sessions *created* by the user
|
||||
has_many :music_sessions, :through => :music_session_clients, :class_name => "JamRuby::MusicSession"
|
||||
|
||||
has_many :received_invitations, :foreign_key => "receiver_id", :inverse_of => :receiver, :class_name => "JamRuby::Invitation"
|
||||
has_many :sent_invitations, :foreign_key => "sender_id", :inverse_of => :sender, :class_name => "JamRuby::Invitation"
|
||||
|
||||
has_secure_password
|
||||
|
||||
|
|
|
|||
|
|
@ -17,4 +17,12 @@ FactoryGirl.define do
|
|||
factory :connection, :class => JamRuby::Connection do
|
||||
|
||||
end
|
||||
|
||||
factory :invitation, :class => JamRuby::Invitation do
|
||||
|
||||
end
|
||||
|
||||
factory :friendship, :class => JamRuby::Friendship do
|
||||
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe MusicSession do
|
||||
|
||||
it 'cant create invitation to non-friend' do
|
||||
|
||||
user1 = FactoryGirl.create(:user) # in the jam session
|
||||
user2 = FactoryGirl.create(:user) # in the jam session
|
||||
|
||||
music_session = FactoryGirl.create(:music_session, :creator => user1)
|
||||
|
||||
music_session_member1 = FactoryGirl.create(:connection, :user => user1, :music_session => music_session, :ip_address => "1.1.1.1", :client_id => "1")
|
||||
music_session_member2 = FactoryGirl.create(:connection, :user => user2, :music_session => music_session, :ip_address => "2.2.2.2", :client_id => "2")
|
||||
|
||||
invitation = Invitation.new(:sender => user1, :receiver => user2, :music_session => music_session)
|
||||
|
||||
invitation.save.should == false
|
||||
invitation.errors.size.should == 1
|
||||
invitation.errors.get(:receiver).should == [Invitation::FRIENDSHIP_REQUIRED_VALIDATION_ERROR]
|
||||
end
|
||||
|
||||
it 'can create invitation to friend' do
|
||||
|
||||
user1 = FactoryGirl.create(:user) # in the jam session
|
||||
user2 = FactoryGirl.create(:user) # in the jam session
|
||||
|
||||
music_session = FactoryGirl.create(:music_session, :creator => user1)
|
||||
|
||||
music_session_member1 = FactoryGirl.create(:connection, :user => user1, :music_session => music_session, :ip_address => "1.1.1.1", :client_id => "1")
|
||||
music_session_member2 = FactoryGirl.create(:connection, :user => user2, :music_session => music_session, :ip_address => "2.2.2.2", :client_id => "2")
|
||||
|
||||
FactoryGirl.create(:friendship, :user => user1, :friend => user2)
|
||||
FactoryGirl.create(:friendship, :user => user2, :friend => user1)
|
||||
|
||||
invitation = Invitation.new(:sender => user1, :receiver => user2, :music_session => music_session)
|
||||
|
||||
invitation.save.should == true
|
||||
end
|
||||
end
|
||||
Loading…
Reference in New Issue