Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/diaspora/diaspora.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/admins_controller.rb12
-rw-r--r--app/controllers/invitations_controller.rb48
-rw-r--r--app/controllers/registrations_controller.rb1
-rw-r--r--app/models/invitation.rb9
-rw-r--r--app/models/user.rb3
-rw-r--r--app/views/admins/user_search.html.haml1
-rw-r--r--config/routes.rb1
-rw-r--r--db/migrate/20110815210933_remove_invite_counter_from_user.rb9
-rw-r--r--db/schema.rb3
-rw-r--r--spec/controllers/admins_controller_spec.rb28
-rw-r--r--spec/controllers/invitations_controller_spec.rb18
-rw-r--r--spec/controllers/services_controller_spec.rb10
-rw-r--r--spec/models/invitation_spec.rb18
-rw-r--r--spec/models/user/invite_spec.rb73
14 files changed, 79 insertions, 155 deletions
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