* invitatations table and model build and tested

This commit is contained in:
Seth Call 2012-10-26 05:33:39 -05:00
parent a8f46f8d7d
commit 9ab04a7e74
7 changed files with 83 additions and 5 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -13,15 +13,18 @@ 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
before_save { |user| user.email = email.downcase }

View File

@ -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

View File

@ -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