From 1c789028e3cc4bc462856553ee2117ca4cbb2ac1 Mon Sep 17 00:00:00 2001 From: Junv Date: Wed, 14 Nov 2012 16:06:46 +0800 Subject: [PATCH 1/6] add join the team button --- app/assets/stylesheets/application.css.scss | 2 +- app/controllers/teams_controller.rb | 16 +++++++++++-- app/models/person.rb | 3 ++- app/views/teams/show.html.slim | 8 +++++++ config/routes.rb | 1 + lib/team_filter.rb | 4 ++-- spec/controllers/teams_controller_spec.rb | 25 +++++++++++++++++++++ spec/models/person_spec.rb | 5 +++-- 8 files changed, 56 insertions(+), 8 deletions(-) diff --git a/app/assets/stylesheets/application.css.scss b/app/assets/stylesheets/application.css.scss index 86574b7..f2782ab 100644 --- a/app/assets/stylesheets/application.css.scss +++ b/app/assets/stylesheets/application.css.scss @@ -42,4 +42,4 @@ body { .social_media img { margin: 5px; -} \ No newline at end of file +} diff --git a/app/controllers/teams_controller.rb b/app/controllers/teams_controller.rb index d359c32..1c6cfe7 100644 --- a/app/controllers/teams_controller.rb +++ b/app/controllers/teams_controller.rb @@ -10,12 +10,16 @@ class TeamsController < ApplicationController end def create - organisations = params[:org_ids].map { |org_id| Organisation.find(org_id) } @teams = current_person.teams @team = Team.new params[:team].merge creator: current_person if @team.save - organisations.each{|org| org.teams << @team} + unless params[:org_ids]==nil + organisations = params[:org_ids].map { |org_id| Organisation.find(org_id) } + organisations.each{|org| org.teams << @team} + end + Membership.create team: @team, person: current_person + redirect_to "/teams/#{@team.slug}" else render :index @@ -37,6 +41,14 @@ class TeamsController < ApplicationController end end + def join + with_team do |team| + organisation = Organisation.find(team.organisations) + Membership.create team: team, person: current_person + redirect_to "/teams/#{team.slug}" + end + end + def show with_team { render :show } end diff --git a/app/models/person.rb b/app/models/person.rb index f42da11..4549bc8 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -57,11 +57,12 @@ class Person < ActiveRecord::Base def allowed_to_view_team? team return false unless team + team.public? or blessed?(team) or team.creator == self or teams.include?(team) end def viewable_teams - Team.find(:all).select{|team| allowed_to_view_team?(team)} + Team.find(:all).select{|team| allowed_to_view_team?(team)} - approved_teams end def blessed?(team) diff --git a/app/views/teams/show.html.slim b/app/views/teams/show.html.slim index ec85a56..a5e4e6b 100644 --- a/app/views/teams/show.html.slim +++ b/app/views/teams/show.html.slim @@ -13,6 +13,14 @@ h1 = @team.name +- if current_person.approved_teams.include? @team + =form_tag "/teams/#{@team.slug}/quit" + =submit_tag 'Quit',id:"join-team",class:"btn btn-danger " +-else + =form_tag "/teams/#{@team.slug}/join" + =submit_tag 'Join',id:"join-team",class:"btn btn-primary " + +br form.form-inline label.span1.checkbox input type="checkbox" id="show-past" past diff --git a/config/routes.rb b/config/routes.rb index 180a000..77bce4c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -28,6 +28,7 @@ Ocelots::Application.routes.draw do post 'teams' => 'teams#create' get 'teams/:slug' => 'teams#show' post 'teams/:slug/add' => 'teams#add' + post 'teams/:slug/join' => 'teams#join' put 'membership/:id' => 'membership#update', as: 'membership' post 'membership/leave' => 'membership#leave' diff --git a/lib/team_filter.rb b/lib/team_filter.rb index 0e48d69..e147c4a 100644 --- a/lib/team_filter.rb +++ b/lib/team_filter.rb @@ -1,8 +1,8 @@ module TeamFilter def with_team @team = Team.find_by_slug params[:slug] - unless current_person.blessed?(@team) - @team = nil unless current_person.teams.include?(@team) or @team.creator == current_person + unless current_person.allowed_to_view_team?(@team) + @team = nil end if @team yield @team diff --git a/spec/controllers/teams_controller_spec.rb b/spec/controllers/teams_controller_spec.rb index 0adf90e..1edd1b5 100644 --- a/spec/controllers/teams_controller_spec.rb +++ b/spec/controllers/teams_controller_spec.rb @@ -18,12 +18,28 @@ describe TeamsController do end describe :show do + it 'shows selected team' do team = @person.teams.create(name: 'LSP', slug: 'lsp') get :show, :slug => team.slug response.should be_success assigns[:team].should == team end + + it 'ensure a join button in some team we want to join' do + team = Team.create(name: 'LSP', slug: 'lsp') + get :show, :slug => team.slug + response.should be_success + assert_select '#join-team',{:value=> 'Join'} + end + it 'ensure a button display with joined if we already joined this team' do + + team = @person.teams.create(name: 'LSP', slug: 'lsp') + get :show ,:slug => team.slug + response.should be_success + + assert_select '#join-team',{:value=> 'Quit'} + end end describe :create do @@ -36,4 +52,13 @@ describe TeamsController do new_team.organisations.first.should == @organisation end end + + describe :join do + it 'ensure person joins a team and create a membership between person and team' do + team = Team.create(name: 'LSP', slug: 'lsp') + lambda do + post :join, :slug => team.slug + end.should change(Membership, :count).by(1) + end + end end \ No newline at end of file diff --git a/spec/models/person_spec.rb b/spec/models/person_spec.rb index cf485db..18b483d 100644 --- a/spec/models/person_spec.rb +++ b/spec/models/person_spec.rb @@ -53,17 +53,18 @@ describe Person do let(:non_blessed_organisation) { Organisation.create(name: 'Microsoft', domains: 'microsoft.com') } let(:non_viewable_team){ non_blessed_organisation.teams.create(name: 'MS Project', slug: 'ms_project') } let(:public_team){Team.create(name: 'Public Test Team', slug: 'public.com')} - + let(:joined_team){person.teams.create(name: 'Joined Team', slug: 'joined.com')} before(:each) do viewable_team.reload public_team.reload non_viewable_team.reload end - it 'lists viewable teams but not non-viewable teams' do + it 'lists viewable teams but not non-viewable teams & joined teams' do person.viewable_teams.should be_include(viewable_team) person.viewable_teams.should_not be_include(non_viewable_team) person.viewable_teams.should be_include(public_team) + person.viewable_teams.should_not be_include(joined_team) end end end \ No newline at end of file From d661f4736a224002dbf58c41330ce6eb9e2c3144 Mon Sep 17 00:00:00 2001 From: szpyxlwoni Date: Wed, 14 Nov 2012 03:48:16 -0500 Subject: [PATCH 2/6] add to a team avaliable to my organisation --- app/controllers/teams_controller.rb | 1 - spec/controllers/teams_controller_spec.rb | 10 +++++++++ y | 27 +++++++++++++++++++++++ y.pub | 1 + 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 y create mode 100644 y.pub diff --git a/app/controllers/teams_controller.rb b/app/controllers/teams_controller.rb index 1c6cfe7..afb4d6b 100644 --- a/app/controllers/teams_controller.rb +++ b/app/controllers/teams_controller.rb @@ -43,7 +43,6 @@ class TeamsController < ApplicationController def join with_team do |team| - organisation = Organisation.find(team.organisations) Membership.create team: team, person: current_person redirect_to "/teams/#{team.slug}" end diff --git a/spec/controllers/teams_controller_spec.rb b/spec/controllers/teams_controller_spec.rb index 1edd1b5..4a489e4 100644 --- a/spec/controllers/teams_controller_spec.rb +++ b/spec/controllers/teams_controller_spec.rb @@ -59,6 +59,16 @@ describe TeamsController do lambda do post :join, :slug => team.slug end.should change(Membership, :count).by(1) + new_membership = Membership.find(:last) + new_membership.person.allowed_to_view_team?(new_membership.team).should == true + end + + it 'ensure person can not join a team that he is not belong to the organisation of that team' do + team = Team.create(name: 'LSP', slug: 'lsp') + Organisation.find(:last).teams << team + lambda do + post :join, :slug => team.slug + end.should change(Membership, :count).by(0) end end end \ No newline at end of file diff --git a/y b/y new file mode 100644 index 0000000..96e352e --- /dev/null +++ b/y @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAxN3l49QjL09eRYl/IwRZGp54DYj9lVdjk6r3T+aPSMcoI4WH +DdwLND18KIB/m/T/wkbkYkJeTrgTPRMEPs+DEW5zeSJNXZJQQ/WRI590TMb5RAvw +oXoOS5janq8zgqmtBv3ARtFP1sWpVhE7jbbmDwsp1FqTVVnGbTHPvOY7XTsoeM4y +6rnBtOifrnaSyGlizSAbFuxSbd721UQ966kL3fm+uvXiPA3pH8Vn5BNbLsIHyLRO +N+f8w82e++pOkOsrGpB7eeIDJTrc6tWRUoPrg/a1OzEfInqxNq5i1wcn3M4jMqj1 +dPJXy51dDerxo14cG/1MJOwK1sphAPUn+F6HuQIDAQABAoIBAQC+Yyq0jrAITOWK +slJ19vqFN8Q6ssUq7Hysjqbmar8fTxuOXtAhozBisSOlt7+xf9roc87jB/RUhMh2 +RDHS3LSQ4xRhjb7sQ1fEoXRf0xGSPstJ95IbWAMDMSwcUquqLZXcMQMGed6QglAl +oDzL7JnI6q7lY0MhQ9UWPRn+QVof6iY+1I/HZeRRzXOYk2aVSEb9dvtODLpyY0Gx +Xm5h/S3TrrFa+YjFlmjZZQPrPr3UljJzVoqGVRx93IiToA3DRXJGzNggqB3eVfBz +Ub+/msZYZJs++cFSvyUGN1eTi+Cjylzkq06I5mv3wEbpJp7mS3fCN0CRn1eS8h02 +0UV5L9cRAoGBAPZTQHIPe9kDOugicoYIO8Mc0gfZ1VLCJBdrsK8rfdfNvGMctngd +5szRuJ3Afrli3lymRFm1wEpJ+Ek/wCicHnWFiIE5bDP/+ngTGcHgCD6NIabhnPvZ +aG9ImHAd7VuvPLW1ZuwSpB+TsahBYNyeq1/FBgT0KX4SfR0Dn26pTTQnAoGBAMyZ +Wi/3Bjf1i4ILZdk9r8eSdLfq91R2us7I6l4aCHe1EPzm5FM6QJRdX/2IJOfF5Sil +9qkeW5SbTjVGo7yR7Mo2iQYjDemdu0DCl48S/OdbcW+6F/lK6UkZF8hhnY2fDjOi +/69gDlEr5jfrZGOE6B/r8vxAxXxLSF6YedD8AHEfAoGBAMyb3r5gCjn7KuVEJ+kZ +0bqCqBwJX998kEo8E+mNsNyfcsrJQPCJtfuQgU/YY+tOKvK+0avLA00yIGGH6PBS +riJkpzzgG/cdvEodY5ndpDuBM+DRK3sv3kYCAU2wLkeoSj+NzU5vNZFdN4dRt0nL +KwNEP3nB7u1gIjkFl1tumkilAoGAEJvCPnKHBrPgB0Z1lhTz1/eDkgp42Vpp/68/ +lzP1zAHexyjXEAqCg4iw6hvLIyVlXM9cHo5gUMfqqVh6oiwWVLPom57s2jH7qV4i +f3LDJOS/aJpqp8n09gIbdCC4cW6f8IEi0FGz19MAdTmehJWdYjn9F40KevSBg2xN +NzG9t3ECgYEAi15uISgI0TKQIVZFsjvnp72uotQ72qJ4SDeSehzE9fP+gzAIpVdq +HkivoezfBEUtCc2+Oo5llPfB+AD1oODya3fOSlA94sv5w53ztz6jBbAdVzY7oiUH +El+CLWFzTbYZtusd0IjZB+tcUJZxmNS3ZV9naG3/mM5Xena/lJmpPpI= +-----END RSA PRIVATE KEY----- diff --git a/y.pub b/y.pub new file mode 100644 index 0000000..718589a --- /dev/null +++ b/y.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDE3eXj1CMvT15FiX8jBFkanngNiP2VV2OTqvdP5o9IxygjhYcN3As0PXwogH+b9P/CRuRiQl5OuBM9EwQ+z4MRbnN5Ik1dklBD9ZEjn3RMxvlEC/Cheg5LmNqerzOCqa0G/cBG0U/WxalWETuNtuYPCynUWpNVWcZtMc+85jtdOyh4zjLqucG06J+udpLIaWLNIBsW7FJt3vbVRD3rqQvd+b669eI8DekfxWfkE1suwgfItE435/zDzZ776k6Q6ysakHt54gMlOtzq1ZFSg+uD9rU7MR8ierE2rmLXByfcziMyqPV08lfLnV0N6vGjXhwb/Uwk7ArWymEA9Sf4Xoe5 szp@ubuntu From 091ee5ebbab5c4c2c8c5010b7315e17d48212536 Mon Sep 17 00:00:00 2001 From: Jeff Xiong Date: Wed, 14 Nov 2012 17:01:08 +0800 Subject: [PATCH 3/6] rm mis-committed files --- y | 27 --------------------------- y.pub | 1 - 2 files changed, 28 deletions(-) delete mode 100644 y delete mode 100644 y.pub diff --git a/y b/y deleted file mode 100644 index 96e352e..0000000 --- a/y +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEAxN3l49QjL09eRYl/IwRZGp54DYj9lVdjk6r3T+aPSMcoI4WH -DdwLND18KIB/m/T/wkbkYkJeTrgTPRMEPs+DEW5zeSJNXZJQQ/WRI590TMb5RAvw -oXoOS5janq8zgqmtBv3ARtFP1sWpVhE7jbbmDwsp1FqTVVnGbTHPvOY7XTsoeM4y -6rnBtOifrnaSyGlizSAbFuxSbd721UQ966kL3fm+uvXiPA3pH8Vn5BNbLsIHyLRO -N+f8w82e++pOkOsrGpB7eeIDJTrc6tWRUoPrg/a1OzEfInqxNq5i1wcn3M4jMqj1 -dPJXy51dDerxo14cG/1MJOwK1sphAPUn+F6HuQIDAQABAoIBAQC+Yyq0jrAITOWK -slJ19vqFN8Q6ssUq7Hysjqbmar8fTxuOXtAhozBisSOlt7+xf9roc87jB/RUhMh2 -RDHS3LSQ4xRhjb7sQ1fEoXRf0xGSPstJ95IbWAMDMSwcUquqLZXcMQMGed6QglAl -oDzL7JnI6q7lY0MhQ9UWPRn+QVof6iY+1I/HZeRRzXOYk2aVSEb9dvtODLpyY0Gx -Xm5h/S3TrrFa+YjFlmjZZQPrPr3UljJzVoqGVRx93IiToA3DRXJGzNggqB3eVfBz -Ub+/msZYZJs++cFSvyUGN1eTi+Cjylzkq06I5mv3wEbpJp7mS3fCN0CRn1eS8h02 -0UV5L9cRAoGBAPZTQHIPe9kDOugicoYIO8Mc0gfZ1VLCJBdrsK8rfdfNvGMctngd -5szRuJ3Afrli3lymRFm1wEpJ+Ek/wCicHnWFiIE5bDP/+ngTGcHgCD6NIabhnPvZ -aG9ImHAd7VuvPLW1ZuwSpB+TsahBYNyeq1/FBgT0KX4SfR0Dn26pTTQnAoGBAMyZ -Wi/3Bjf1i4ILZdk9r8eSdLfq91R2us7I6l4aCHe1EPzm5FM6QJRdX/2IJOfF5Sil -9qkeW5SbTjVGo7yR7Mo2iQYjDemdu0DCl48S/OdbcW+6F/lK6UkZF8hhnY2fDjOi -/69gDlEr5jfrZGOE6B/r8vxAxXxLSF6YedD8AHEfAoGBAMyb3r5gCjn7KuVEJ+kZ -0bqCqBwJX998kEo8E+mNsNyfcsrJQPCJtfuQgU/YY+tOKvK+0avLA00yIGGH6PBS -riJkpzzgG/cdvEodY5ndpDuBM+DRK3sv3kYCAU2wLkeoSj+NzU5vNZFdN4dRt0nL -KwNEP3nB7u1gIjkFl1tumkilAoGAEJvCPnKHBrPgB0Z1lhTz1/eDkgp42Vpp/68/ -lzP1zAHexyjXEAqCg4iw6hvLIyVlXM9cHo5gUMfqqVh6oiwWVLPom57s2jH7qV4i -f3LDJOS/aJpqp8n09gIbdCC4cW6f8IEi0FGz19MAdTmehJWdYjn9F40KevSBg2xN -NzG9t3ECgYEAi15uISgI0TKQIVZFsjvnp72uotQ72qJ4SDeSehzE9fP+gzAIpVdq -HkivoezfBEUtCc2+Oo5llPfB+AD1oODya3fOSlA94sv5w53ztz6jBbAdVzY7oiUH -El+CLWFzTbYZtusd0IjZB+tcUJZxmNS3ZV9naG3/mM5Xena/lJmpPpI= ------END RSA PRIVATE KEY----- diff --git a/y.pub b/y.pub deleted file mode 100644 index 718589a..0000000 --- a/y.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDE3eXj1CMvT15FiX8jBFkanngNiP2VV2OTqvdP5o9IxygjhYcN3As0PXwogH+b9P/CRuRiQl5OuBM9EwQ+z4MRbnN5Ik1dklBD9ZEjn3RMxvlEC/Cheg5LmNqerzOCqa0G/cBG0U/WxalWETuNtuYPCynUWpNVWcZtMc+85jtdOyh4zjLqucG06J+udpLIaWLNIBsW7FJt3vbVRD3rqQvd+b669eI8DekfxWfkE1suwgfItE435/zDzZ776k6Q6ysakHt54gMlOtzq1ZFSg+uD9rU7MR8ierE2rmLXByfcziMyqPV08lfLnV0N6vGjXhwb/Uwk7ArWymEA9Sf4Xoe5 szp@ubuntu From c3e210d035f99f7ffdafaf393c11e2d845207d45 Mon Sep 17 00:00:00 2001 From: Junv Date: Wed, 14 Nov 2012 17:08:00 +0800 Subject: [PATCH 4/6] add quit from a team --- app/assets/stylesheets/application.css.scss | 14 ++++++++++++++ app/controllers/teams_controller.rb | 7 ++++++- app/views/teams/show.html.slim | 15 ++++++++------- config/routes.rb | 1 + spec/controllers/teams_controller_spec.rb | 15 ++++++++++++--- 5 files changed, 41 insertions(+), 11 deletions(-) diff --git a/app/assets/stylesheets/application.css.scss b/app/assets/stylesheets/application.css.scss index f2782ab..07359dd 100644 --- a/app/assets/stylesheets/application.css.scss +++ b/app/assets/stylesheets/application.css.scss @@ -43,3 +43,17 @@ body { .social_media img { margin: 5px; } +.team-action-form{ + float:left; + margin-left: 20px; + margin-top:16px; +} +.clear-left{ + clear:left; +} +.clear-right{ + clear:right; +} +.clear{ + clear: both; +} \ No newline at end of file diff --git a/app/controllers/teams_controller.rb b/app/controllers/teams_controller.rb index 1c6cfe7..cd36781 100644 --- a/app/controllers/teams_controller.rb +++ b/app/controllers/teams_controller.rb @@ -43,7 +43,6 @@ class TeamsController < ApplicationController def join with_team do |team| - organisation = Organisation.find(team.organisations) Membership.create team: team, person: current_person redirect_to "/teams/#{team.slug}" end @@ -65,4 +64,10 @@ class TeamsController < ApplicationController render :quiz end end + def quit + with_team do |team| + current_person.teams.delete(team) + end + redirect_to "/teams" + end end \ No newline at end of file diff --git a/app/views/teams/show.html.slim b/app/views/teams/show.html.slim index a5e4e6b..5ae938b 100644 --- a/app/views/teams/show.html.slim +++ b/app/views/teams/show.html.slim @@ -11,17 +11,18 @@ - content_for :javascript_includes do = javascript_include_tag 'teams_show' -h1 = @team.name +h1 = @team.name - if current_person.approved_teams.include? @team - =form_tag "/teams/#{@team.slug}/quit" - =submit_tag 'Quit',id:"join-team",class:"btn btn-danger " + =form_tag "/teams/#{@team.slug}/quit" + =submit_tag 'Quit Team',id:"join-team",class:"btn btn-danger " -else - =form_tag "/teams/#{@team.slug}/join" - =submit_tag 'Join',id:"join-team",class:"btn btn-primary " + =form_tag "/teams/#{@team.slug}/join" + =submit_tag 'Join Team',id:"join-team",class:"btn btn-primary " -br -form.form-inline +p + +form_tag.form-inline label.span1.checkbox input type="checkbox" id="show-past" past label.span1.checkbox diff --git a/config/routes.rb b/config/routes.rb index 77bce4c..8efc5a9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -29,6 +29,7 @@ Ocelots::Application.routes.draw do get 'teams/:slug' => 'teams#show' post 'teams/:slug/add' => 'teams#add' post 'teams/:slug/join' => 'teams#join' + post 'teams/:slug/quit' => 'teams#quit' put 'membership/:id' => 'membership#update', as: 'membership' post 'membership/leave' => 'membership#leave' diff --git a/spec/controllers/teams_controller_spec.rb b/spec/controllers/teams_controller_spec.rb index 1edd1b5..553ef1e 100644 --- a/spec/controllers/teams_controller_spec.rb +++ b/spec/controllers/teams_controller_spec.rb @@ -30,15 +30,15 @@ describe TeamsController do team = Team.create(name: 'LSP', slug: 'lsp') get :show, :slug => team.slug response.should be_success - assert_select '#join-team',{:value=> 'Join'} + assert_select '#join-team',{:value=> 'Join Team'} end - it 'ensure a button display with joined if we already joined this team' do + it 'ensure a button display with quit team if we already joined this team' do team = @person.teams.create(name: 'LSP', slug: 'lsp') get :show ,:slug => team.slug response.should be_success - assert_select '#join-team',{:value=> 'Quit'} + assert_select '#join-team',{:value=> 'Quit Team'} end end @@ -61,4 +61,13 @@ describe TeamsController do end.should change(Membership, :count).by(1) end end + describe :quit do + it 'ensure when people quit a team then destroy a membership' do + team = Team.create(name: 'LSP', slug: 'lsp') + lambda do + post :join, :slug => team.slug + post :quit, :slug => team.slug + end.should change(Membership,:count).by(0) + end + end end \ No newline at end of file From 038a93c85a3fb5a9add34c98e5c1c6044e23fa81 Mon Sep 17 00:00:00 2001 From: Junv Date: Wed, 14 Nov 2012 17:26:49 +0800 Subject: [PATCH 5/6] add quit from team --- app/controllers/teams_controller.rb | 8 +++----- app/views/teams/show.html.slim | 2 +- spec/controllers/teams_controller_spec.rb | 10 ++++++++++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/controllers/teams_controller.rb b/app/controllers/teams_controller.rb index cd36781..bd5d776 100644 --- a/app/controllers/teams_controller.rb +++ b/app/controllers/teams_controller.rb @@ -18,7 +18,7 @@ class TeamsController < ApplicationController organisations = params[:org_ids].map { |org_id| Organisation.find(org_id) } organisations.each{|org| org.teams << @team} end - Membership.create team: @team, person: current_person + current_person.teams << @team redirect_to "/teams/#{@team.slug}" else @@ -31,9 +31,7 @@ class TeamsController < ApplicationController person = Person.find_by_email params[:email] person = Person.create_for_email params[:email] unless person unless person.teams.include? team - if person == current_person - Membership.create team: team, person: person - else + unless person == current_person Membership.create_pending_membership current_person, team, person end end @@ -43,7 +41,7 @@ class TeamsController < ApplicationController def join with_team do |team| - Membership.create team: team, person: current_person + current_person.teams << team redirect_to "/teams/#{team.slug}" end end diff --git a/app/views/teams/show.html.slim b/app/views/teams/show.html.slim index 5ae938b..23ee959 100644 --- a/app/views/teams/show.html.slim +++ b/app/views/teams/show.html.slim @@ -22,7 +22,7 @@ h1 = @team.name p -form_tag.form-inline +form.form-inline label.span1.checkbox input type="checkbox" id="show-past" past label.span1.checkbox diff --git a/spec/controllers/teams_controller_spec.rb b/spec/controllers/teams_controller_spec.rb index 553ef1e..8bf2b2c 100644 --- a/spec/controllers/teams_controller_spec.rb +++ b/spec/controllers/teams_controller_spec.rb @@ -59,6 +59,16 @@ describe TeamsController do lambda do post :join, :slug => team.slug end.should change(Membership, :count).by(1) + new_membership = Membership.find(:last) + new_membership.person.allowed_to_view_team?(new_membership.team).should == true + end + + it 'ensure person can not join a team that he is not belong to the organisation of that team' do + team = Team.create(name: 'LSP', slug: 'lsp') + Organisation.find(:last).teams << team + lambda do + post :join, :slug => team.slug + end.should change(Membership, :count).by(0) end end describe :quit do From 958fa365c5aa5ed97c2168dc0d2d89b27128db9b Mon Sep 17 00:00:00 2001 From: Jeff Xiong Date: Wed, 14 Nov 2012 18:22:43 +0800 Subject: [PATCH 6/6] get rid of annoying outputs from controller specs --- .gitignore | 1 + Gemfile | 1 + Gemfile.lock | 5 +++++ Rakefile | 2 +- app/models/membership.rb | 2 +- app/views/teams/show.html.slim | 20 ++++++++++++-------- lib/tasks/analysis.rake | 4 ++-- 7 files changed, 23 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index c966364..82e2f53 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ public/system public/assets analyzer +coverage diff --git a/Gemfile b/Gemfile index 009ce28..110d121 100644 --- a/Gemfile +++ b/Gemfile @@ -25,5 +25,6 @@ group :development, :test do gem "rails_best_practices", "~> 1.11.1" gem "flay" gem 'rspec-rails' + gem 'simplecov' gem 'machinist' end diff --git a/Gemfile.lock b/Gemfile.lock index 8bf66a4..2b15d06 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -170,6 +170,10 @@ GEM faraday (~> 0.8.1) jwt (>= 0.1.5) multi_json (>= 1.0.0) + simplecov (0.7.1) + multi_json (~> 1.0) + simplecov-html (~> 0.7.1) + simplecov-html (0.7.1) slim (1.3.0) temple (~> 0.4.1) tilt (~> 1.3.3) @@ -220,6 +224,7 @@ DEPENDENCIES rails_best_practices (~> 1.11.1) rspec-rails sass-rails (~> 3.2.3) + simplecov slim tddium therubyracer diff --git a/Rakefile b/Rakefile index dc0de7e..18650ad 100644 --- a/Rakefile +++ b/Rakefile @@ -6,4 +6,4 @@ require File.expand_path('../config/application', __FILE__) Ocelots::Application.load_tasks -task :ci => %w(db:migrate db:test:prepare analyzer:flay analyzer:rails_best_practices spec stats) \ No newline at end of file +task :ci => %w(db:migrate db:test:prepare analyzer:flay analyzer:rails_best_practices simplecov stats) \ No newline at end of file diff --git a/app/models/membership.rb b/app/models/membership.rb index 972f725..32fe524 100644 --- a/app/models/membership.rb +++ b/app/models/membership.rb @@ -8,7 +8,7 @@ class Membership < ActiveRecord::Base belongs_to :person belongs_to :team - + delegate :email, to: :person delegate :name, to: :team, prefix: true diff --git a/app/views/teams/show.html.slim b/app/views/teams/show.html.slim index 23ee959..66f3ed2 100644 --- a/app/views/teams/show.html.slim +++ b/app/views/teams/show.html.slim @@ -14,23 +14,27 @@ h1 = @team.name - if current_person.approved_teams.include? @team - =form_tag "/teams/#{@team.slug}/quit" - =submit_tag 'Quit Team',id:"join-team",class:"btn btn-danger " + =form_tag "/teams/#{@team.slug}/quit" do + =submit_tag 'Quit Team',id:"join-team",class:"btn btn-danger " -else - =form_tag "/teams/#{@team.slug}/join" - =submit_tag 'Join Team',id:"join-team",class:"btn btn-primary " + =form_tag "/teams/#{@team.slug}/join" do + =submit_tag 'Join Team',id:"join-team",class:"btn btn-primary " p form.form-inline label.span1.checkbox - input type="checkbox" id="show-past" past + input type="checkbox" id="show-past" + span past label.span1.checkbox - input type="checkbox" id="show-current" checked="true" current + input type="checkbox" id="show-current" checked="true" + span current label.span1.checkbox - input type="checkbox" id="show-future" future + input type="checkbox" id="show-future" + span future label.span1.checkbox - input type="checkbox" id="show-pending" pending + input type="checkbox" id="show-pending" + span pending input.span2.search-query id="show-filter" type="text" placeholder="search" div id="add_new" style="display:none;" diff --git a/lib/tasks/analysis.rake b/lib/tasks/analysis.rake index 7f1509d..08b4a8e 100644 --- a/lib/tasks/analysis.rake +++ b/lib/tasks/analysis.rake @@ -13,13 +13,13 @@ namespace :analyzer do }) analyzer.analyze analyzer.output - fail "found bad practices, see details in " + output_file if analyzer.runner.errors.size > 37 + fail "found bad practices, see details in " + output_file if analyzer.runner.errors.size > 36 end desc "run flay and analyze code for structural similarities" task :flay do output = `flay #{FileList["lib/**/*.rb", "app/**/*.rb"].join(' ')}` fail "Error #{$?}: #{output}" unless $? == 0 - puts output + puts output end end