Commit 2c46b35b100be89e0549336616391aef2337454d
Exists in
spb-stable
and in
2 other branches
Merge branch 'profile-personal-projects' into 'master'
Show only personal projects on user page When I visit user profile page I see all projects he have access too (if i can also access same projects). That means I see a list of hundreds projects if he joined several groups.  It inefficient because: * Slow page load if a lot of projects * Hard to find his personal projects I propose to replace it with `Personal projects` list. It has next advantages: * we don't load huge useless list of projects * I can see if user have personal projects I have access to * faster page load. We don't load all projects from all groups where user invited  Partly fixes #1135
Showing
6 changed files
with
28 additions
and
21 deletions
Show diff stats
app/controllers/users_controller.rb
| ... | ... | @@ -4,10 +4,12 @@ class UsersController < ApplicationController |
| 4 | 4 | |
| 5 | 5 | def show |
| 6 | 6 | @user = User.find_by_username!(params[:username]) |
| 7 | - @projects = @user.authorized_projects.accessible_to(current_user) | |
| 8 | - if !current_user && @projects.empty? | |
| 7 | + @projects = Project.personal(@user).accessible_to(current_user) | |
| 8 | + | |
| 9 | + unless current_user || @user.public_profile? | |
| 9 | 10 | return authenticate_user! |
| 10 | 11 | end |
| 12 | + | |
| 11 | 13 | @groups = @user.groups.accessible_to(current_user) |
| 12 | 14 | @events = @user.recent_events.where(project_id: @projects.pluck(:id)).limit(20) |
| 13 | 15 | @title = @user.name | ... | ... |
app/models/user.rb
app/views/users/_projects.html.haml
app/views/users/show.html.haml
features/steps/shared/project.rb
| ... | ... | @@ -102,24 +102,24 @@ module SharedProject |
| 102 | 102 | page.should_not have_content "Community" |
| 103 | 103 | end |
| 104 | 104 | |
| 105 | - step '"John Doe" is authorized to private project "Enterprise"' do | |
| 105 | + step '"John Doe" owns private project "Enterprise"' do | |
| 106 | 106 | user = user_exists("John Doe", username: "john_doe") |
| 107 | 107 | project = Project.find_by(name: "Enterprise") |
| 108 | - project ||= create(:project, name: "Enterprise", namespace: user.namespace) | |
| 108 | + project ||= create(:empty_project, name: "Enterprise", namespace: user.namespace) | |
| 109 | 109 | project.team << [user, :master] |
| 110 | 110 | end |
| 111 | 111 | |
| 112 | - step '"John Doe" is authorized to internal project "Internal"' do | |
| 112 | + step '"John Doe" owns internal project "Internal"' do | |
| 113 | 113 | user = user_exists("John Doe", username: "john_doe") |
| 114 | 114 | project = Project.find_by(name: "Internal") |
| 115 | - project ||= create :project, :internal, name: 'Internal' | |
| 115 | + project ||= create :empty_project, :internal, name: 'Internal', namespace: user.namespace | |
| 116 | 116 | project.team << [user, :master] |
| 117 | 117 | end |
| 118 | 118 | |
| 119 | - step '"John Doe" is authorized to public project "Community"' do | |
| 119 | + step '"John Doe" owns public project "Community"' do | |
| 120 | 120 | user = user_exists("John Doe", username: "john_doe") |
| 121 | 121 | project = Project.find_by(name: "Community") |
| 122 | - project ||= create :project, :public, name: 'Community' | |
| 122 | + project ||= create :empty_project, :public, name: 'Community', namespace: user.namespace | |
| 123 | 123 | project.team << [user, :master] |
| 124 | 124 | end |
| 125 | 125 | end | ... | ... |
features/user.feature
| 1 | 1 | Feature: User |
| 2 | 2 | Background: |
| 3 | 3 | Given User "John Doe" exists |
| 4 | - And "John Doe" is authorized to private project "Enterprise" | |
| 4 | + And "John Doe" owns private project "Enterprise" | |
| 5 | 5 | |
| 6 | 6 | # Signed out |
| 7 | 7 | |
| 8 | - Scenario: I visit user "John Doe" page while not signed in when he is authorized to a public project | |
| 9 | - Given "John Doe" is authorized to internal project "Internal" | |
| 10 | - And "John Doe" is authorized to public project "Community" | |
| 8 | + Scenario: I visit user "John Doe" page while not signed in when he owns a public project | |
| 9 | + Given "John Doe" owns internal project "Internal" | |
| 10 | + And "John Doe" owns public project "Community" | |
| 11 | 11 | When I visit user "John Doe" page |
| 12 | 12 | Then I should see user "John Doe" page |
| 13 | 13 | And I should not see project "Enterprise" |
| ... | ... | @@ -15,15 +15,15 @@ Feature: User |
| 15 | 15 | And I should see project "Community" |
| 16 | 16 | |
| 17 | 17 | Scenario: I visit user "John Doe" page while not signed in when he is not authorized to a public project |
| 18 | - Given "John Doe" is authorized to internal project "Internal" | |
| 18 | + Given "John Doe" owns internal project "Internal" | |
| 19 | 19 | When I visit user "John Doe" page |
| 20 | 20 | Then I should be redirected to sign in page |
| 21 | 21 | |
| 22 | 22 | # Signed in as someone else |
| 23 | 23 | |
| 24 | - Scenario: I visit user "John Doe" page while signed in as someone else when he is authorized to a public project | |
| 25 | - Given "John Doe" is authorized to public project "Community" | |
| 26 | - And "John Doe" is authorized to internal project "Internal" | |
| 24 | + Scenario: I visit user "John Doe" page while signed in as someone else when he owns a public project | |
| 25 | + Given "John Doe" owns public project "Community" | |
| 26 | + And "John Doe" owns internal project "Internal" | |
| 27 | 27 | And I sign in as a user |
| 28 | 28 | When I visit user "John Doe" page |
| 29 | 29 | Then I should see user "John Doe" page |
| ... | ... | @@ -32,7 +32,7 @@ Feature: User |
| 32 | 32 | And I should see project "Community" |
| 33 | 33 | |
| 34 | 34 | Scenario: I visit user "John Doe" page while signed in as someone else when he is not authorized to a public project |
| 35 | - Given "John Doe" is authorized to internal project "Internal" | |
| 35 | + Given "John Doe" owns internal project "Internal" | |
| 36 | 36 | And I sign in as a user |
| 37 | 37 | When I visit user "John Doe" page |
| 38 | 38 | Then I should see user "John Doe" page |
| ... | ... | @@ -51,8 +51,8 @@ Feature: User |
| 51 | 51 | # Signed in as the user himself |
| 52 | 52 | |
| 53 | 53 | Scenario: I visit user "John Doe" page while signed in as "John Doe" when he has a public project |
| 54 | - Given "John Doe" is authorized to internal project "Internal" | |
| 55 | - And "John Doe" is authorized to public project "Community" | |
| 54 | + Given "John Doe" owns internal project "Internal" | |
| 55 | + And "John Doe" owns public project "Community" | |
| 56 | 56 | And I sign in as "John Doe" |
| 57 | 57 | When I visit user "John Doe" page |
| 58 | 58 | Then I should see user "John Doe" page | ... | ... |