@@ -15,13 +15,13 @@
<%= image_tag "content/icon_google.png", :size => "24x24", :align => "absmiddle", :alt => "", :style => "vertical-align:middle" %>
-
+
Share a Link:
<% unless share_token.blank? %>
- <%= "#{root_url}#{share_token}" %>
+ <%= true ? '' : "#{root_url}#{share_token}" %>
<% end %>
diff --git a/web/app/views/layouts/web.erb b/web/app/views/layouts/web.erb
index 58c07dd86..28f55c2f9 100644
--- a/web/app/views/layouts/web.erb
+++ b/web/app/views/layouts/web.erb
@@ -50,6 +50,7 @@
<%= render "clients/invitationDialog" %>
<%= render "users/signupDialog" %>
+ <%= render "users/signinDialog" %>
diff --git a/web/app/views/users/_signinDialog.html.erb b/web/app/views/users/_signinDialog.html.erb
new file mode 100644
index 000000000..b14733178
--- /dev/null
+++ b/web/app/views/users/_signinDialog.html.erb
@@ -0,0 +1,59 @@
+
+
+
+
+ sign in
+
+
+
+
+
+ <%= link_to image_tag("content/button_facebook_signin.png", {:width => 249, :height => 46}), '/auth/facebook', class: "signin-facebook" %>
+
+
+
+
+ Or sign in with JamKazam Account
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/views/users/_signupDialog.html.erb b/web/app/views/users/_signupDialog.html.erb
index 9484902a5..66d6fea7f 100644
--- a/web/app/views/users/_signupDialog.html.erb
+++ b/web/app/views/users/_signupDialog.html.erb
@@ -8,7 +8,7 @@
- <%= image_tag "content/button_facebook_signup.png", {:width => 249, :height => 46 } %>
+ <%= link_to image_tag("content/button_facebook_signup.png", {:width => 249, :height => 46 }), '/auth/facebook', class: "signup-facebook" %>
@@ -16,14 +16,14 @@
- <%= link_to "SIGN UP WITH YOUR EMAIL", signup_path, class: "button-orange block" %>
+ <%= link_to "SIGN UP WITH YOUR EMAIL", signup_path, class: "button-orange block signup-email" %>
diff --git a/web/app/views/users/welcome.html.erb b/web/app/views/users/welcome.html.erb
index 86d9ed153..8e0120901 100644
--- a/web/app/views/users/welcome.html.erb
+++ b/web/app/views/users/welcome.html.erb
@@ -13,6 +13,4 @@
Have questions about how JamKazam works?
Here are some answers.
<% end %>
-<% end %>
-
-<%= javascript_include_tag "web/welcome" %>
\ No newline at end of file
+<% end %>
\ No newline at end of file
diff --git a/web/config/application.rb b/web/config/application.rb
index f6050245a..02806981d 100644
--- a/web/config/application.rb
+++ b/web/config/application.rb
@@ -111,7 +111,7 @@ include JamRuby
config.websocket_gateway_connect_time_expire = 6000
end
config.websocket_gateway_internal_debug = false
- config.websocket_gateway_port = 6767
+ config.websocket_gateway_port = 6767 + ENV['JAM_INSTANCE'].to_i
# Runs the websocket gateway within the web app
config.websocket_gateway_uri = "ws://localhost:#{config.websocket_gateway_port}/websocket"
@@ -173,6 +173,7 @@ include JamRuby
config.redis_host = "localhost:6379"
config.audiomixer_path = "/var/lib/audiomixer/audiomixer/audiomixerapp"
+ config.ffmpeg_path = ENV['FFMPEG_PATH'] || (File.exist?('/usr/local/bin/ffmpeg') ? '/usr/local/bin/ffmpeg' : '/usr/bin/ffmpeg')
# if it looks like linux, use init.d script; otherwise use kill
config.icecast_reload_cmd = ENV['ICECAST_RELOAD_CMD'] || (File.exist?('/usr/local/bin/icecast2') ? "bash -l -c #{Shellwords.escape("sudo /etc/init.d/icecast2 reload")}" : "bash -l -c #{Shellwords.escape("kill -1 `ps -f | grep /usr/local/bin/icecast | grep -v grep | awk \'{print $2}\'`")}")
@@ -194,5 +195,8 @@ include JamRuby
config.email_smtp_user_name = 'jamkazam'
config.email_smtp_password = 'jamjamblueberryjam'
config.email_smtp_starttls_auto = true
+
+ config.facebook_app_id = '468555793186398'
+ config.facebook_app_secret = '546a5b253972f3e2e8b36d9a3dd5a06e'
end
end
diff --git a/web/config/boot.rb b/web/config/boot.rb
index 4489e5868..fa8246936 100644
--- a/web/config/boot.rb
+++ b/web/config/boot.rb
@@ -4,3 +4,16 @@ require 'rubygems'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
+
+require 'rails/commands/server'
+
+module Rails
+ class Server
+ alias :default_options_alias :default_options
+ def default_options
+ default_options_alias.merge!(
+ :Port => 3000 + ENV['JAM_INSTANCE'].to_i,
+ :pid => File.expand_path("tmp/pids/server-#{ENV['JAM_INSTANCE'].to_i}.pid"))
+ end
+ end
+end
\ No newline at end of file
diff --git a/web/config/environments/production.rb b/web/config/environments/production.rb
index 61a091e10..04d979d01 100644
--- a/web/config/environments/production.rb
+++ b/web/config/environments/production.rb
@@ -86,4 +86,7 @@ SampleApp::Application.configure do
config.fp_secret = 'HZBIMSOI5VAQ5LXT4XLG6XA7IE'
config.allow_force_native_client = false
+
+ config.facebook_app_id = '1412328362347190' # staging
+ config.facebook_app_secret = '8b1f20430356d44fb49c0a504a9ff401' # staging
end
diff --git a/web/config/environments/test.rb b/web/config/environments/test.rb
index a7983a303..b164e765c 100644
--- a/web/config/environments/test.rb
+++ b/web/config/environments/test.rb
@@ -59,5 +59,8 @@ SampleApp::Application.configure do
config.aws_secret_access_key = 'h0V0ffr3JOp/UtgaGrRfAk25KHNiO9gm8Pj9m6v3'
config.icecast_wait_after_reload = 0
+
+ config.facebook_app_id = '1441492266082868'
+ config.facebook_app_secret = '233bd040a07e47dcec1cff3e490bfce7'
end
diff --git a/web/config/initializers/omniauth.rb b/web/config/initializers/omniauth.rb
index 243e880cf..0dba7848d 100644
--- a/web/config/initializers/omniauth.rb
+++ b/web/config/initializers/omniauth.rb
@@ -1,5 +1,5 @@
Rails.application.config.middleware.use OmniAuth::Builder do
- provider :facebook, '468555793186398', '546a5b253972f3e2e8b36d9a3dd5a06e', {name: "facebook", :scope => 'email,user_location'}
+ provider :facebook, Rails.application.config.facebook_app_id, Rails.application.config.facebook_app_secret, {name: "facebook", :scope => 'email,user_location'}
provider :google_oauth2, Rails.application.config.google_client_id, Rails.application.config.google_secret, {name: "google_login", approval_prompt: '', scope: 'userinfo.email, userinfo.profile, https://www.google.com/m8/feeds'}
end
diff --git a/web/config/routes.rb b/web/config/routes.rb
index 4c5556626..a0c08691c 100644
--- a/web/config/routes.rb
+++ b/web/config/routes.rb
@@ -94,6 +94,9 @@ SampleApp::Application.routes.draw do
end
scope '/api' do
+
+ match '/auths/login' => 'api_auths#login', :via => :post
+
# music sessions
match '/sessions/:id/participants' => 'api_music_sessions#participant_create', :via => :post
match '/participants/:id' => 'api_music_sessions#participant_show', :via => :get, :as => 'api_session_participant_detail'
@@ -314,7 +317,6 @@ SampleApp::Application.routes.draw do
# Mixes
match '/mixes/schedule' => 'api_mixes#schedule', :via => :post
match '/mixes/next' => 'api_mixes#next', :via => :get
- match '/mixes/:id/finish' => 'api_mixes#finish', :via => :put
match '/mixes/:id/download' => 'api_mixes#download', :via => :get
# version check for JamClient
diff --git a/web/config/scheduler.yml b/web/config/scheduler.yml
index 8a6dde7df..10fd84d55 100644
--- a/web/config/scheduler.yml
+++ b/web/config/scheduler.yml
@@ -9,9 +9,13 @@ IcecastConfigRetry:
class: "JamRuby::IcecastConfigRetry"
description: "Finds icecast servers that have had their config_changed, but no IcecastConfigWriter check recently"
-
IcecastSourceCheck:
cron: "10 * * * * *"
class: "JamRuby::IcecastSourceCheck"
description: "Finds icecast mounts that need their 'sourced' state to change, but haven't in some time"
+CleanupFacebookSignup:
+ cron: "30 2 * * *"
+ class: "JamRuby::CleanupFacebookSignup"
+ description: "Deletes facebook_signups that are old"
+
diff --git a/web/lib/user_manager.rb b/web/lib/user_manager.rb
index c4f4fdaec..728bcb652 100644
--- a/web/lib/user_manager.rb
+++ b/web/lib/user_manager.rb
@@ -10,8 +10,22 @@ class UserManager < BaseManager
# Note that almost everything can be nil here. This is because when users sign up via social media,
# we don't know much about them.
- def signup(remote_ip, first_name, last_name, email, password = nil, password_confirmation = nil, terms_of_service = nil,
- instruments = nil, birth_date = nil, location = nil, musician = nil, photo_url = nil, invited_user = nil, signup_confirm_url = nil)
+ def signup(options)
+ remote_ip = options[:remote_ip]
+ first_name = options[:first_name]
+ last_name = options[:last_name]
+ email = options[:email]
+ password = options[:password]
+ password_confirmation = options[:password_confirmation]
+ terms_of_service = options[:terms_of_service]
+ instruments = options[:instruments]
+ birth_date = options[:birth_date]
+ location = options[:location]
+ musician = options[:musician]
+ photo_url = options[:photo_url]
+ invited_user = options[:invited_user]
+ fb_signup = options[:fb_signup]
+ signup_confirm_url = options[:signup_confirm_url]
@user = User.new
@@ -33,8 +47,20 @@ class UserManager < BaseManager
# return @user # @user.errors.any? is true now
#else
# sends email to email account for confirmation
- @user = User.signup(first_name, last_name, email, password, password_confirmation, terms_of_service,
- location, instruments, birth_date, musician, photo_url, invited_user, signup_confirm_url)
+ @user = User.signup(first_name: first_name,
+ last_name: last_name,
+ email: email,
+ password: password,
+ password_confirmation: password_confirmation,
+ terms_of_service: terms_of_service,
+ location: location,
+ instruments: instruments,
+ birth_date: birth_date,
+ musician: musician,
+ photo_url: photo_url,
+ invited_user: invited_user,
+ fb_signup: fb_signup,
+ signup_confirm_url: signup_confirm_url)
return @user
#end
diff --git a/web/script/package/jam-web.conf b/web/script/package/jam-web.conf
index b2a864627..b85686a76 100755
--- a/web/script/package/jam-web.conf
+++ b/web/script/package/jam-web.conf
@@ -6,4 +6,10 @@ stop on runlevel [016]
setuid jam-web
setgid jam-web
+pre-start script
+ set -e
+ mkdir -p /var/run/jam-web
+ chown jam-web:jam-web /var/run/jam-web
+end script
+
exec start-stop-daemon --start --chdir /var/lib/jam-web --exec /var/lib/jam-web/script/package/upstart-run.sh
diff --git a/web/script/package/post-install.sh b/web/script/package/post-install.sh
index aa3d87230..c6534c54f 100755
--- a/web/script/package/post-install.sh
+++ b/web/script/package/post-install.sh
@@ -14,12 +14,10 @@ mkdir -p /var/lib/$NAME/log
mkdir -p /var/lib/$NAME/tmp
mkdir -p /etc/$NAME
mkdir -p /var/log/$NAME
-mkdir -p /var/run/$NAME
chown -R $USER:$GROUP /var/lib/$NAME
chown -R $USER:$GROUP /etc/$NAME
chown -R $USER:$GROUP /var/log/$NAME
-chown -R $USER:$GROUP /var/run/$NAME
# make log folders for jobs
mkdir -p /var/log/any-job-worker
diff --git a/web/spec/controllers/sessions_controller_spec.rb b/web/spec/controllers/sessions_controller_spec.rb
index f0de20a45..4c0456aa0 100644
--- a/web/spec/controllers/sessions_controller_spec.rb
+++ b/web/spec/controllers/sessions_controller_spec.rb
@@ -70,18 +70,6 @@ describe SessionsController do
visit '/auth/facebook'
end.should change(User, :count).by(0)
end
-
-
- it "should not create a user when oauth comes in with a currently existing user" do
- user = FactoryGirl.create(:user) # in the jam session
- OmniAuth.config.mock_auth[:facebook][:info][:email] = user.email
- OmniAuth.config.mock_auth[:facebook] = OmniAuth.config.mock_auth[:facebook]
-
- lambda do
- visit '/auth/facebook'
- end.should change(User, :count).by(0)
- end
-
end
diff --git a/web/spec/factories.rb b/web/spec/factories.rb
index 0cc98df63..0c359d05a 100644
--- a/web/spec/factories.rb
+++ b/web/spec/factories.rb
@@ -308,5 +308,14 @@ FactoryGirl.define do
association :authentication, :factory => :icecast_user_authentication
end
-
+ factory :facebook_signup, :class => JamRuby::FacebookSignup do
+ sequence(:lookup_id) { |n| "lookup-#{n}"}
+ sequence(:first_name) { |n| "first-#{n}"}
+ sequence(:last_name) { |n| "last-#{n}"}
+ gender 'M'
+ sequence(:email) { |n| "jammin-#{n}@jamkazam.com"}
+ sequence(:uid) { |n| "uid-#{n}"}
+ sequence(:token) { |n| "token-#{n}"}
+ token_expires_at Time.now
+ end
end
diff --git a/web/spec/features/authentication_pages_spec.rb b/web/spec/features/authentication_pages_spec.rb
index db161396d..6f2ea1ec3 100644
--- a/web/spec/features/authentication_pages_spec.rb
+++ b/web/spec/features/authentication_pages_spec.rb
@@ -62,7 +62,7 @@ describe "Authentication", :js => true, :type => :feature, :capybara_feature =>
find('.userinfo .sign-out a').trigger(:click)
end
- it { page.should have_title("JamKazam | Sign in") }
+ it { find('h1', text: 'Play music together over the Internet as if in the same room') }
end
end
end
diff --git a/web/spec/features/signup_spec.rb b/web/spec/features/signup_spec.rb
index 2cf59a348..76d064fc2 100644
--- a/web/spec/features/signup_spec.rb
+++ b/web/spec/features/signup_spec.rb
@@ -83,9 +83,12 @@ describe "Signup", :js => true, :type => :feature, :capybara_feature => true do
before do
@invited_user = FactoryGirl.create(:invited_user, :email => "noone@jamkazam.com")
visit "#{signup_path}?invitation_code=#{@invited_user.invitation_code}"
+ find('#jam_ruby_user_first_name')
+ sleep 1 # if I don't do this, first_name and/or last name intermittently fail to fill out
UserMailer.deliveries.clear
- fill_in "jam_ruby_user[first_name]", with: "Mike"
+
+ fill_in "jam_ruby_user[first_name]", with: "Mike"
fill_in "jam_ruby_user[last_name]", with: "Jones"
fill_in "jam_ruby_user[email]", with: "newuser2@jamkazam.com"
fill_in "jam_ruby_user[password]", with: "jam123"
@@ -110,6 +113,8 @@ describe "Signup", :js => true, :type => :feature, :capybara_feature => true do
@user = FactoryGirl.create(:user)
@invited_user = FactoryGirl.create(:invited_user, :sender => @user, :autofriend => true, :email => "noone@jamkazam.com")
visit "#{signup_path}?invitation_code=#{@invited_user.invitation_code}"
+ find('#jam_ruby_user_first_name')
+ sleep 1 # if I don't do this, first_name and/or last name intermittently fail to fill out
fill_in "jam_ruby_user[first_name]", with: "Mike"
fill_in "jam_ruby_user[last_name]", with: "Jones"
@@ -136,6 +141,8 @@ describe "Signup", :js => true, :type => :feature, :capybara_feature => true do
before do
@invited_user = FactoryGirl.create(:invited_user, :email => "noone@jamkazam.com")
visit "#{signup_path}?invitation_code=#{@invited_user.invitation_code}"
+ find('#jam_ruby_user_first_name')
+ sleep 1 # if I don't do this, first_name and/or last name intermittently fail to fill out
fill_in "jam_ruby_user[first_name]", with: "Mike"
fill_in "jam_ruby_user[last_name]", with: "Jones"
@@ -155,10 +162,54 @@ describe "Signup", :js => true, :type => :feature, :capybara_feature => true do
end
+ def signup_invited_user
+ visit "#{signup_path}?invitation_code=#{@invited_user.invitation_code}"
+ find('#jam_ruby_user_first_name')
+ sleep 1 # if I don't do this, first_name and/or last name intermittently fail to fill out
+
+ fill_in "jam_ruby_user[first_name]", with: "Mike"
+ fill_in "jam_ruby_user[last_name]", with: "Jones"
+ @invited_user_email = "newuser#{rand(10000)}@jamkazam.com"
+ fill_in "jam_ruby_user[email]", with: @invited_user_email
+ fill_in "jam_ruby_user[password]", with: "jam123"
+ fill_in "jam_ruby_user[password_confirmation]", with: "jam123"
+ check("jam_ruby_user[instruments][drums][selected]")
+ check("jam_ruby_user[terms_of_service]")
+ click_button "CREATE ACCOUNT"
+ end
+
+ def signup_good
+ should have_title("JamKazam")
+ should have_selector('div.tagline', text: "Congratulations!")
+ @user.friends?(User.find_by_email(@invited_user_email))
+ User.find_by_email(@invited_user_email).friends?(@user)
+ uri = URI.parse(current_url)
+ "#{uri.path}?#{uri.query}".should == congratulations_musician_path(:type => 'Native')
+ end
+
+ describe "can signup with facebook link multiple times with same invite" do
+ before do
+ @user = FactoryGirl.create(:user)
+ @invited_user = FactoryGirl.create(:invited_user, :sender => @user, :autofriend => true, :email => "noone@jamkazam.com", :invite_medium => InvitedUser::FB_MEDIUM)
+ end
+
+ # Successful sign-in goes to the client
+ it {
+ signup_invited_user
+ signup_good
+ }
+ it {
+ signup_invited_user
+ signup_good
+ }
+ end
+
describe "can signup with an email different than the one used to invite" do
before do
@invited_user = FactoryGirl.create(:invited_user, :email => "what@jamkazam.com")
visit "#{signup_path}?invitation_code=#{@invited_user.invitation_code}"
+ find('#jam_ruby_user_first_name')
+ sleep 1 # if I don't do this, first_name and/or last name intermittently fail to fill out
UserMailer.deliveries.clear
diff --git a/web/spec/features/welcome_spec.rb b/web/spec/features/welcome_spec.rb
new file mode 100644
index 000000000..8fa2f131b
--- /dev/null
+++ b/web/spec/features/welcome_spec.rb
@@ -0,0 +1,150 @@
+require 'spec_helper'
+
+describe "Welcome", :js => true, :type => :feature, :capybara_feature => true do
+
+ subject { page }
+
+ before(:all) do
+ Capybara.javascript_driver = :poltergeist
+ Capybara.current_driver = Capybara.javascript_driver
+ Capybara.default_wait_time = 10
+ end
+
+ before(:each) do
+ page.driver.headers = { 'User-Agent' => ' JamKazam ' }
+ visit "/"
+ find('h1', text: 'Play music together over the Internet as if in the same room')
+
+ end
+
+ let(:user) { FactoryGirl.create(:user) }
+ let(:fb_auth) {
+ { :provider => "facebook",
+ :uid => "1234",
+ :info => {:name => "John Doe",
+ :email => "johndoe@email.com"},
+ :credentials => {:token => "testtoken234tsdf", :expires_at => 2391456019},
+ :extra => { :raw_info => {:first_name => 'John', :last_name => 'Doe', :email => 'facebook@jamkazam.com', :gender => 'male'}} }
+ }
+
+ describe "signin" do
+ before(:each) do
+ find('#signin').trigger(:click)
+ end
+
+ it "show dialog" do
+ should have_selector('h1', text: 'sign in')
+ end
+
+ it "shows signup dialog if selected" do
+ find('.show-signup-dialog').trigger(:click)
+
+ find('h1', text: 'sign up for jamkazam')
+ end
+
+ it "forgot password" do
+ find('a.forgot-password').trigger(:click)
+
+ find('h1', text: 'reset your password')
+ end
+
+ it "closes if cancelled" do
+ find('a.signin-cancel').trigger(:click)
+
+ should_not have_selector('h1', text: 'sign in')
+ end
+
+ describe "signin natively" do
+
+ it "redirects to client on login" do
+ within('#signin-form') do
+ fill_in "email", with: user.email
+ fill_in "password", with: user.password
+ click_button "SIGN IN"
+ end
+
+ wait_until_curtain_gone
+
+ find('h2', text: 'musicians')
+ end
+
+ it "shows error if bad login" do
+ within('#signin-form') do
+ fill_in "email", with: "junk"
+ fill_in "password", with: user.password
+ click_button "SIGN IN"
+ end
+
+ should have_selector('h1', text: 'sign in')
+
+ find('div.login-error-msg', text: 'Invalid login')
+ end
+ end
+
+ describe "signin with facebook" do
+
+ before(:each) do
+ user.user_authorizations.build provider: 'facebook', uid: '1234', token: 'abc', token_expiration: 1.days.from_now
+ user.save!
+ OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(fb_auth)
+ end
+
+ it "click will redirect to facebook for authorization" do
+ find('.signin-facebook').trigger(:click)
+
+ wait_until_curtain_gone
+
+ find('h2', text: 'musicians')
+ end
+ end
+
+ end
+
+ describe "signup" do
+
+ before(:each) do
+ find('#signup').trigger(:click)
+ end
+
+ it "show dialog" do
+ should have_selector('h1', text: 'sign up for jamkazam')
+ end
+
+ it "shows signin dialog if selected" do
+ find('.show-signin-dialog').trigger(:click)
+
+ find('h1', text: 'sign in')
+ end
+
+ it "closes if cancelled" do
+ find('a.signup-cancel').trigger(:click)
+
+ should_not have_selector('h1', text: 'sign in')
+ end
+
+ describe "signup with email" do
+
+ it "click will redirect to signup page" do
+ find('.signup-email').trigger(:click)
+ find('h2', text: 'Create a JamKazam account')
+ end
+ end
+
+ describe "signup with facebook" do
+
+ before(:each) do
+ fb_auth[:uid] = '12345'
+ OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(fb_auth)
+ end
+
+ it "click will redirect to facebook for authorization" do
+ find('.signup-facebook').trigger(:click)
+ find('h2', text: 'Create a JamKazam account')
+ find_field('jam_ruby_user[first_name]').value.should eq 'John'
+ find_field('jam_ruby_user[last_name]').value.should eq 'Doe'
+ find_field('jam_ruby_user[email]').value.should eq 'facebook@jamkazam.com'
+ end
+ end
+ end
+end
+
diff --git a/web/spec/managers/user_manager_spec.rb b/web/spec/managers/user_manager_spec.rb
index 89d501ebe..85dec168f 100644
--- a/web/spec/managers/user_manager_spec.rb
+++ b/web/spec/managers/user_manager_spec.rb
@@ -15,7 +15,16 @@ describe UserManager do
MaxMindIsp.delete_all # prove that city/state/country will remain nil if no maxmind data
MaxMindGeo.delete_all
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", "userman1@jamkazam.com", "foobar", "foobar", true, @instruments, nil, nil, true, nil, nil, "http://localhost:3000/confirm" )
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: "userman1@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician:true,
+ signup_confirm_url: "http://localhost:3000/confirm" )
@user.errors.any?.should be_false
@user.first_name.should == "bob"
@@ -33,8 +42,16 @@ describe UserManager do
end
it "signup successfully with instruments" do
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", "userman2@jamkazam.com", "foobar", "foobar", true,
- @instruments, nil, nil, true, nil, nil, "http://localhost:3000/confirm")
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: "userman2@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ signup_confirm_url: "http://localhost:3000/confirm")
@user.errors.any?.should be_false
@user.instruments.length.should == 1
@@ -44,7 +61,15 @@ describe UserManager do
end
it "doesnt fail if ip address is nil" do
- @user = @user_manager.signup(nil, "bob", "smith", "userman3@jamkazam.com", "foobar", "foobar", true, @instruments, nil, nil, true, nil, nil, "http://localhost:3000/confirm" )
+ @user = @user_manager.signup(first_name: "bob",
+ last_name: "smith",
+ email: "userman3@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ signup_confirm_url: "http://localhost:3000/confirm" )
@user.errors.any?.should be_false
@user.city.should be_nil
@@ -56,7 +81,16 @@ describe UserManager do
MaxMindManager.active_record_transaction do |manager|
manager.create_phony_database()
end
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", "userman4@jamkazam.com", "foobar", "foobar", true, @instruments, nil, nil, true, nil, nil, "http://localhost:3000/confirm" )
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: "userman4@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ signup_confirm_url: "http://localhost:3000/confirm" )
@user.errors.any?.should be_false
@user.city.should == 'City 127'
@@ -68,7 +102,17 @@ describe UserManager do
MaxMindManager.active_record_transaction do |manager|
manager.create_phony_database()
end
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", "userman5@jamkazam.com", "foobar", "foobar", true, @instruments, nil, @location, true, nil, nil, "http://localhost:3000/confirm" )
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: "userman5@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ location: @location,
+ musician: true,
+ signup_confirm_url: "http://localhost:3000/confirm" )
@user.errors.any?.should be_false
@user.city.should == 'Little Rock'
@@ -80,7 +124,17 @@ describe UserManager do
MaxMindManager.active_record_transaction do |manager|
manager.create_phony_database()
end
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", "userman6@jamkazam.com", "foobar", "foobar", true, @instruments, nil, {}, true, nil, nil, "http://localhost:3000/confirm" )
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: "userman6@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ location: {},
+ musician: true,
+ signup_confirm_url: "http://localhost:3000/confirm" )
@user.errors.any?.should be_false
@user.city.should be_nil
@@ -93,7 +147,17 @@ describe UserManager do
MaxMindManager.active_record_transaction do |manager|
manager.create_phony_database()
end
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", "userman7@jamkazam.com", "foobar", "foobar", true, @instruments, Date.new(2001, 1, 1), nil, true, nil, nil, "http://localhost:3000/confirm" )
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: "userman7@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ birth_date: Date.new(2001, 1, 1),
+ musician: true,
+ signup_confirm_url: "http://localhost:3000/confirm" )
@user.errors.any?.should be_false
@user.birth_date.should == Date.new(2001, 1, 1)
@@ -101,26 +165,64 @@ describe UserManager do
it "duplicate signup failure" do
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", "userman8@jamkazam.com", "foobar", "foobar", true, @instruments, nil, nil, true, nil, nil, "http://localhost:3000/confirm")
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: "userman8@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ signup_confirm_url: "http://localhost:3000/confirm")
+
UserMailer.deliveries.length.should == 1
@user.errors.any?.should be_false
# exactly the same parameters; should dup on email, and send no email
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", "userman8@jamkazam.com", "foobar", "foobar", true, @instruments, nil, nil, true, nil, nil, "http://localhost:3000/confirm")
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: "userman8@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ signup_confirm_url: "http://localhost:3000/confirm")
UserMailer.deliveries.length.should == 1
@user.errors.any?.should be_true
@user.errors[:email][0].should == "has already been taken"
end
- it "fail on no username" do
- @user = @user_manager.signup("127.0.0.1", "", "", "userman10@jamkazam.com", "foobar", "foobar", true, @instruments, nil, nil, true, nil, nil, "http://localhost:3000/confirm")
+ it "fail on no first_name/last_name" do
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "",
+ last_name: "",
+ email: "userman10@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ signup_confirm_url: "http://localhost:3000/confirm")
UserMailer.deliveries.length.should == 0
@user.errors.any?.should be_true
@user.errors[:first_name][0].should == "can't be blank"
end
it "fail on no email" do
- @user = @user_manager.signup("127.0.0.1", "murp", "blurp", "", "foobar", "foobar", true, @instruments, nil, nil, true, nil, nil, "http://localhost:3000/confirm" )
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "murp",
+ last_name: "blurp",
+ email: "",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ signup_confirm_url: "http://localhost:3000/confirm")
+
UserMailer.deliveries.length.should == 0
@user.errors.any?.should be_true
@user.errors[:email][0].should == "can't be blank"
@@ -130,7 +232,16 @@ describe UserManager do
describe "signup_confirm" do
it "fail on no username" do
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", "userman11@jamkazam.com", "foobar", "foobar", true, @instruments, nil, nil, true, nil, nil, "http://localhost:3000/confirm" )
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: "userman11@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ signup_confirm_url: "http://localhost:3000/confirm")
@user = @user_manager.signup_confirm(@user.signup_token)
@user.email_confirmed.should be_true
end
@@ -156,8 +267,17 @@ describe UserManager do
@invitation.accepted.should be_false
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", @invitation.email, "foobar", "foobar", true,
- @instruments, nil, nil, true, nil, @invitation, "http://localhost:3000/confirm")
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: @invitation.email,
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ invited_user: @invitation,
+ signup_confirm_url: "http://localhost:3000/confirm")
@user.errors.any?.should be_false
@user.email_confirmed.should be_true
@@ -176,8 +296,17 @@ describe UserManager do
UserMailer.deliveries.clear
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", @invitation.email, "foobar", "foobar", true,
- @instruments, nil, nil, true, nil, @invitation, "http://localhost:3000/confirm")
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: @invitation.email,
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ invited_user: @invitation,
+ signup_confirm_url: "http://localhost:3000/confirm")
@user.errors.any?.should be_false
@user.email_confirmed.should be_true
@@ -196,8 +325,17 @@ describe UserManager do
UserMailer.deliveries.clear
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", @invitation.email, "foobar", "foobar", true,
- @instruments, nil, nil, true, nil, @invitation, "http://localhost:3000/confirm")
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: @invitation.email,
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ invited_user: @invitation,
+ signup_confirm_url: "http://localhost:3000/confirm")
@user.errors.any?.should be_false
@user.email_confirmed.should be_true
@@ -218,8 +356,17 @@ describe UserManager do
UserMailer.deliveries.clear
- @user = @user_manager.signup("127.0.0.1", "bob", "smith", "userman12@jamkazam.com", "foobar", "foobar", true,
- @instruments, nil, nil, true, nil, @invitation, "http://localhost:3000/confirm")
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: "userman12@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ invited_user: @invitation,
+ signup_confirm_url: "http://localhost:3000/confirm")
@user.errors.any?.should be_false
@user.email_confirmed.should be_false
@@ -229,6 +376,91 @@ describe UserManager do
@user.friends?(@some_user).should be_true
@user.friends?(@some_user).should be_true
- UserMailer.deliveries.length.should == 1 # no emails should be sent, in this case
+ UserMailer.deliveries.length.should == 1
+ end
+
+ it "signup successfully with facebook signup additional info" do
+ fb_signup = FactoryGirl.create(:facebook_signup)
+
+ UserMailer.deliveries.clear
+
+
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: fb_signup.email,
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ fb_signup: fb_signup,
+ signup_confirm_url: "http://localhost:3000/confirm")
+
+ @user.errors.any?.should be_false
+ @user.email_confirmed.should be_true
+ @user.signup_token.should be_nil
+ @user.user_authorizations.length.should == 1
+ @user.user_authorizations[0].uid = fb_signup.uid
+ @user.user_authorizations[0].token = fb_signup.token
+ @user.user_authorizations[0].token_expiration = fb_signup.token_expires_at
+
+ UserMailer.deliveries.length.should == 1
+ end
+
+ it "signup successfully with facebook signup additional info, but different email" do
+ fb_signup = FactoryGirl.create(:facebook_signup)
+
+ UserMailer.deliveries.clear
+
+
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: "userman13@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ fb_signup: fb_signup,
+ signup_confirm_url: "http://localhost:3000/confirm")
+
+ @user.errors.any?.should be_false
+ @user.email_confirmed.should be_false
+ @user.signup_token.should_not be_nil
+ @user.user_authorizations.length.should == 1
+ @user.user_authorizations[0].uid = fb_signup.uid
+ @user.user_authorizations[0].token = fb_signup.token
+ @user.user_authorizations[0].token_expiration = fb_signup.token_expires_at
+
+ UserMailer.deliveries.length.should == 1
+ end
+
+ it "fail to signup when facebook UID already taken" do
+ fb_signup = FactoryGirl.create(:facebook_signup)
+
+ @some_user = FactoryGirl.create(:user)
+ @some_user.update_fb_authorization(fb_signup)
+ @some_user.save!
+
+ UserMailer.deliveries.clear
+
+ @user = @user_manager.signup(remote_ip: "127.0.0.1",
+ first_name: "bob",
+ last_name: "smith",
+ email: "userman13@jamkazam.com",
+ password: "foobar",
+ password_confirmation: "foobar",
+ terms_of_service: true,
+ instruments: @instruments,
+ musician: true,
+ fb_signup: fb_signup,
+ signup_confirm_url: "http://localhost:3000/confirm")
+
+ @user.errors.any?.should be_true
+ @user.errors[:user_authorizations].should == ['is invalid']
+
+ UserMailer.deliveries.length.should == 0
end
end
diff --git a/web/spec/spec_helper.rb b/web/spec/spec_helper.rb
index 5dcd63570..8dbb93069 100644
--- a/web/spec/spec_helper.rb
+++ b/web/spec/spec_helper.rb
@@ -1,5 +1,6 @@
require 'rubygems'
require 'spork'
+require 'omniauth'
#uncomment the following line to use spork with the debugger
#require 'spork/ext/ruby-debug'
@@ -25,6 +26,8 @@ include JamRuby
# put ActionMailer into test mode
ActionMailer::Base.delivery_method = :test
+
+
Spork.prefork do
# Loading more in this block will cause your tests to run faster. However,
# if you change any configuration or code from libraries loaded here, you'll
diff --git a/websocket-gateway/script/package/post-install.sh b/websocket-gateway/script/package/post-install.sh
index c32d60e32..fb09f8d7f 100755
--- a/websocket-gateway/script/package/post-install.sh
+++ b/websocket-gateway/script/package/post-install.sh
@@ -11,7 +11,5 @@ GROUP="$NAME"
cp /var/lib/$NAME/script/package/$NAME.conf /etc/init/$NAME.conf
mkdir -p /var/lib/$NAME/log
-mkdir -p /var/run/$NAME
chown -R $USER:$GROUP /var/lib/$NAME
-chown -R $USER:$GROUP /var/run/$NAME
diff --git a/websocket-gateway/script/package/websocket-gateway.conf b/websocket-gateway/script/package/websocket-gateway.conf
index af10f4e62..9328c3e9f 100755
--- a/websocket-gateway/script/package/websocket-gateway.conf
+++ b/websocket-gateway/script/package/websocket-gateway.conf
@@ -6,4 +6,10 @@ stop on runlevel [016]
setuid websocket-gateway
setgid websocket-gateway
+pre-start script
+ set -e
+ mkdir -p /var/run/websocket-gateway
+ chown websocket-gateway:websocket-gateway /var/run/websocket-gateway
+end script
+
exec start-stop-daemon --start --chdir /var/lib/websocket-gateway --exec /var/lib/websocket-gateway/script/package/upstart-run.sh
|