From bd0b42533cf4054ef96df73be075af040d5b0ef2 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Fri, 21 Jun 2013 21:28:42 -0500 Subject: [PATCH] * VRFS-378: allow user to be logged in right after signup, also supporting user signing up as a fan --- lib/jam_ruby/models/user.rb | 41 ++++++++++++++++-------- spec/jam_ruby/models/user_search_spec.rb | 4 +-- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/lib/jam_ruby/models/user.rb b/lib/jam_ruby/models/user.rb index 5f2b821a0..f80325886 100644 --- a/lib/jam_ruby/models/user.rb +++ b/lib/jam_ruby/models/user.rb @@ -116,17 +116,21 @@ module JamRuby validates :update_email, presence: true, format: {with: VALID_EMAIL_REGEX}, uniqueness: {case_sensitive: false}, :if => :updating_email + validates_length_of :password, minimum: 6, maximum: 100, :if => :should_validate_password? validates_presence_of :password_confirmation, :if => :should_validate_password? validates_confirmation_of :password, :if => :should_validate_password? validates :terms_of_service, :acceptance => {:accept => true, :on => :create, :allow_nil => false } validates :subscribe_email, :inclusion => {:in => [nil, true, false]} + validates :musician, :inclusion => {:in => [true, false]} + validate :validate_musician_instruments validate :validate_current_password validate :validate_update_email + validate :validate_avatar_info def validate_musician_instruments @@ -597,7 +601,7 @@ module JamRuby # throws ActiveRecord::RecordNotFound if instrument is invalid # throws an email delivery error if unable to connect out to SMTP def self.signup(first_name, last_name, email, password, password_confirmation, terms_of_service, subscribe_email, - location, instruments, birth_date, photo_url, invited_user, signup_confirm_url) + location, instruments, birth_date, musician, photo_url, invited_user, signup_confirm_url) user = User.new UserManager.active_record_transaction do |user_manager| @@ -606,6 +610,7 @@ module JamRuby user.email = email user.subscribe_email = subscribe_email user.terms_of_service = terms_of_service + user.musician = musician # FIXME: Setting random password for social network logins. This # is because we have validations all over the place on this. @@ -621,21 +626,22 @@ module JamRuby end user.admin = false - user.musician = true user.city = location[:city] user.state = location[:state] user.country = location[:country] user.birth_date = birth_date - unless instruments.nil? - instruments.each do |musician_instrument_param| - instrument = Instrument.find(musician_instrument_param[:instrument_id]) - musician_instrument = MusicianInstrument.new - musician_instrument.user = user - musician_instrument.instrument = instrument - musician_instrument.proficiency_level = musician_instrument_param[:proficiency_level] - musician_instrument.priority = musician_instrument_param[:priority] - user.musician_instruments << musician_instrument + if user.musician # only update instruments if the user is a musician + unless instruments.nil? + instruments.each do |musician_instrument_param| + instrument = Instrument.find(musician_instrument_param[:instrument_id]) + musician_instrument = MusicianInstrument.new + musician_instrument.user = user + musician_instrument.instrument = instrument + musician_instrument.proficiency_level = musician_instrument_param[:proficiency_level] + musician_instrument.priority = musician_instrument_param[:priority] + user.musician_instruments << musician_instrument + end end end @@ -822,8 +828,12 @@ module JamRuby # if valid credentials are supplied for an 'active' user, returns the user # if not authenticated, returns nil def self.authenticate(email, password) + # remove email_confirmed restriction due to VRFS-378 + # we only allow users that have confirmed email to authenticate - user = User.where('email_confirmed=true').find_by_email(email) + # user = User.where('email_confirmed=true').find_by_email(email) + + user = User.find_by_email(email) if user && user.valid_password?(password) return user @@ -849,9 +859,12 @@ module JamRuby return [] end + # remove email_confirmed restriction due to VRFS-378 + # .where("email_confirmed = true AND (name_tsv @@ to_tsquery('jamenglish', ?) OR users.id in (select user_id from musicians_instruments where instrument_id like '%#{search_criteria.downcase}%'))", query) + return query = User - .where("email_confirmed = true AND (name_tsv @@ to_tsquery('jamenglish', ?) OR users.id in (select user_id from musicians_instruments where instrument_id like '%#{search_criteria.downcase}%'))", query) - .limit(options[:limit]) + .where("(name_tsv @@ to_tsquery('jamenglish', ?) OR users.id in (select user_id from musicians_instruments where instrument_id like '%#{search_criteria.downcase}%'))", query) + .limit(options[:limit]) end # devise compatibility diff --git a/spec/jam_ruby/models/user_search_spec.rb b/spec/jam_ruby/models/user_search_spec.rb index f77d452b0..486b955b2 100644 --- a/spec/jam_ruby/models/user_search_spec.rb +++ b/spec/jam_ruby/models/user_search_spec.rb @@ -61,12 +61,12 @@ describe User do user_result.id.should == @user2.id end - it "users who have signed up, but not confirmed should not show up in search index" do + it "users who have signed up, but not confirmed should show up in search index due to VRFS-378" do @user3 = FactoryGirl.create(:user, first_name: "unconfirmed", last_name: "unconfirmed", email: "unconfirmed@example.com", password: "foobar", password_confirmation: "foobar", musician: true, email_confirmed: false, city: "Apex", state: "NC", country: "USA") ws = User.search("unconfirmed") - ws.length.should == 0 + ws.length.should == 1 # Ok, confirm the user, and see them show up @user3.email_confirmed = true