Commit e4b1f38c272ae8a052d64024867d9bcaa8398ce1
1 parent
1a3af33f
Exists in
master
and in
4 other branches
Added merge request dashboard, showing all merge requests assigned to
you across projects.
Showing
10 changed files
with
90 additions
and
2 deletions
Show diff stats
app/models/user.rb
@@ -25,6 +25,15 @@ class User < ActiveRecord::Base | @@ -25,6 +25,15 @@ class User < ActiveRecord::Base | ||
25 | :foreign_key => :assignee_id, | 25 | :foreign_key => :assignee_id, |
26 | :dependent => :destroy | 26 | :dependent => :destroy |
27 | 27 | ||
28 | + has_many :merge_requests, | ||
29 | + :foreign_key => :author_id, | ||
30 | + :dependent => :destroy | ||
31 | + | ||
32 | + has_many :assigned_merge_requests, | ||
33 | + :class_name => "MergeRequest", | ||
34 | + :foreign_key => :assignee_id, | ||
35 | + :dependent => :destroy | ||
36 | + | ||
28 | before_create :ensure_authentication_token | 37 | before_create :ensure_authentication_token |
29 | alias_attribute :private_token, :authentication_token | 38 | alias_attribute :private_token, :authentication_token |
30 | scope :not_in_project, lambda { |project| where("id not in (:ids)", :ids => project.users.map(&:id) ) } | 39 | scope :not_in_project, lambda { |project| where("id not in (:ids)", :ids => project.users.map(&:id) ) } |
app/views/layouts/user.html.haml
@@ -21,6 +21,10 @@ | @@ -21,6 +21,10 @@ | ||
21 | Issues | 21 | Issues |
22 | - unless current_user.assigned_issues.empty? | 22 | - unless current_user.assigned_issues.empty? |
23 | %span{ :class => "number" }= current_user.assigned_issues.count | 23 | %span{ :class => "number" }= current_user.assigned_issues.count |
24 | + = link_to merge_requests_path, :class => current_page?(:controller => "user_merge_requests", :action => "index") ? "current" : nil do | ||
25 | + Merge Requests | ||
26 | + - unless current_user.assigned_merge_requests.empty? | ||
27 | + %span{ :class => "number" }= current_user.assigned_merge_requests.count | ||
24 | 28 | ||
25 | .project-content | 29 | .project-content |
26 | = yield | 30 | = yield |
app/views/merge_requests/_merge_request.html.haml
1 | -%a.update-item{:href => project_merge_request_path(@project, merge_request)} | 1 | +%a.update-item{:href => project_merge_request_path(merge_request.project, merge_request)} |
2 | = image_tag gravatar_icon(merge_request.author_email), :class => "left", :width => 40 | 2 | = image_tag gravatar_icon(merge_request.author_email), :class => "left", :width => 40 |
3 | %span.update-title | 3 | %span.update-title |
4 | = merge_request.title | 4 | = merge_request.title |
5 | %span.update-author | 5 | %span.update-author |
6 | + - if not @project.present? | ||
7 | + %strong= merge_request.project.name | ||
8 | + = '-' | ||
6 | %strong= merge_request.author_name | 9 | %strong= merge_request.author_name |
7 | authored | 10 | authored |
8 | = time_ago_in_words(merge_request.created_at) | 11 | = time_ago_in_words(merge_request.created_at) |
config/routes.rb
@@ -24,6 +24,7 @@ Gitlab::Application.routes.draw do | @@ -24,6 +24,7 @@ Gitlab::Application.routes.draw do | ||
24 | get "profile", :to => "profile#show" | 24 | get "profile", :to => "profile#show" |
25 | get "dashboard", :to => "dashboard#index" | 25 | get "dashboard", :to => "dashboard#index" |
26 | get "issues", :to => "user_issues#index", :as => "issues" | 26 | get "issues", :to => "user_issues#index", :as => "issues" |
27 | + get "merge_requests", :to => "user_merge_requests#index", :as => "merge_requests" | ||
27 | 28 | ||
28 | #get "profile/:id", :to => "profile#show" | 29 | #get "profile/:id", :to => "profile#show" |
29 | 30 |
spec/models/user_spec.rb
@@ -6,6 +6,8 @@ describe User do | @@ -6,6 +6,8 @@ describe User do | ||
6 | it { should have_many(:users_projects) } | 6 | it { should have_many(:users_projects) } |
7 | it { should have_many(:issues) } | 7 | it { should have_many(:issues) } |
8 | it { should have_many(:assigned_issues) } | 8 | it { should have_many(:assigned_issues) } |
9 | + it { should have_many(:merge_requests) } | ||
10 | + it { should have_many(:assigned_merge_requests) } | ||
9 | end | 11 | end |
10 | 12 | ||
11 | describe "Respond to" do | 13 | describe "Respond to" do |
spec/requests/merge_requests_spec.rb
@@ -50,7 +50,7 @@ describe "MergeRequests" do | @@ -50,7 +50,7 @@ describe "MergeRequests" do | ||
50 | end | 50 | end |
51 | 51 | ||
52 | describe "GET /merge_requests/new" do | 52 | describe "GET /merge_requests/new" do |
53 | - before do | 53 | + before do |
54 | visit new_project_merge_request_path(project) | 54 | visit new_project_merge_request_path(project) |
55 | fill_in "merge_request_title", :with => "Merge Request Title" | 55 | fill_in "merge_request_title", :with => "Merge Request Title" |
56 | select "master", :from => "merge_request_source_branch" | 56 | select "master", :from => "merge_request_source_branch" |
@@ -0,0 +1,47 @@ | @@ -0,0 +1,47 @@ | ||
1 | +require 'spec_helper' | ||
2 | + | ||
3 | +describe "User MergeRequests" do | ||
4 | + describe "GET /issues" do | ||
5 | + before do | ||
6 | + | ||
7 | + login_as :user | ||
8 | + | ||
9 | + @project1 = Factory :project, | ||
10 | + :path => "project1", | ||
11 | + :code => "TEST1" | ||
12 | + | ||
13 | + @project2 = Factory :project, | ||
14 | + :path => "project2", | ||
15 | + :code => "TEST2" | ||
16 | + | ||
17 | + @project1.add_access(@user, :read, :write) | ||
18 | + @project2.add_access(@user, :read, :write) | ||
19 | + | ||
20 | + @merge_request1 = Factory :merge_request, | ||
21 | + :author => @user, | ||
22 | + :assignee => @user, | ||
23 | + :project => @project1 | ||
24 | + | ||
25 | + @merge_request2 = Factory :merge_request, | ||
26 | + :author => @user, | ||
27 | + :assignee => @user, | ||
28 | + :project => @project2 | ||
29 | + | ||
30 | + visit merge_requests_path | ||
31 | + end | ||
32 | + | ||
33 | + subject { page } | ||
34 | + | ||
35 | + it { should have_content(@merge_request1.title) } | ||
36 | + it { should have_content(@merge_request1.project.name) } | ||
37 | + it { should have_content(@merge_request1.target_branch) } | ||
38 | + it { should have_content(@merge_request1.source_branch) } | ||
39 | + it { should have_content(@merge_request1.assignee.name) } | ||
40 | + | ||
41 | + it { should have_content(@merge_request2.title) } | ||
42 | + it { should have_content(@merge_request2.project.name) } | ||
43 | + it { should have_content(@merge_request2.target_branch) } | ||
44 | + it { should have_content(@merge_request2.source_branch) } | ||
45 | + it { should have_content(@merge_request2.assignee.name) } | ||
46 | + end | ||
47 | +end |