* moved shareable_resolver into new controller, and made tests
This commit is contained in:
parent
caa565470d
commit
9598c06e1f
|
|
@ -64,6 +64,7 @@ module JamRuby
|
|||
self.share_token = ShareToken.new
|
||||
self.share_token.token = token
|
||||
self.share_token.shareable_type = "recording"
|
||||
self.share_token.shareable_id = self.id
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -40,6 +40,11 @@ module JamRuby
|
|||
validate :creator_is_musician
|
||||
validate :no_new_playback_while_playing
|
||||
|
||||
before_create :create_uuid
|
||||
def create_uuid
|
||||
#self.id = SecureRandom.uuid
|
||||
end
|
||||
|
||||
def before_destroy
|
||||
self.mount.destroy if self.mount
|
||||
end
|
||||
|
|
|
|||
|
|
@ -160,6 +160,9 @@ module JamRuby
|
|||
|
||||
private
|
||||
def generate_share_token
|
||||
|
||||
self.id = music_session.id # unify music_session.id and music_session_history.id
|
||||
|
||||
token = loop do
|
||||
token = SecureRandom.urlsafe_base64(SHARE_TOKEN_LENGTH, false)
|
||||
token = remove_non_alpha_num(token)
|
||||
|
|
@ -170,6 +173,8 @@ module JamRuby
|
|||
self.share_token = ShareToken.new
|
||||
self.share_token.token = token
|
||||
self.share_token.shareable_type = "session"
|
||||
self.share_token.shareable_id = self.id
|
||||
self.share_token.save!
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ module JamRuby
|
|||
validates :sound, :inclusion => {:in => SOUND}
|
||||
validates :client_id, :presence => true # not a connection relation on purpose
|
||||
validates :track_id, :presence => true # not a track relation on purpose
|
||||
validates :client_track_id, :presence => true
|
||||
validates :md5, :presence => true, :if => :upload_starting?
|
||||
validates :length, length: {minimum: 1, maximum: 1024 * 1024 * 256 }, if: :upload_starting? # 256 megs max. is this reasonable? surely...
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
module JamRuby
|
||||
class ShareToken < ActiveRecord::Base
|
||||
belongs_to :shareable, :polymorphic => true
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
|
|
@ -32,7 +32,7 @@ FactoryGirl.define do
|
|||
end
|
||||
end
|
||||
|
||||
factory :music_session, :class => JamRuby::MusicSession do
|
||||
factory :music_session_no_history, :class => JamRuby::MusicSession do
|
||||
sequence(:description) { |n| "Music Session #{n}" }
|
||||
fan_chat true
|
||||
fan_access true
|
||||
|
|
@ -42,8 +42,16 @@ FactoryGirl.define do
|
|||
genres [JamRuby::Genre.first]
|
||||
association :creator, :factory => :user
|
||||
|
||||
factory :music_session_with_mount do
|
||||
factory :music_session do
|
||||
|
||||
after(:create) { |session|
|
||||
MusicSessionHistory.save(session)
|
||||
}
|
||||
|
||||
factory :music_session_with_mount do
|
||||
association :mount, :factory => :icecast_mount
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -109,14 +117,45 @@ FactoryGirl.define do
|
|||
end
|
||||
|
||||
factory :recorded_track, :class => JamRuby::RecordedTrack do
|
||||
instrument JamRuby::Instrument.first
|
||||
sound 'stereo'
|
||||
sequence(:client_id) { |n| "client_id-#{n}"}
|
||||
sequence(:track_id) { |n| "track_id-#{n}"}
|
||||
sequence(:client_track_id) { |n| "client_track_id-#{n}"}
|
||||
md5 'abc'
|
||||
length 1
|
||||
fully_uploaded true
|
||||
association :user, factory: :user
|
||||
association :recording, factory: :recording
|
||||
end
|
||||
|
||||
factory :instrument, :class => JamRuby::Instrument do
|
||||
|
||||
end
|
||||
|
||||
factory :recording, :class => JamRuby::Recording do
|
||||
|
||||
association :owner, factory: :user
|
||||
association :music_session, factory: :music_session
|
||||
|
||||
factory :recording_with_track do
|
||||
before(:create) { |recording|
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: recording.owner)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
factory :claimed_recording, :class => JamRuby::ClaimedRecording do
|
||||
sequence(:name) { |n| "name-#{n}" }
|
||||
sequence(:description) { |n| "description-#{n}" }
|
||||
is_public true
|
||||
is_downloadable true
|
||||
association :genre, factory: :genre
|
||||
association :user, factory: :user
|
||||
|
||||
before(:create) { |claimed_recording|
|
||||
claimed_recording.recording = FactoryGirl.create(:recording_with_track, owner: claimed_recording.user)
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
factory :musician_instrument, :class => JamRuby::MusicianInstrument do
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ describe 'Band search' do
|
|||
it "by now playing" do
|
||||
# should get 1 result with 1 active session
|
||||
session = make_session(@band3)
|
||||
FactoryGirl.create(:music_session_history, :music_session => session)
|
||||
#FactoryGirl.create(:music_session_history, :music_session => session)
|
||||
|
||||
results = Search.band_filter({ :orderby => 'playing' })
|
||||
expect(results.results.count).to be 1
|
||||
|
|
@ -129,7 +129,7 @@ describe 'Band search' do
|
|||
# should get 2 results with 2 active sessions
|
||||
# sort order should be created_at DESC
|
||||
session = make_session(@band4)
|
||||
FactoryGirl.create(:music_session_history, :music_session => session)
|
||||
#FactoryGirl.create(:music_session_history, :music_session => session)
|
||||
results = Search.band_filter({ :orderby => 'playing' })
|
||||
expect(results.results.count).to be 2
|
||||
expect(results.results[0].id).to eq(@band4.id)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ require 'spec_helper'
|
|||
describe MusicSessionHistory do
|
||||
|
||||
let(:some_user) { FactoryGirl.create(:user) }
|
||||
let(:music_session) { FactoryGirl.create(:music_session) }
|
||||
let(:music_session) { FactoryGirl.create(:music_session_no_history) }
|
||||
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) }
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ require 'spec_helper'
|
|||
describe MusicSessionUserHistory do
|
||||
|
||||
let(:some_user) { FactoryGirl.create(:user) }
|
||||
let(:music_session) { FactoryGirl.create(:music_session) }
|
||||
let(:music_session) { FactoryGirl.create(:music_session_no_history) }
|
||||
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) }
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe ShareToken do
|
||||
|
||||
let(:user) { FactoryGirl.create(:user) }
|
||||
let(:music_session) {FactoryGirl.create(:music_session) }
|
||||
let(:claimed_recording) {FactoryGirl.create(:claimed_recording) }
|
||||
|
||||
before(:each) do
|
||||
ShareToken.delete_all
|
||||
end
|
||||
|
||||
it "can reference a music session" do
|
||||
music_session.touch # should create a MSH, and a token, too
|
||||
ShareToken.count.should == 1
|
||||
token = ShareToken.find_by_shareable_id!(music_session.id)
|
||||
token.shareable_id.should == music_session.id
|
||||
token.shareable_type.should == 'session'
|
||||
end
|
||||
|
||||
it "can reference a claimed recording" do
|
||||
claimed_recording.touch # should create a share token
|
||||
ShareToken.count.should == 2 # one for MSH, one for recording
|
||||
token = ShareToken.find_by_shareable_id!(claimed_recording.id)
|
||||
token.shareable_type.should == 'recording'
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -30,6 +30,7 @@ ActiveRecord::Base.add_observer UserObserver.instance
|
|||
ActiveRecord::Base.add_observer FeedbackObserver.instance
|
||||
ActiveRecord::Base.add_observer RecordedTrackObserver.instance
|
||||
|
||||
RecordedTrack.observers.disable :all # only a few tests want this observer active
|
||||
|
||||
# put ActionMailer into test mode
|
||||
ActionMailer::Base.delivery_method = :test
|
||||
|
|
|
|||
|
|
@ -40,7 +40,9 @@ gem 'amqp', '0.9.8'
|
|||
gem 'logging-rails', :require => 'logging/rails'
|
||||
gem 'omniauth', '1.1.1'
|
||||
gem 'omniauth-facebook', '1.4.1'
|
||||
gem 'omniauth-twitter'
|
||||
gem 'omniauth-google-oauth2', '0.2.1'
|
||||
gem 'twitter'
|
||||
gem 'fb_graph', '2.5.9'
|
||||
gem 'sendgrid', '1.1.0'
|
||||
gem 'recaptcha', '0.3.4'
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class ApiSearchController < ApiController
|
||||
class ApiSessionsController < ApiController
|
||||
|
||||
def login
|
||||
user = User.authenticate(params[:email], params[:password])
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
class ShareTokensController < ApplicationController
|
||||
|
||||
respond_to :html
|
||||
|
||||
def shareable_resolver
|
||||
share_token = ShareToken.find_by_token!(params[:id])
|
||||
# TODO: clean this up later to truly use polymorphic associations
|
||||
if share_token.shareable_type == "session"
|
||||
redirect_to music_session_detail(share_token.shareable_id)
|
||||
else
|
||||
redirect_to recording_detail(share_token.shareable_id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -44,14 +44,4 @@ class SpikesController < ApplicationController
|
|||
render :layout => 'web'
|
||||
end
|
||||
|
||||
def shareable_resolver
|
||||
share_token = ShareToken.find_by_token(params[:id])
|
||||
# TODO: clean this up later to truly use polymorphic associations
|
||||
if share_token.shareable_type == "session"
|
||||
msh = MusicSessionHistory.find(share_token.shareable_id)
|
||||
redirect_to "/sessions/#{msh.music_session_id}"
|
||||
else
|
||||
redirect_to "/recordings/#{share_token.shareable_id}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -63,7 +63,9 @@ SampleApp::Application.routes.draw do
|
|||
match '/facebook_invite', to: 'spikes#facebook_invite'
|
||||
match '/gmail_contacts', to: 'spikes#gmail_contacts'
|
||||
match '/listen_in', to: 'spikes#listen_in'
|
||||
match '/:id', to: 'spikes#shareable_resolver'
|
||||
|
||||
# share tokens
|
||||
match '/s/:id', to: 'share_tokens#shareable_resolver'
|
||||
|
||||
# password reset
|
||||
match '/request_reset_password' => 'users#request_reset_password', :via => :get
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe ApiSharedTokenController do
|
||||
render_views
|
||||
|
||||
let(:user) { FactoryGirl.create(:user) }
|
||||
let(:music_session) {FactoryGirl.create(:music_session, user: user) }
|
||||
|
||||
it "resolves music session" do
|
||||
music_session.touch
|
||||
get :shareable_resolver, :id => ShareToken.find_by_shareable_id!(music_session.id).token
|
||||
end
|
||||
|
||||
end
|
||||
Loading…
Reference in New Issue