diff --git a/lib/jam_ruby/models/music_session_history.rb b/lib/jam_ruby/models/music_session_history.rb index c09a76be2..7c83e9e4f 100644 --- a/lib/jam_ruby/models/music_session_history.rb +++ b/lib/jam_ruby/models/music_session_history.rb @@ -34,6 +34,14 @@ module JamRuby return query end + def unique_users + User + .joins(:music_session_user_histories) + .group("users.id") + .order("users.id") + .where(%Q{ music_sessions_user_history.music_session_id = '#{music_session_id}'}) + end + def self.save(music_session) session_history = MusicSessionHistory.find_by_music_session_id(music_session.id) diff --git a/lib/jam_ruby/models/user.rb b/lib/jam_ruby/models/user.rb index d580c544c..23f888e6d 100644 --- a/lib/jam_ruby/models/user.rb +++ b/lib/jam_ruby/models/user.rb @@ -94,6 +94,7 @@ module JamRuby # session history has_many :music_session_histories, :foreign_key => "user_id", :class_name => "JamRuby::MusicSessionHistory" + has_many :music_session_user_histories, :foreign_key => "user_id", :class_name => "JamRuby::MusicSessionUserHistory" # saved tracks has_many :recorded_tracks, :foreign_key => "user_id", :class_name => "JamRuby::RecordedTrack", :inverse_of => :user diff --git a/spec/factories.rb b/spec/factories.rb index f91a3e9f0..ddac6d64b 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -30,8 +30,29 @@ FactoryGirl.define do approval_required false musician_access true legal_terms true + association :creator, :factory => :user + end - after(:create) { |session| MusicSessionHistory.save(session) } + factory :music_session_history, :class => JamRuby::MusicSessionHistory do + ignore do + music_session nil + end + + music_session_id { music_session.id } + description { music_session.description } + user_id { music_session.user_id } + band_id { music_session.band_id } + end + + factory :music_session_user_history, :class => JamRuby::MusicSessionUserHistory do + ignore do + history nil + user nil + end + + music_session_id { history.music_session_id } + user_id { user.id } + sequence(:client_id) { |n| "Connection #{n}" } end factory :connection, :class => JamRuby::Connection do diff --git a/spec/jam_ruby/models/music_session_history_spec.rb b/spec/jam_ruby/models/music_session_history_spec.rb new file mode 100644 index 000000000..260917687 --- /dev/null +++ b/spec/jam_ruby/models/music_session_history_spec.rb @@ -0,0 +1,28 @@ +require 'spec_helper' + +describe MusicSessionHistory do + + let(:some_user) { FactoryGirl.create(:user) } + let(:music_session) { FactoryGirl.create(:music_session) } + let(:history) { FactoryGirl.create(:music_session_history, :music_session => music_session) } + let(:user_history1) { FactoryGirl.create(:music_session_user_history, :history => history, :user => music_session.creator) } + let(:user_history2) { FactoryGirl.create(:music_session_user_history, :history => history, :user => some_user) } + + it "create" do + history.description.should eql(music_session.description) + end + + it "unique users" do + user_history1.should_not be_nil + user_history2.should_not be_nil + users = history.unique_users + + users.length.should eql(2) + + users.include?(some_user).should be_true + users.include?(music_session.creator).should be_true + end + +end + + diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index e8c095186..eeab8e42e 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -17,6 +17,9 @@ require 'spork' require 'database_cleaner' require 'factories' +# uncomment this to see active record logs +# ActiveRecord::Base.logger = Logger.new(STDOUT) if defined?(ActiveRecord::Base) + include JamRuby # manually register observers