470 lines
15 KiB
Ruby
470 lines
15 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe "Signup", :js => true, :type => :feature, :capybara_feature => true do
|
|
|
|
subject { page }
|
|
|
|
before(:all) do
|
|
@old_recaptcha=Rails.application.config.recaptcha_enable
|
|
Rails.application.config.recaptcha_enable=false
|
|
end
|
|
|
|
after(:all) do
|
|
Rails.application.config.recaptcha_enable=@old_recaptcha
|
|
end
|
|
|
|
before(:each) do
|
|
@mac_client = FactoryGirl.create(:artifact_update)
|
|
UserMailer.deliveries.clear
|
|
MaxMindManager.create_phony_database
|
|
end
|
|
|
|
#----------------------------------------
|
|
# shared examples
|
|
#----------------------------------------
|
|
shared_examples :default_signup_page do
|
|
it "has default signup page content" do
|
|
expect(page).to have_title "JamKazam | Register"
|
|
should have_content(/Live music platform/)
|
|
end
|
|
end
|
|
|
|
shared_examples :landing_signup_page do
|
|
it "has landing signup page content" do
|
|
expect(page).to have_title "JamKazam | Register"
|
|
should have_content(/JamKazam has spent the last 6 years/)
|
|
end
|
|
end
|
|
|
|
shared_examples :with_origin_signup_submit do
|
|
describe 'form submit' do
|
|
before do
|
|
form_fill_and_submit({
|
|
first_name: "Mike", last_name: "Jones", email: "withorigin1@jamkazam.com", password: "jam123", password_confirmation: "jam123"
|
|
})
|
|
end
|
|
|
|
it{
|
|
user = User.find_by_email('withorigin1@jamkazam.com')
|
|
user.musician_instruments.length.should == 1
|
|
location = GeoIpLocations.lookup('127.0.0.1')
|
|
user.country.should == location[:country]
|
|
user.state.should == location[:state]
|
|
user.city.should == location[:city]
|
|
# an email is sent on no-invite signup
|
|
user.origin_utm_source.should eql 'abc'
|
|
user.origin_utm_campaign.should eql 'campaign1'
|
|
user.origin_utm_medium.should eql 'ads'
|
|
user.origin_referrer.should be_nil
|
|
}
|
|
|
|
it "redirects" do
|
|
if _page == 'default'
|
|
should have_title("JamKazam | Congratulations")
|
|
should have_content("Your account is ready.")
|
|
else
|
|
should have_title("JamKazam | Downloads")
|
|
should have_content("Your account is ready.")
|
|
should have_content("Signup successful!")
|
|
end
|
|
end
|
|
|
|
|
|
end
|
|
end
|
|
|
|
shared_examples :without_origin_signup_submit do
|
|
describe 'form submit' do
|
|
before do
|
|
form_fill_and_submit({
|
|
first_name: "Mike", last_name: "Jones", email: "newuser1@jamkazam.com", password: "jam123", password_confirmation: "jam123"
|
|
})
|
|
end
|
|
|
|
it {
|
|
user = User.find_by_email('newuser1@jamkazam.com')
|
|
user.musician?.should == true
|
|
user.musician_instruments.length.should == 1
|
|
location = GeoIpLocations.lookup('127.0.0.1')
|
|
user.country.should == location[:country]
|
|
user.state.should == location[:state]
|
|
user.city.should == location[:city]
|
|
# an email is sent on no-invite signup
|
|
UserMailer.deliveries.length.should == 2
|
|
UserMailer.deliveries[0].html_part.body.include?("To confirm this email address")== 1
|
|
}
|
|
|
|
it "redirects" do
|
|
if _page == 'default'
|
|
should have_title("JamKazam | Congratulations")
|
|
should have_content("Your account is ready.")
|
|
else
|
|
should have_title("JamKazam | Downloads")
|
|
should have_content("Signup successful!")
|
|
end
|
|
end
|
|
|
|
describe "user can confirm email and receive welcome email" do
|
|
|
|
before(:each) do
|
|
UserMailer.deliveries.clear
|
|
visit signup_confirm_path(User.find_by_email('newuser1@jamkazam.com').signup_token)
|
|
end
|
|
|
|
it {
|
|
should have_title("Signup Confirmation")
|
|
should have_selector('h1', text: "Email Confirmed")
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
shared_examples :signup_with_invite do
|
|
|
|
let(:invited_user) { FactoryGirl.create(:invited_user, :email => "noone@jamkazam.com", :sender => FactoryGirl.create(:user)) }
|
|
|
|
before do
|
|
visit "#{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
|
|
|
|
form_fill_and_submit({
|
|
first_name: "Mike", last_name: "Jones", email: "newuser2@jamkazam.com", password: "jam123", password_confirmation: "jam123"
|
|
})
|
|
end
|
|
|
|
# Successful sign-in goes to the client
|
|
it {
|
|
should have_title("JamKazam")
|
|
should have_selector('.flash-content', text: "Soon you can play with #{invited_user.sender.name}")
|
|
UserMailer.deliveries.length.should == 2
|
|
uri = URI.parse(current_url)
|
|
if path =~ /landing/
|
|
"#{uri.path}?#{uri.query}".should == landing_client_downloads_path(:friend => invited_user.sender.name)
|
|
else
|
|
"#{uri.path}?#{uri.query}".should == congratulations_musician_path(:friend => invited_user.sender.name)
|
|
end
|
|
|
|
}
|
|
end
|
|
|
|
shared_examples :signup_with_invite_and_autofriend do
|
|
|
|
before(:each) do
|
|
InvitedUser.destroy_all
|
|
User.destroy_all
|
|
@user = FactoryGirl.create(:user)
|
|
@invited_user = FactoryGirl.create(:invited_user, :sender => @user, :autofriend => true, :email => "noone@jamkazam.com")
|
|
|
|
visit "#{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
|
|
|
|
form_fill_and_submit({
|
|
first_name: "Mike", last_name: "Jones", email: "newuser3@jamkazam.com", password: "jam123", password_confirmation: "jam123"
|
|
})
|
|
end
|
|
|
|
# Successful sign-in goes to the client
|
|
it {
|
|
should have_title("JamKazam")
|
|
should have_selector('.flash-content', text: "Soon you can play with #{@invited_user.sender.name}")
|
|
@user.friends?(User.find_by_email("newuser3@jamkazam.com"))
|
|
User.find_by_email("newuser3@jamkazam.com").friends?(@user)
|
|
uri = URI.parse(current_url)
|
|
if path =~ /landing/
|
|
"#{uri.path}?#{uri.query}".should == landing_client_downloads_path(:friend => @invited_user.sender.name)
|
|
else
|
|
"#{uri.path}?#{uri.query}".should == congratulations_musician_path(:friend => @invited_user.sender.name)
|
|
end
|
|
|
|
}
|
|
end
|
|
|
|
shared_examples :signup_with_different_email do
|
|
let(:invited_user) { FactoryGirl.create(:invited_user, :email => "what@jamkazam.com", :sender => FactoryGirl.create(:user)) }
|
|
before do
|
|
|
|
visit "#{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
|
|
|
|
form_fill_and_submit({
|
|
first_name: "Mike", last_name: "Jones", email: "newuser5@jamkazam.com", password: "jam123", password_confirmation: "jam123"
|
|
})
|
|
end
|
|
|
|
it {
|
|
|
|
should have_selector('.flash-content', text: "Soon you can play with #{invited_user.sender.name}")
|
|
User.find_by_email('newuser5@jamkazam.com').musician_instruments.length.should == 1
|
|
User.find_by_email('what@jamkazam.com').should be_nil
|
|
# an email is sent when you invite but use a different email than the one used to invite
|
|
UserMailer.deliveries.length.should == 2
|
|
uri = URI.parse(current_url)
|
|
if path =~ /landing/
|
|
should have_title("JamKazam | Downloads")
|
|
"#{uri.path}?#{uri.query}".should == landing_client_downloads_path(:friend => invited_user.sender.name)
|
|
else
|
|
should have_title("JamKazam | Congratulations")
|
|
"#{uri.path}?#{uri.query}".should == congratulations_musician_path(:friend => invited_user.sender.name)
|
|
end
|
|
|
|
sign_out
|
|
}
|
|
end
|
|
|
|
shared_examples :signup_hints do
|
|
it "redirects to custom location on matched signup_hint" do
|
|
# causes anon cookie to show
|
|
visit '/'
|
|
find('h2', text: 'Play music live and in sync with others from different locations')
|
|
|
|
# get a anonymous cookie set up
|
|
anon_user_id = get_me_the_cookie("user_uuid")
|
|
puts "#ANON_USER_ID #{anon_user_id.inspect}"
|
|
anon_user = AnonymousUser.new(anon_user_id[:value], {})
|
|
SignupHint.refresh_by_anoymous_user(anon_user, {redirect_location: '/affiliateProgram'})
|
|
|
|
visit path
|
|
|
|
form_fill_and_submit({
|
|
first_name: "Mike", last_name: "Jones", email: "signup_hint_guy@jamkazam.com", password: "jam123", password_confirmation: "jam123"
|
|
})
|
|
|
|
find('h1', text:'JamKazam Affiliate Program')
|
|
|
|
user = User.find_by_email('signup_hint_guy@jamkazam.com')
|
|
user.should_not be_nil
|
|
end
|
|
|
|
it "ignores expired_at signup_hint" do
|
|
|
|
# causes anon cookie to show
|
|
visit '/'
|
|
find('h2', text: 'Play music live and in sync with others from different locations')
|
|
|
|
# get a anonymous cookie set up
|
|
anon_user_id = get_me_the_cookie("user_uuid")
|
|
anon_user = AnonymousUser.new(anon_user_id[:value], {})
|
|
hint = SignupHint.refresh_by_anoymous_user(anon_user, {redirect_location: '/products/jamblaster', want_jamblaster: true})
|
|
hint.expires_at = 1.day.ago
|
|
hint.save!
|
|
|
|
visit path
|
|
|
|
form_fill_and_submit({
|
|
first_name: "Mike", last_name: "Jones", email: "signup_hint_guy2@jamkazam.com", password: "jam123", password_confirmation: "jam123"
|
|
})
|
|
|
|
if path =~ /landing/
|
|
should have_title("JamKazam | Downloads")
|
|
else
|
|
should have_title("JamKazam | Congratulations")
|
|
end
|
|
|
|
user = User.find_by_email('signup_hint_guy2@jamkazam.com')
|
|
user.want_jamblaster.should be false
|
|
end
|
|
end
|
|
|
|
#----------------------------------------
|
|
# examples
|
|
#----------------------------------------
|
|
|
|
# Successful signup with no invitation tells you to go sign up
|
|
describe "with origin" do
|
|
describe :default_signup do
|
|
before do
|
|
User.destroy_all
|
|
visit "/signup?utm_source=abc&utm_medium=ads&utm_campaign=campaign1"
|
|
end
|
|
it_behaves_like :default_signup_page
|
|
it_behaves_like :with_origin_signup_submit do
|
|
let(:_page){ 'default' }
|
|
end
|
|
|
|
end
|
|
|
|
describe :landing_signup do
|
|
before do
|
|
User.destroy_all
|
|
visit "/landing/general/signup?utm_source=abc&utm_medium=ads&utm_campaign=campaign1"
|
|
end
|
|
it_behaves_like :landing_signup_page
|
|
it_behaves_like :with_origin_signup_submit do
|
|
let(:_page){ 'landing' }
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
describe "without origin" do
|
|
|
|
describe :default_signup do
|
|
before do
|
|
User.destroy_all
|
|
visit signup_path
|
|
end
|
|
it_behaves_like :default_signup_page
|
|
it_behaves_like :without_origin_signup_submit do
|
|
let(:_page){ 'default' }
|
|
end
|
|
end
|
|
|
|
describe :landing_signup do
|
|
before do
|
|
User.destroy_all
|
|
visit "/landing/general/signup"
|
|
end
|
|
it_behaves_like :landing_signup_page
|
|
it_behaves_like :without_origin_signup_submit do
|
|
let(:_page){ 'landing' }
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "submit form with errors" do
|
|
|
|
describe :default_signup do
|
|
before do
|
|
visit signup_path
|
|
end
|
|
it {
|
|
#submit without filling the form
|
|
find("#create-account-submit").click
|
|
expect(page).to have_title "JamKazam | Register"
|
|
should_not have_title("JamKazam | Congratulations")
|
|
}
|
|
end
|
|
|
|
describe :landing_signup do
|
|
before do
|
|
visit "/landing/general/signup"
|
|
end
|
|
it {
|
|
#submit without filling the form
|
|
find("#create-account-submit").click
|
|
expect(page).to have_title "JamKazam | Register"
|
|
should_not have_title("JamKazam | Downloads")
|
|
}
|
|
end
|
|
end
|
|
|
|
describe "with user invite" do
|
|
|
|
before(:each) do
|
|
InvitedUser.destroy_all
|
|
User.destroy_all
|
|
end
|
|
|
|
describe :default_signup do
|
|
it_behaves_like :signup_with_invite do
|
|
let(:path){ "/signup" }
|
|
end
|
|
end
|
|
|
|
describe :landing_signup do
|
|
it_behaves_like :signup_with_invite do
|
|
let(:path){ "/landing/general/signup" }
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "with user invite and autofriend" do
|
|
|
|
describe :default_signup do
|
|
it_behaves_like :signup_with_invite_and_autofriend do
|
|
let(:path){ "/signup" }
|
|
end
|
|
end
|
|
|
|
describe :landing_signup do
|
|
it_behaves_like :signup_with_invite_and_autofriend do
|
|
let(:path){ "/landing/general/signup" }
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "can signup with an email different than the one used to invite" do
|
|
before(:each) do
|
|
User.destroy_all
|
|
end
|
|
|
|
describe :default_signup do
|
|
it_behaves_like :signup_with_different_email do
|
|
let(:path){ "/signup" }
|
|
end
|
|
|
|
end
|
|
|
|
describe :landing_signup do
|
|
it_behaves_like :signup_with_different_email do
|
|
let(:path){ "/landing/general/signup" }
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
describe "signup hints" do
|
|
before(:each) do
|
|
User.destroy_all
|
|
end
|
|
|
|
describe :default_signup do
|
|
it_behaves_like :signup_hints do
|
|
let(:path){ "/signup" }
|
|
end
|
|
|
|
end
|
|
|
|
describe :landing_signup do
|
|
it_behaves_like :signup_hints do
|
|
let(:path){ "/landing/general/signup" }
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
def form_fill_and_submit(vals)
|
|
fill_in "jam_ruby_user[first_name]", with: vals[:first_name]
|
|
fill_in "jam_ruby_user[last_name]", with: vals[:last_name]
|
|
fill_in "jam_ruby_user[email]", with: vals[:email]
|
|
fill_in "jam_ruby_user[password]", with: vals[:password]
|
|
password_confirmation = find('#jam_ruby_user_password_confirmation', visible: :all)
|
|
if password_confirmation.visible? #landing/general/signup form does not show password_confirmation field
|
|
fill_in "jam_ruby_user[password_confirmation]", with: vals[:password_confirmation]
|
|
end
|
|
|
|
check("jam_ruby_user[terms_of_service]")
|
|
#click_button "Sign Up for JamKazam"
|
|
find("#create-account-submit").click
|
|
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[terms_of_service]")
|
|
# #click_button "Sign Up for JamKazam"
|
|
# find("#create-account-submit").click
|
|
# end
|
|
|
|
|
|
end
|