Commit e4b1f38c272ae8a052d64024867d9bcaa8398ce1

Authored by Ariejan de Vroom
1 parent 1a3af33f

Added merge request dashboard, showing all merge requests assigned to

you across projects.
app/controllers/user_merge_requests_controller.rb 0 → 100644
@@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
  1 +class UserMergeRequestsController < ApplicationController
  2 + before_filter :authenticate_user!
  3 +
  4 + layout "user"
  5 +
  6 + def index
  7 + @merge_requests = current_user.assigned_merge_requests
  8 + end
  9 +end
app/helpers/user_merge_requests_helper.rb 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +module UserMergeRequestsHelper
  2 +end
  3 +
app/models/user.rb
@@ -25,6 +25,15 @@ class User &lt; ActiveRecord::Base @@ -25,6 +25,15 @@ class User &lt; 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)
app/views/user_merge_requests/index.html.haml 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +- if @merge_requests.opened.count > 0
  2 + %div{ :class => "update-data ui-box ui-box-small ui-box-big" }
  3 + %h3
  4 + %span.tag.open Open
  5 + .data
  6 + = render @merge_requests.opened
  7 +
  8 + .clear
  9 + %br
  10 +
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 &quot;MergeRequests&quot; do @@ -50,7 +50,7 @@ describe &quot;MergeRequests&quot; 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"
spec/requests/user_merge_requests_spec.rb 0 → 100644
@@ -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