Commit 8ae23f57 authored by maxwell's avatar maxwell Committed by zhitomirskiyi

wip

parent 17a80139
......@@ -47,4 +47,27 @@ class AspectMembershipsController < ApplicationController
end
end
end
def create
@person = Person.find(params[:person_id])
@aspect = current_user.aspects.find(params[:aspect_id])
@contact = current_user.contact_for(@person)
current_user.add_contact_to_aspect(contact, aspect)
flash.now[:notice] = I18n.t 'aspects.add_to_aspect.success'
respond_to do |format|
format.js { render :json => {
:button_html => render_to_string(:partial => 'aspects/add_to_aspect',
:locals => {:aspect_id => @aspect.id,
:person_id => @person.id}),
:badge_html => render_to_string(:partial => 'aspects/aspect_badge',
:locals => {:aspect => @aspect})
}}
format.html{ redirect_to aspect_path(@aspect.id)}
end
end
end
......@@ -55,8 +55,6 @@ class AspectsController < ApplicationController
@person = Person.where(:id => params[:aspect][:person_id]).first
@contact = current_user.contact_for(@person)
invite_or_add_contact_to_aspect(@aspect, @person, @contact)
@contact = current_user.contact_for(@person)
respond_to do |format|
format.js { render :json => {:html => render_to_string(
......@@ -155,41 +153,4 @@ class AspectsController < ApplicationController
render :text => response_hash.to_json
end
def add_to_aspect
@person = Person.find(params[:person_id])
@aspect = current_user.aspects.find(params[:aspect_id])
@contact = current_user.contact_for(@person)
invite_or_add_contact_to_aspect(@aspect, @person, @contact)
flash.now[:notice] = I18n.t 'aspects.add_to_aspect.success'
respond_to do |format|
format.js { render :json => {
:button_html => render_to_string(:partial => 'aspects/add_to_aspect',
:locals => {:aspect_id => @aspect.id,
:person_id => @person.id}),
:badge_html => render_to_string(:partial => 'aspects/aspect_badge',
:locals => {:aspect => @aspect})
}}
format.html{ redirect_to aspect_path(@aspect.id)}
end
end
private
def invite_or_add_contact_to_aspect( aspect, person, contact)
if contact
current_user.add_contact_to_aspect(contact, aspect)
else
current_user.send_contact_request_to(person, aspect)
contact = current_user.contact_for(person)
if request = Request.where(:sender_id => person.id, :recipient_id => current_user.person.id).first
request.destroy
contact.update_attributes(:pending => false)
end
end
end
end
......@@ -8,4 +8,37 @@ class ContactsController < ApplicationController
def new
render :nothing => true
end
def create
@person = Person.find(params[:person_id])
@aspect = current_user.aspects.find(params[:aspect_id])
request_to_aspect(@aspect, @person)
flash.now[:notice] = I18n.t 'aspects.add_to_aspect.success'
respond_to do |format|
format.js { render :json => {
:button_html => render_to_string(:partial => 'aspects/add_to_aspect',
:locals => {:aspect_id => @aspect.id,
:person_id => @person.id}),
:badge_html => render_to_string(:partial => 'aspects/aspect_badge',
:locals => {:aspect => @aspect})
}}
format.html{ redirect_to aspect_path(@aspect.id)}
end
end
private
def request_to_aspect( aspect, person)
current_user.send_contact_request_to(person, aspect)
contact = current_user.contact_for(person)
if request = Request.where(:sender_id => person.id, :recipient_id => current_user.person.id).first
request.destroy
contact.update_attributes(:pending => false)
end
end
end
......@@ -28,6 +28,18 @@ describe AspectMembershipsController do
end
end
describe '#create' do
it 'creates an aspect membership' do
@user.should_receive(:add_contact_to_aspect)
post :create,
:format => 'js',
:person_id => @user2.person.id,
:aspect_id => @aspect1.id
response.should be_success
end
end
describe "#destroy" do
it 'removes contacts from an aspect' do
@user.add_contact_to_aspect(@contact, @aspect1)
......
......@@ -262,56 +262,6 @@ describe AspectsController do
end
end
describe "#add_to_aspect" do
context 'with an incoming request' do
before do
@user3 = Factory.create(:user)
@user3.send_contact_request_to(@user.person, @user3.aspects.create(:name => "Walruses"))
end
it 'deletes the request' do
post 'add_to_aspect',
:format => 'js',
:person_id => @user3.person.id,
:aspect_id => @aspect1.id
Request.where(:sender_id => @user3.person.id, :recipient_id => @user.person.id).first.should be_nil
end
it 'does not leave the contact pending' do
post 'add_to_aspect',
:format => 'js',
:person_id => @user3.person.id,
:aspect_id => @aspect1.id
@user.contact_for(@user3.person).should_not be_pending
end
end
context 'with a non-contact' do
before do
@person = Factory(:person)
end
it 'calls send_contact_request_to' do
@user.should_receive(:send_contact_request_to).with(@person, @aspect1)
post 'add_to_aspect',
:format => 'js',
:person_id => @person.id,
:aspect_id => @aspect1.id
end
it 'does not call add_contact_to_aspect' do
@user.should_not_receive(:add_contact_to_aspect)
post 'add_to_aspect',
:format => 'js',
:person_id => @person.id,
:aspect_id => @aspect1.id
end
end
it 'adds the users to the aspect' do
@user.should_receive(:add_contact_to_aspect)
post 'add_to_aspect',
:format => 'js',
:person_id => @user2.person.id,
:aspect_id => @aspect1.id
response.should be_success
end
end
describe '#edit' do
it 'renders' do
get :edit, :id => @aspect0.id
......
......@@ -21,4 +21,46 @@ describe ContactsController do
response.should be_success
end
end
describe 'create' do
context 'with an incoming request' do
before do
@user3 = Factory.create(:user)
@user3.send_contact_request_to(@user.person, @user3.aspects.create(:name => "Walruses"))
end
it 'deletes the request' do
post :create,
:format => 'js',
:person_id => @user3.person.id,
:aspect_id => @aspect1.id
Request.where(:sender_id => @user3.person.id, :recipient_id => @user.person.id).first.should be_nil
end
it 'does not leave the contact pending' do
post :create,
:format => 'js',
:person_id => @user3.person.id,
:aspect_id => @aspect1.id
@user.contact_for(@user3.person).should_not be_pending
end
end
context 'with a non-contact' do
before do
@person = Factory(:person)
end
it 'calls send_contact_request_to' do
@user.should_receive(:send_contact_request_to).with(@person, @aspect1)
post :create,
:format => 'js',
:person_id => @person.id,
:aspect_id => @aspect1.id
end
it 'does not call add_contact_to_aspect' do
@user.should_not_receive(:add_contact_to_aspect)
post :create,
:format => 'js',
:person_id => @person.id,
:aspect_id => @aspect1.id
end
end
end
end
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment