diff --git a/ruby/spec/jam_ruby/models/active_music_session_spec.rb b/ruby/spec/jam_ruby/models/active_music_session_spec.rb index 8b8463f39..5eff325df 100644 --- a/ruby/spec/jam_ruby/models/active_music_session_spec.rb +++ b/ruby/spec/jam_ruby/models/active_music_session_spec.rb @@ -12,13 +12,13 @@ describe ActiveMusicSession do describe "participant_create" do - let(:user) {FactoryGirl.create(:user)} + let(:user) { FactoryGirl.create(:user) } it "fails gracefully when no connection" do music_session = FactoryGirl.create(:active_music_session, :creator => user, :musician_access => false) begin - ActiveMusicSession.participant_create(user, music_session.id, "junk", true, nil, 5) + ActiveMusicSession.participant_create(user, music_session.id, "junk", true, nil, 5) false.should be_true rescue JamRuby::JamRecordNotFound => e e.record_type.should eql "Connection" @@ -30,7 +30,7 @@ describe ActiveMusicSession do it "succeeds no active music session" do music_session = FactoryGirl.create(:music_session, :creator => user, :musician_access => false) conn = FactoryGirl.create(:connection, :user => user) - connection = ActiveMusicSession.participant_create(user, music_session.id, conn.client_id, true, nil, 5) + connection = ActiveMusicSession.participant_create(user, music_session.id, conn.client_id, true, nil, 5) connection.errors.any?.should be false ActiveMusicSession.find(music_session.id) end @@ -38,14 +38,14 @@ describe ActiveMusicSession do it "fails gracefully when invalid music session Id" do music_session = FactoryGirl.create(:active_music_session, :creator => user, :musician_access => false) conn = FactoryGirl.create(:connection, :user => user) - expect { ActiveMusicSession.participant_create(user, 'bad music session ID', conn.client_id, true, nil, 5) }.to raise_error(ActiveRecord::RecordNotFound) + expect { ActiveMusicSession.participant_create(user, 'bad music session ID', conn.client_id, true, nil, 5) }.to raise_error(ActiveRecord::RecordNotFound) end it "pulls out of other session" do music_session1 = FactoryGirl.create(:active_music_session, :creator => user, :musician_access => false) music_session2 = FactoryGirl.create(:active_music_session, :creator => user, :musician_access => false) conn = FactoryGirl.create(:connection, :user => user, music_session: music_session2) - connection = ActiveMusicSession.participant_create(user, music_session1.id, conn.client_id, true, nil, 5) + connection = ActiveMusicSession.participant_create(user, music_session1.id, conn.client_id, true, nil, 5) connection.should eql conn connection.errors.any?.should be true end @@ -54,7 +54,7 @@ describe ActiveMusicSession do music_session1 = FactoryGirl.create(:active_music_session, :creator => user, :musician_access => false) conn = FactoryGirl.create(:connection) ActiveRecord::Base.connection.execute("update connections set user_id = NULL where connections.id = '#{conn.id}'") - expect { ActiveMusicSession.participant_create(user, music_session1.id, conn.client_id, true, nil, 5) }.to raise_error(JamRuby::JamPermissionError) + expect { ActiveMusicSession.participant_create(user, music_session1.id, conn.client_id, true, nil, 5) }.to raise_error(JamRuby::JamPermissionError) end end @@ -305,10 +305,10 @@ describe ActiveMusicSession do describe "index(as_musician: false)" do let(:fan_access) { true } let(:creator) { FactoryGirl.create(:user) } - let(:session) { FactoryGirl.create(:active_music_session, creator: creator, fan_access: fan_access ) } + let(:session) { FactoryGirl.create(:active_music_session, creator: creator, fan_access: fan_access) } let(:connection) { FactoryGirl.create(:connection, user: creator, :music_session => session) } - let(:user) {FactoryGirl.create(:user) } + let(:user) { FactoryGirl.create(:user) } describe "no mount" do @@ -422,25 +422,25 @@ describe ActiveMusicSession do Friendship.save_using_models(creator, creator2) - music_sessions = ActiveMusicSession.friend_active_index(creator, {}).take(100) - music_sessions.should_not be_nil - music_sessions.length.should == 2 + music_sessions = ActiveMusicSession.friend_active_index(creator, {}).take(100) + music_sessions.should_not be_nil + music_sessions.length.should == 2 end describe "parameters" do let(:creator_1) { FactoryGirl.create(:user, last_jam_locidispid: 4, last_jam_audio_latency: 8) } - let(:creator_conn_1) { FactoryGirl.create(:connection, user: creator_1, ip_address: '4.4.4.4', locidispid: 4, addr:4) } + let(:creator_conn_1) { FactoryGirl.create(:connection, user: creator_1, ip_address: '4.4.4.4', locidispid: 4, addr: 4) } let(:creator_2) { FactoryGirl.create(:user, last_jam_locidispid: 1, last_jam_audio_latency: 10) } - let(:creator_conn_2) { FactoryGirl.create(:connection, user: creator_2, ip_address: '4.4.4.4', locidispid: 1, addr:1) } + let(:creator_conn_2) { FactoryGirl.create(:connection, user: creator_2, ip_address: '4.4.4.4', locidispid: 1, addr: 1) } let(:creator_3) { FactoryGirl.create(:user, last_jam_locidispid: 2, last_jam_audio_latency: 12) } - let(:creator_conn_3) { FactoryGirl.create(:connection, user: creator_3, ip_address: '5.5.5.5', locidispid: 2, addr:2) } + let(:creator_conn_3) { FactoryGirl.create(:connection, user: creator_3, ip_address: '5.5.5.5', locidispid: 2, addr: 2) } let(:searcher_1) { FactoryGirl.create(:user, last_jam_locidispid: 5, last_jam_audio_latency: 6) } - let(:searcher_conn_1) { FactoryGirl.create(:connection, user: searcher_1, ip_address: '8.8.8.8', locidispid: 5, addr:5) } + let(:searcher_conn_1) { FactoryGirl.create(:connection, user: searcher_1, ip_address: '8.8.8.8', locidispid: 5, addr: 5) } let(:searcher_2) { FactoryGirl.create(:user, last_jam_locidispid: 3, last_jam_audio_latency: 14) } - let(:searcher_conn_2) { FactoryGirl.create(:connection, user: searcher_2, ip_address: '9.9.9.9', locidispid: 3, addr:3) } + let(:searcher_conn_2) { FactoryGirl.create(:connection, user: searcher_2, ip_address: '9.9.9.9', locidispid: 3, addr: 3) } - let!(:music_session_1) { FactoryGirl.create(:active_music_session, :creator => creator_1, genre: Genre.find('african'), language: 'eng', description: "Bunny Jumps" ) } + let!(:music_session_1) { FactoryGirl.create(:active_music_session, :creator => creator_1, genre: Genre.find('african'), language: 'eng', description: "Bunny Jumps") } let!(:music_session_2) { FactoryGirl.create(:active_music_session, :creator => creator_2, genre: Genre.find('ambient'), language: 'spa', description: "Play with us as we jam to beatles and bunnies") } let(:tracks) { [{'sound' => 'mono', 'client_track_id' => 'abc', 'instrument_id' => 'piano'}] } @@ -464,8 +464,8 @@ describe ActiveMusicSession do music_sessions.length.should == 0 rsvp_slot = FactoryGirl.create(:rsvp_slot, music_session: music_session_1.music_session, instrument: Instrument.find('piano')) - rsvp_request = FactoryGirl.create(:rsvp_request, user: searcher_1, chosen:true, music_session: music_session_1.music_session) - rsvp_request_rsvp_slot = FactoryGirl.create(:rsvp_request_rsvp_slot, chosen:true, rsvp_request: rsvp_request, rsvp_slot:rsvp_slot) + rsvp_request = FactoryGirl.create(:rsvp_request, user: searcher_1, chosen: true, music_session: music_session_1.music_session) + rsvp_request_rsvp_slot = FactoryGirl.create(:rsvp_request_rsvp_slot, chosen: true, rsvp_request: rsvp_request, rsvp_slot: rsvp_slot) music_sessions = ActiveMusicSession.friend_active_index(searcher_1, {}) @@ -487,33 +487,33 @@ describe ActiveMusicSession do creator_conn_2.join_the_session(music_session_2.music_session, true, tracks, creator_2, 10) creator_conn_2.errors.any?.should be_false - music_sessions = ActiveMusicSession.friend_active_index(searcher_1, {}) - music_sessions.length.should == 2 - music_sessions[0].should == music_session_1.music_session + music_sessions = ActiveMusicSession.friend_active_index(searcher_1, {}) + music_sessions.length.should == 2 + music_sessions[0].should == music_session_1.music_session - music_sessions = ActiveMusicSession.friend_active_index(searcher_1, offset:0, limit:1) - music_sessions.length.should == 1 - music_sessions[0].should == music_session_1.music_session + music_sessions = ActiveMusicSession.friend_active_index(searcher_1, offset: 0, limit: 1) + music_sessions.length.should == 1 + music_sessions[0].should == music_session_1.music_session - music_sessions = ActiveMusicSession.friend_active_index(searcher_1, offset:1, limit:2) - music_sessions.length.should == 1 - music_sessions[0].should == music_session_2.music_session + music_sessions = ActiveMusicSession.friend_active_index(searcher_1, offset: 1, limit: 2) + music_sessions.length.should == 1 + music_sessions[0].should == music_session_2.music_session end it "genre" do # verify we can get all 2 sessions - music_sessions = ActiveMusicSession.friend_active_index(searcher_1, {}) - music_sessions.length.should == 2 + music_sessions = ActiveMusicSession.friend_active_index(searcher_1, {}) + music_sessions.length.should == 2 # get only african - music_sessions = ActiveMusicSession.friend_active_index(searcher_1, genre: 'african') - music_sessions.length.should == 1 - music_sessions[0].genre.should == Genre.find('african') + music_sessions = ActiveMusicSession.friend_active_index(searcher_1, genre: 'african') + music_sessions.length.should == 1 + music_sessions[0].genre.should == Genre.find('african') # get only ambient - music_sessions = ActiveMusicSession.friend_active_index(searcher_1, genre: 'ambient') - music_sessions.length.should == 1 - music_sessions[0].genre.should == Genre.find('ambient') + music_sessions = ActiveMusicSession.friend_active_index(searcher_1, genre: 'ambient') + music_sessions.length.should == 1 + music_sessions[0].genre.should == Genre.find('ambient') end it "language" do @@ -534,29 +534,29 @@ describe ActiveMusicSession do end it "keyword" do - music_sessions = ActiveMusicSession.friend_active_index(searcher_1, keyword: 'Jump') - music_sessions.length.should == 1 + music_sessions = ActiveMusicSession.friend_active_index(searcher_1, keyword: 'Jump') + music_sessions.length.should == 1 - music_sessions[0].should == music_session_1.music_session - music_sessions = ams(searcher_1, keyword: 'Bunny') - music_sessions.length.should == 2 + music_sessions[0].should == music_session_1.music_session + music_sessions = ams(searcher_1, keyword: 'Bunny') + music_sessions.length.should == 2 - music_sessions = ActiveMusicSession.friend_active_index(searcher_1, keyword: 'play') - music_sessions.length.should == 1 + music_sessions = ActiveMusicSession.friend_active_index(searcher_1, keyword: 'play') + music_sessions.length.should == 1 - music_sessions = ActiveMusicSession.friend_active_index(searcher_1, keyword: 'bun') - music_sessions.length.should == 2 + music_sessions = ActiveMusicSession.friend_active_index(searcher_1, keyword: 'bun') + music_sessions.length.should == 2 - music_sessions = ActiveMusicSession.friend_active_index(searcher_1, keyword: 'bunny play') - music_sessions.length.should == 1 + music_sessions = ActiveMusicSession.friend_active_index(searcher_1, keyword: 'bunny play') + music_sessions.length.should == 1 end end end end - describe "ams_index", no_transaction: true do + describe "ams_index", no_transaction: true do it "does not crash" do creator = FactoryGirl.create(:user, last_jam_locidispid: 1, last_jam_audio_latency: 5) @@ -619,17 +619,17 @@ describe ActiveMusicSession do describe "parameters" do let(:creator_1) { FactoryGirl.create(:user, last_jam_locidispid: 4, last_jam_audio_latency: 8) } - let(:creator_conn_1) { FactoryGirl.create(:connection, user: creator_1, ip_address: '4.4.4.4', locidispid: 4, addr:4) } + let(:creator_conn_1) { FactoryGirl.create(:connection, user: creator_1, ip_address: '4.4.4.4', locidispid: 4, addr: 4) } let(:creator_2) { FactoryGirl.create(:user, last_jam_locidispid: 1, last_jam_audio_latency: 10) } - let(:creator_conn_2) { FactoryGirl.create(:connection, user: creator_2, ip_address: '4.4.4.4', locidispid: 1, addr:1) } + let(:creator_conn_2) { FactoryGirl.create(:connection, user: creator_2, ip_address: '4.4.4.4', locidispid: 1, addr: 1) } let(:creator_3) { FactoryGirl.create(:user, last_jam_locidispid: 2, last_jam_audio_latency: 12) } - let(:creator_conn_3) { FactoryGirl.create(:connection, user: creator_3, ip_address: '5.5.5.5', locidispid: 2, addr:2) } + let(:creator_conn_3) { FactoryGirl.create(:connection, user: creator_3, ip_address: '5.5.5.5', locidispid: 2, addr: 2) } let(:searcher_1) { FactoryGirl.create(:user, last_jam_locidispid: 5, last_jam_audio_latency: 6) } - let(:searcher_conn_1) { FactoryGirl.create(:connection, user: searcher_1, ip_address: '8.8.8.8', locidispid: 5, addr:5) } + let(:searcher_conn_1) { FactoryGirl.create(:connection, user: searcher_1, ip_address: '8.8.8.8', locidispid: 5, addr: 5) } let(:searcher_2) { FactoryGirl.create(:user, last_jam_locidispid: 3, last_jam_audio_latency: 14) } - let(:searcher_conn_2) { FactoryGirl.create(:connection, user: searcher_2, ip_address: '9.9.9.9', locidispid: 3, addr:3) } + let(:searcher_conn_2) { FactoryGirl.create(:connection, user: searcher_2, ip_address: '9.9.9.9', locidispid: 3, addr: 3) } - let!(:music_session_1) { FactoryGirl.create(:active_music_session, :creator => creator_1, genre: Genre.find('african'), language: 'eng', description: "Bunny Jumps" ) } + let!(:music_session_1) { FactoryGirl.create(:active_music_session, :creator => creator_1, genre: Genre.find('african'), language: 'eng', description: "Bunny Jumps") } let!(:music_session_2) { FactoryGirl.create(:active_music_session, :creator => creator_2, genre: Genre.find('ambient'), language: 'spa', description: "Play with us as we jam to beatles and bunnies") } let(:good_network_score) { 20 } @@ -656,16 +656,17 @@ describe ActiveMusicSession do # grab just the 1st ActiveRecord::Base.transaction do - music_sessions, user_search = ams(searcher_1, client_id: searcher_conn_1.client_id, offset:0, limit:1) + music_sessions, user_search = ams(searcher_1, client_id: searcher_conn_1.client_id, offset: 0, limit: 1) music_sessions.length.should == 1 music_sessions[0].should == music_session_1.music_session end # then the second ActiveRecord::Base.transaction do - music_sessions, user_search = ams(searcher_1, client_id: searcher_conn_1.client_id, offset:1, limit:2) + music_sessions, user_search = ams(searcher_1, client_id: searcher_conn_1.client_id, offset: 1, limit: 2) music_sessions.length.should == 1 - music_sessions[0].should == music_session_2.music_session end + music_sessions[0].should == music_session_2.music_session + end end it "genre" do @@ -926,17 +927,17 @@ describe ActiveMusicSession do end describe "currently recording" do - before(:each) do - @recording = FactoryGirl.create(:recording, :music_session => @music_session, :owner => @user1) - end + before(:each) do + @recording = FactoryGirl.create(:recording, :music_session => @music_session, :owner => @user1) + end - it "is_recording? returns true if recording" do - @music_session.is_recording?.should be_true - end + it "is_recording? returns true if recording" do + @music_session.is_recording?.should be_true + end - it "stop_recording should return recording object if recording" do - @music_session.stop_recording.should == @recording - end + it "stop_recording should return recording object if recording" do + @music_session.stop_recording.should == @recording + end end describe "open a recording" do @@ -1078,8 +1079,8 @@ describe ActiveMusicSession do describe "join_the_session" do let(:creator_1) { FactoryGirl.create(:user, last_jam_locidispid: 4, last_jam_audio_latency: 8) } - let(:creator_conn_1) { FactoryGirl.create(:connection, user: creator_1, ip_address: '4.4.4.4', locidispid: 4, addr:4) } - let!(:music_session_1) { FactoryGirl.create(:active_music_session, :creator => creator_1, genre: Genre.find('african'), language: 'eng', description: "Bunny Jumps" ) } + let(:creator_conn_1) { FactoryGirl.create(:connection, user: creator_1, ip_address: '4.4.4.4', locidispid: 4, addr: 4) } + let!(:music_session_1) { FactoryGirl.create(:active_music_session, :creator => creator_1, genre: Genre.find('african'), language: 'eng', description: "Bunny Jumps") } let(:tracks) { [{'sound' => 'mono', 'client_track_id' => 'abc', 'instrument_id' => 'piano'}] } let(:videos) { [{'client_video_source_id' => 'abc'}] } @@ -1090,8 +1091,8 @@ describe ActiveMusicSession do music_sessions = ActiveMusicSession.index(creator_1) music_sessions.should_not be_nil music_sessions.length.should == 1 - music_sessions[0].connections.should have(1).items - music_sessions[0].connections.should have(1).items + music_sessions[0].connections.should have(1).items + music_sessions[0].connections.should have(1).items music_sessions[0].connections[0].tracks.should have(1).items music_sessions[0].connections[0].video_sources.should have(0).items end @@ -1103,12 +1104,12 @@ describe ActiveMusicSession do music_sessions.should_not be_nil music_sessions.length.should == 1 creator_conn_1.video_sources.should have(1).items - music_sessions[0].connections.should have(1).items + music_sessions[0].connections.should have(1).items music_sessions[0].connections[0].video_sources.should have(1).items music_sessions[0].connections[0].tracks.should have(1).items end end - + describe "open_backing_track" do before(:each) do @user1 = FactoryGirl.create(:user) @@ -1119,7 +1120,7 @@ describe ActiveMusicSession do # @music_session.connections << @connection @music_session.save! @connection.join_the_session(@music_session, true, nil, @user1, 10) - @backing_track = "foo/bar.mp3" + @backing_track = "foo/bar.mp3" end it "allow a backing track to be associated" do @@ -1178,6 +1179,34 @@ describe ActiveMusicSession do end + describe "play_time_remaining" do + it "checks all" do + user = FactoryGirl.create(:user) + music_session = FactoryGirl.create(:active_music_session, :creator => user, :musician_access => false) + + user.subscription_plan_code = SubscriptionDefinitions::JAM_PLATINUM + music_session.play_time_remaining(user).should be_nil + + user.subscription_plan_code = SubscriptionDefinitions::JAM_PLATINUM_YEARLY + music_session.play_time_remaining(user).should be_nil + + user.subscription_plan_code = SubscriptionDefinitions::JAM_GOLD + music_session.play_time_remaining(user).should be_nil + + user.subscription_plan_code = SubscriptionDefinitions::JAM_GOLD_YEARLY + music_session.play_time_remaining(user).should be_nil + + user.subscription_plan_code = SubscriptionDefinitions::JAM_SILVER + music_session.play_time_remaining(user).should be_nil + + user.subscription_plan_code = SubscriptionDefinitions::JAM_SILVER_YEARLY + music_session.play_time_remaining(user).should be_nil + + user.subscription_plan_code = nil + music_session.play_time_remaining(user).should_not be_nil + end + end + describe "open_metronome" do before(:each) do @user1 = FactoryGirl.create(:user) @@ -1187,7 +1216,7 @@ describe ActiveMusicSession do @music_session = FactoryGirl.create(:active_music_session, :creator => @user1, :musician_access => true) # @music_session.connections << @connection @music_session.save! - @connection.join_the_session(@music_session, true, nil, @user1, 10) + @connection.join_the_session(@music_session, true, nil, @user1, 10) end it "allow a metronome to be activated" do @@ -1243,7 +1272,6 @@ describe ActiveMusicSession do end - it "one" do FactoryGirl.create(:active_music_session) ActiveMusicSession.stats.should eq('count' => 1, diff --git a/web/app/assets/javascripts/react-components/CurrentSubscription.js.jsx.coffee b/web/app/assets/javascripts/react-components/CurrentSubscription.js.jsx.coffee index b4454f560..540bc7a80 100644 --- a/web/app/assets/javascripts/react-components/CurrentSubscription.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/CurrentSubscription.js.jsx.coffee @@ -170,6 +170,7 @@ AppStore = context.AppStore desired_plan_name = `{this.getDisplayNameTier(this.props.subscription.desired_plan_code)}` admin_override_plan_name = `{this.getDisplayNameTier(this.props.subscription.admin_override_plan_code)}` in_trial = @props.subscription.in_trial + admin_override = @props.subscription.admin_override_plan_code? effective_is_free = !!this.props.subscription.plan_code has_pending_subscription = @props.subscription.subscription?.pending_subscription? cancelled_subscription = @props.subscription.subscription?.remaining_billing_cycles == 0 @@ -178,7 +179,9 @@ AppStore = context.AppStore #console.log("@props.subscription.subscription", @props.subscription.subscription, has_pending_subscription) - if in_trial + if admin_override + explanation = `You have a {effective_plan_name} account until your gifted plan ends {context.JK.formatDateShort(this.props.subscription.admin_override_ends_at)}.` + else if in_trial if @props.subscription.desired_plan_code if has_billing_info note = `Billing starts for the {desired_plan_name} plan after the trial ends.` diff --git a/web/app/assets/javascripts/react-components/stores/SessionStore.js.coffee b/web/app/assets/javascripts/react-components/stores/SessionStore.js.coffee index 64f1ab68a..e5fee293e 100644 --- a/web/app/assets/javascripts/react-components/stores/SessionStore.js.coffee +++ b/web/app/assets/javascripts/react-components/stores/SessionStore.js.coffee @@ -1100,6 +1100,7 @@ ConfigureTracksActions = @ConfigureTracksActions if @sessionRules.remaining_session_play_time? until_time = new Date() until_time = new Date(until_time.getTime() + @sessionRules.remaining_session_play_time * 1000) + console.log("subscription: session has remaining play time", until_time) @sessionRules.remaining_session_until = until_time @@ -1116,6 +1117,7 @@ ConfigureTracksActions = @ConfigureTracksActions until_time = new Date() until_time = new Date(until_time.getTime() + @subscriptionRules.remaining_month_play_time * 1000) #until_time.setSeconds(until_time.getSeconds() + @subscriptionRules.remaining_month_play_time) + console.log("subscription: month has remaining play time", until_time) @subscriptionRules.remaining_month_until = until_time @currentSession = sessionData diff --git a/web/app/controllers/api_recurly_controller.rb b/web/app/controllers/api_recurly_controller.rb index c24be2e21..ee4ed0fd6 100644 --- a/web/app/controllers/api_recurly_controller.rb +++ b/web/app/controllers/api_recurly_controller.rb @@ -152,6 +152,8 @@ class ApiRecurlyController < ApiController subscription: subscription, has_billing_info: has_billing_info, plan_code: current_user.subscription_plan_code, desired_plan_code: current_user.desired_plan_code, + admin_override_plan_code: current_user.admin_override_plan_code, + admin_override_ends_at: current_user.admin_override_ends_at, in_trial: !current_user.subscription_trial_ended?, trial_ends_at: current_user.subscription_trial_ends_at }, :status => 200 @@ -179,6 +181,8 @@ class ApiRecurlyController < ApiController subscription: subscription, has_billing_info: has_billing_info, plan_code: current_user.subscription_plan_code, desired_plan_code: current_user.desired_plan_code, + admin_override_plan_code: current_user.admin_override_plan_code, + admin_override_ends_at: current_user.admin_override_ends_at, in_trial: !current_user.subscription_trial_ended?, trial_ends_at: current_user.subscription_trial_ends_at }, :status => 200 @@ -219,6 +223,8 @@ class ApiRecurlyController < ApiController has_billing_info: has_billing_info, plan_code: current_user.subscription_plan_code, desired_plan_code: current_user.desired_plan_code, + admin_override_plan_code: current_user.admin_override_plan_code, + admin_override_ends_at: current_user.admin_override_ends_at, in_trial: !current_user.subscription_trial_ended?, trial_ends_at: current_user.subscription_trial_ends_at }