From 32ae21a213b3c9fb713e8ceb202416aede355300 Mon Sep 17 00:00:00 2001 From: danielgrippi Date: Mon, 15 Aug 2011 15:15:43 -0700 Subject: removed user invite counter, as it was already depricated --- app/controllers/admins_controller.rb | 12 ---- app/controllers/invitations_controller.rb | 48 +++++++------- app/controllers/registrations_controller.rb | 1 - app/models/invitation.rb | 9 ++- app/models/user.rb | 3 +- app/views/admins/user_search.html.haml | 1 - config/routes.rb | 1 - ...110815210933_remove_invite_counter_from_user.rb | 9 +++ db/schema.rb | 3 +- spec/controllers/admins_controller_spec.rb | 28 +-------- spec/controllers/invitations_controller_spec.rb | 18 +----- spec/controllers/services_controller_spec.rb | 10 ++- spec/models/invitation_spec.rb | 18 ------ spec/models/user/invite_spec.rb | 73 +++++++++------------- 14 files changed, 79 insertions(+), 155 deletions(-) create mode 100644 db/migrate/20110815210933_remove_invite_counter_from_user.rb diff --git a/app/controllers/admins_controller.rb b/app/controllers/admins_controller.rb index 07459baac..5a6256221 100644 --- a/app/controllers/admins_controller.rb +++ b/app/controllers/admins_controller.rb @@ -8,18 +8,6 @@ class AdminsController < ApplicationController @users = params[:user].empty? ? [] : User.where(params[:user]) end - def add_invites - user = User.find(params[:user_id]) - - if user.increment(:invites, 10).save - flash[:notice] = "Great Job!" - else - flash[:alert] = "there was a problem adding invites" - end - - redirect_to user_search_path(:user => { :id => user.id }) - end - def admin_inviter opts = {:service => 'email', :identifier => params[:identifier]} existing_user = Invitation.find_existing_user('email', params[:identifier]) diff --git a/app/controllers/invitations_controller.rb b/app/controllers/invitations_controller.rb index d063ef839..be2993777 100644 --- a/app/controllers/invitations_controller.rb +++ b/app/controllers/invitations_controller.rb @@ -16,35 +16,35 @@ class InvitationsController < Devise::InvitationsController end def create - if !AppConfig[:open_invitations] && current_user.invites == 0 - flash[:error] = I18n.t 'invitations.create.no_more' - redirect_to :back - return - end - aspect = params[:user].delete(:aspects) - message = params[:user].delete(:invite_messages) - emails = params[:user][:email].to_s.gsub(/\s/, '').split(/, */) + unless AppConfig[:open_invitations] + flash[:error] = I18n.t 'invitations.create.no_more' + redirect_to :back + return + end + aspect = params[:user].delete(:aspects) + message = params[:user].delete(:invite_messages) + emails = params[:user][:email].to_s.gsub(/\s/, '').split(/, */) - good_emails, bad_emails = emails.partition{|e| e.try(:match, Devise.email_regexp)} + good_emails, bad_emails = emails.partition{|e| e.try(:match, Devise.email_regexp)} - if good_emails.include?(current_user.email) - if good_emails.length == 1 - flash[:error] = I18n.t 'invitations.create.own_address' - redirect_to :back - return - else - bad_emails.push(current_user.email) - good_emails.delete(current_user.email) - end + if good_emails.include?(current_user.email) + if good_emails.length == 1 + flash[:error] = I18n.t 'invitations.create.own_address' + redirect_to :back + return + else + bad_emails.push(current_user.email) + good_emails.delete(current_user.email) end + end - good_emails.each{|e| Resque.enqueue(Job::Mail::InviteUserByEmail, current_user.id, e, aspect, message)} + good_emails.each{|e| Resque.enqueue(Job::Mail::InviteUserByEmail, current_user.id, e, aspect, message)} - if bad_emails.any? - flash[:error] = I18n.t('invitations.create.sent') + good_emails.join(', ') + " "+ I18n.t('invitations.create.rejected') + bad_emails.join(', ') - else - flash[:notice] = I18n.t('invitations.create.sent') + good_emails.join(', ') - end + if bad_emails.any? + flash[:error] = I18n.t('invitations.create.sent') + good_emails.join(', ') + " "+ I18n.t('invitations.create.rejected') + bad_emails.join(', ') + else + flash[:notice] = I18n.t('invitations.create.sent') + good_emails.join(', ') + end redirect_to :back end diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb index 013fd820c..7385e90b5 100644 --- a/app/controllers/registrations_controller.rb +++ b/app/controllers/registrations_controller.rb @@ -7,7 +7,6 @@ class RegistrationsController < Devise::RegistrationsController def create @user = User.build(params[:user]) - @user.invites = 20 if @user.save flash[:notice] = I18n.t 'registrations.create.success' @user.seed_aspects diff --git a/app/models/invitation.rb b/app/models/invitation.rb index 49e172c50..6ba61efcf 100644 --- a/app/models/invitation.rb +++ b/app/models/invitation.rb @@ -12,6 +12,7 @@ class Invitation < ActiveRecord::Base def self.invite(opts = {}) opts[:identifier].downcase! if opts[:identifier] + # return if the current user is trying to invite himself via email return false if opts[:identifier] == opts[:from].email existing_user = self.find_existing_user(opts[:service], opts[:identifier]) @@ -51,10 +52,11 @@ class Invitation < ActiveRecord::Base result end - def self.create_invitee(opts = {}) + # @params opts [Hash] Takes :from, :existing_user, :service, :identifier, :message + # @return [User] + def self.create_invitee(opts={}) invitee = opts[:existing_user] || new_user_by_service_and_identifier(opts[:service], opts[:identifier]) return invitee if opts[:service] == 'email' && !opts[:identifier].match(Devise.email_regexp) - invitee.invites = opts[:invites] || 10 if invitee.new_record? invitee.errors.clear invitee.serialized_private_key = User.generate_key if invitee.serialized_private_key.blank? @@ -69,9 +71,6 @@ class Invitation < ActiveRecord::Base :recipient => invitee, :aspect => opts[:into], :message => opts[:message]) - - opts[:from].invites -= 1 unless opts[:from].invites == 0 - opts[:from].save! invitee.reload end invitee.skip_invitation = (opts[:service] != 'email') diff --git a/app/models/user.rb b/app/models/user.rb index ec38e9392..ce408d7df 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -269,8 +269,7 @@ class User < ActiveRecord::Base ###Invitations############ def invite_user(aspect_id, service, identifier, invite_message = "") - aspect = aspects.find(aspect_id) - if aspect + if aspect = aspects.find(aspect_id) Invitation.invite(:service => service, :identifier => identifier, :from => self, diff --git a/app/views/admins/user_search.html.haml b/app/views/admins/user_search.html.haml index feb80da2c..2dbca64a7 100644 --- a/app/views/admins/user_search.html.haml +++ b/app/views/admins/user_search.html.haml @@ -37,7 +37,6 @@ = user.person.profile.inspect %br = "invite token: #{accept_invitation_url(user, :invitation_token => user.invitation_token)}" if user.invitation_token - = link_to "add 10 invites for this user", add_invites_path(:user_id => user.id) %br %br %br diff --git a/config/routes.rb b/config/routes.rb index 49ef87a95..bbdec44f0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -90,7 +90,6 @@ Diaspora::Application.routes.draw do scope 'admins', :controller => :admins do match :user_search get :admin_inviter - get :add_invites, :as => 'add_invites' get :stats, :as => 'pod_stats' end diff --git a/db/migrate/20110815210933_remove_invite_counter_from_user.rb b/db/migrate/20110815210933_remove_invite_counter_from_user.rb new file mode 100644 index 000000000..819216353 --- /dev/null +++ b/db/migrate/20110815210933_remove_invite_counter_from_user.rb @@ -0,0 +1,9 @@ +class RemoveInviteCounterFromUser < ActiveRecord::Migration + def self.up + remove_column :users, :invites + end + + def self.down + add_column :users, :invites, :integer, :default => 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index a4ab4ab6e..0f485397a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20110812175614) do +ActiveRecord::Schema.define(:version => 20110815210933) do create_table "aspect_memberships", :force => true do |t| t.integer "aspect_id", :null => false @@ -386,7 +386,6 @@ ActiveRecord::Schema.define(:version => 20110812175614) do create_table "users", :force => true do |t| t.string "username" t.text "serialized_private_key" - t.integer "invites", :default => 0, :null => false t.boolean "getting_started", :default => true, :null => false t.boolean "disable_mail", :default => false, :null => false t.string "language" diff --git a/spec/controllers/admins_controller_spec.rb b/spec/controllers/admins_controller_spec.rb index 5585f8898..5dfd068ae 100644 --- a/spec/controllers/admins_controller_spec.rb +++ b/spec/controllers/admins_controller_spec.rb @@ -60,33 +60,6 @@ describe AdminsController do end end - describe '#add_invites' do - context 'admin not signed in' do - it 'is behind redirect_unless_admin' do - get :add_invites - response.should redirect_to root_url - end - end - - context 'admin signed in' do - before do - AppConfig[:admins] = [@user.username] - end - - it "redirects to :back with user id" do - get :add_invites, :user_id => @user.id - response.should redirect_to user_search_path(:user => { :id => @user.id }) - end - - it "increases user's invite by 10" do - expect { - get :add_invites, :user_id => @user.id - }.to change { @user.reload.invites }.by(10) - flash.notice.should include('Great Job') - end - end - end - describe '#admin_inviter' do context 'admin not signed in' do it 'is behind redirect_unless_admin' do @@ -110,6 +83,7 @@ describe AdminsController do get :admin_inviter, :identifier => 'bob@moms.com' response.should be_redirect end + it 'invites a new user' do Invitation.should_receive(:create_invitee).with(:service => 'email', :identifier => 'bob@moms.com') get :admin_inviter, :identifier => 'bob@moms.com' diff --git a/spec/controllers/invitations_controller_spec.rb b/spec/controllers/invitations_controller_spec.rb index 58855a550..460917783 100644 --- a/spec/controllers/invitations_controller_spec.rb +++ b/spec/controllers/invitations_controller_spec.rb @@ -8,6 +8,7 @@ describe InvitationsController do include Devise::TestHelpers before do + AppConfig[:open_invitations] = true @user = alice @aspect = @user.aspects.first @@ -17,8 +18,6 @@ describe InvitationsController do describe "#create" do before do - @user.invites = 5 - sign_in :user, @user @invite = {:invite_message=>"test", :aspect_id=> @aspect.id.to_s, :email=>"abc@example.com"} @controller.stub!(:current_user).and_return(@user) @@ -50,19 +49,9 @@ describe InvitationsController do flash[:error].should =~ /lala@foo/ end - it "doesn't invite anyone if you have 0 invites" do - @user.invites = 0 - @user.save! - - Resque.should_not_receive(:enqueue) - post :create, :user => @invite.merge(:email => "mbs@gmail.com, foo@bar.com, foo.com, lala@foo, cool@bar.com") - end - - it "allows invitations without limit if invitations are open" do + it "allows invitations without if invitations are open" do open_bit = AppConfig[:open_invitations] AppConfig[:open_invitations] = true - @user.invites = 0 - @user.save! Resque.should_receive(:enqueue).once post :create, :user => @invite @@ -87,7 +76,6 @@ describe InvitationsController do describe "#update" do before do - @user.invites = 5 @invited_user = @user.invite_user(@aspect.id, 'email', "a@a.com") @accept_params = {:user=> {:password_confirmation =>"password", @@ -145,8 +133,6 @@ describe InvitationsController do describe '#resend' do before do - @user.invites = 5 - sign_in :user, @user @controller.stub!(:current_user).and_return(@user) request.env["HTTP_REFERER"]= 'http://test.host/cats/foo' diff --git a/spec/controllers/services_controller_spec.rb b/spec/controllers/services_controller_spec.rb index 11d161dd0..e7674e675 100644 --- a/spec/controllers/services_controller_spec.rb +++ b/spec/controllers/services_controller_spec.rb @@ -18,8 +18,6 @@ describe ServicesController do before do @user = alice @aspect = @user.aspects.first - @user.invites = 100 - @user.save sign_in :user, @user @controller.stub!(:current_user).and_return(@user) @@ -114,6 +112,13 @@ describe ServicesController do @invite_params = {:provider => 'facebook', :uid => @uid, :aspect_id => @user.aspects.first.id} end + it 'enqueues an invite job if the fb user has a username' do + pending + @invite_params[:provider] = "email" + @invite_params[:uid] = "username@facebook.com" + put :inviter, @invite_params + end + it 'sets the subject' do put :inviter, @invite_params assigns[:subject].should_not be_nil @@ -152,7 +157,6 @@ describe ServicesController do it 'disregares the amount of invites if open_invitations are enabled' do open_bit = AppConfig[:open_invitations] AppConfig[:open_invitations] = true - @user.invites = 0 lambda { put :inviter, @invite_params diff --git a/spec/models/invitation_spec.rb b/spec/models/invitation_spec.rb index 19c37ffb3..8a3b3bb67 100644 --- a/spec/models/invitation_spec.rb +++ b/spec/models/invitation_spec.rb @@ -9,8 +9,6 @@ describe Invitation do let(:aspect) { user.aspects.first } before do - user.invites = 20 - user.save @email = 'maggie@example.com' Devise.mailer.deliveries = [] end @@ -165,22 +163,6 @@ describe Invitation do Invitation.invite(:from => user, :service => 'email', :identifier => eve.email, :into => aspect) end - it 'decrements the invite count of the from user' do - message = "How've you been?" - lambda { - new_user = Invitation.invite(:from => user, :service => 'email', :identifier => @email, :into => aspect, :message => message) - }.should change(user, :invites).by(-1) - end - - it "doesn't decrement counter past zero" do - user.invites = 0 - user.save! - message = "How've you been?" - lambda { - Invitation.invite(:from => user, :service => 'email', :identifier => @email, :into => aspect, :message => message) - }.should_not change(user, :invites) - end - context 'invalid email' do it 'return a user with errors' do new_user = Invitation.invite(:service => 'email', :identifier => "fkjlsdf", :from => user, :into => aspect) diff --git a/spec/models/user/invite_spec.rb b/spec/models/user/invite_spec.rb index 8756a485e..41ce0e6c7 100644 --- a/spec/models/user/invite_spec.rb +++ b/spec/models/user/invite_spec.rb @@ -5,97 +5,84 @@ require 'spec_helper' describe User do - let(:inviter) {new_user = eve; new_user.invites = 5; new_user.save; new_user;} - let(:aspect) {inviter.aspects.create(:name => "awesome")} - let(:another_user) {alice} - let(:wrong_aspect) {another_user.aspects.create(:name => "super")} - let(:inviter_with_3_invites) { new_user = Factory.create(:user); new_user.invites = 3; new_user.save; new_user;} - let(:aspect2) {inviter_with_3_invites.aspects.create(:name => "Jersey Girls")} - - before do - @email = "bob@bob.com" - end - context "creating invites" do + before do + @aspect = eve.aspects.first + @email = "bob@bob.com" + end + it 'requires your aspect' do lambda { - inviter.invite_user(wrong_aspect.id, "email", "maggie@example.com") + eve.invite_user(alice.aspects.first.id, "email", "maggie@example.com") }.should raise_error ActiveRecord::RecordNotFound end it 'takes a service parameter' do @invite_params = {:service => 'email'} Invitation.should_receive(:invite).with(hash_including(@invite_params)) - inviter.invite_user(aspect.id, 'email', @email) + eve.invite_user(@aspect.id, 'email', @email) end it 'takes an indentifier parameter' do @invite_params = {:identifier => @email} Invitation.should_receive(:invite).with(hash_including(@invite_params)) - inviter.invite_user(aspect.id, 'email', @email) + eve.invite_user(@aspect.id, 'email', @email) end it 'calls Invitation.invite' do Invitation.should_receive(:invite) - inviter.invite_user(aspect.id, 'email', @email) + eve.invite_user(@aspect.id, 'email', @email) end it 'has an invitation' do - inviter.invite_user(aspect.id, 'email', @email).invitations_to_me.count.should == 1 + eve.invite_user(@aspect.id, 'email', @email).invitations_to_me.count.should == 1 end it 'creates it with an email' do - inviter.invite_user(aspect.id, 'email', @email).email.should == @email + eve.invite_user(@aspect.id, 'email', @email).email.should == @email end it "throws if you try to add someone you're connected to" do - connect_users(inviter, aspect, another_user, wrong_aspect) - proc{ - inviter.invite_user(aspect.id, 'email', another_user.email) + connect_users(eve, @aspect, alice, alice.aspects.first) + lambda { + eve.invite_user(@aspect.id, 'email', alice.email) }.should raise_error ActiveRecord::RecordNotUnique end - end - - context "limit on invites" do - it 'does not invite people I already invited' do - inviter_with_3_invites.invite_user(aspect2.id, 'email', "email1@example.com") - proc{ - inviter_with_3_invites.invite_user(aspect2.id, 'email', "email1@example.com") + eve.invite_user(@aspect.id, 'email', "email1@example.com") + lambda { + eve.invite_user(@aspect.id, 'email', "email1@example.com") }.should raise_error /You already invited this person/ end end - describe "#accept_invitation!" do - let(:invited_user) {@invited_user_pre.accept_invitation!(:invitation_token => "abc", - :email => "a@a.com", - :username => "user", - :password => "secret", - :password_confirmation => "secret", - :person => {:profile => {:first_name => "Bob", - :last_name => "Smith"}} )} - before do - @invited_user_pre = Invitation.invite(:from => inviter, :service => 'email', :identifier => 'invitee@example.org', :into => aspect).reload + invite_pre = Invitation.invite(:from => eve, :service => 'email', :identifier => 'invitee@example.org', :into => eve.aspects.first).reload @person_count = Person.count + @invited_user = invite_pre.accept_invitation!(:invitation_token => "abc", + :email => "a@a.com", + :username => "user", + :password => "secret", + :password_confirmation => "secret", + :person => {:profile => {:first_name => "Bob", + :last_name => "Smith"}} ) + end context 'after invitation acceptance' do - before do - invited_user.reload - end it 'destroys the invitations' do - invited_user.invitations_to_me.count.should == 0 + @invited_user.invitations_to_me.count.should == 0 end + it "should create the person with the passed in params" do Person.count.should == @person_count + 1 - invited_user.person.profile.first_name.should == "Bob" + @invited_user.person.profile.first_name.should == "Bob" end it 'resolves incoming invitations into contact requests' do - inviter.contacts.where(:person_id => invited_user.person.id).count.should == 1 + eve.contacts.where(:person_id => @invited_user.person.id).count.should == 1 end end end -- cgit v1.2.3