diff --git a/app/controllers/user_merge_requests_controller.rb b/app/controllers/user_merge_requests_controller.rb new file mode 100644 index 00000000..7b6710d5 --- /dev/null +++ b/app/controllers/user_merge_requests_controller.rb @@ -0,0 +1,9 @@ +class UserMergeRequestsController < ApplicationController + before_filter :authenticate_user! + + layout "user" + + def index + @merge_requests = current_user.assigned_merge_requests + end +end diff --git a/app/helpers/user_merge_requests_helper.rb b/app/helpers/user_merge_requests_helper.rb new file mode 100644 index 00000000..6e5db315 --- /dev/null +++ b/app/helpers/user_merge_requests_helper.rb @@ -0,0 +1,3 @@ +module UserMergeRequestsHelper +end + diff --git a/app/models/user.rb b/app/models/user.rb index 8967859d..de0bb637 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -25,6 +25,15 @@ class User < ActiveRecord::Base :foreign_key => :assignee_id, :dependent => :destroy + has_many :merge_requests, + :foreign_key => :author_id, + :dependent => :destroy + + has_many :assigned_merge_requests, + :class_name => "MergeRequest", + :foreign_key => :assignee_id, + :dependent => :destroy + before_create :ensure_authentication_token alias_attribute :private_token, :authentication_token scope :not_in_project, lambda { |project| where("id not in (:ids)", :ids => project.users.map(&:id) ) } diff --git a/app/views/layouts/user.html.haml b/app/views/layouts/user.html.haml index 20a2f2e4..e9dd18bc 100644 --- a/app/views/layouts/user.html.haml +++ b/app/views/layouts/user.html.haml @@ -21,6 +21,10 @@ Issues - unless current_user.assigned_issues.empty? %span{ :class => "number" }= current_user.assigned_issues.count + = link_to merge_requests_path, :class => current_page?(:controller => "user_merge_requests", :action => "index") ? "current" : nil do + Merge Requests + - unless current_user.assigned_merge_requests.empty? + %span{ :class => "number" }= current_user.assigned_merge_requests.count .project-content = yield diff --git a/app/views/merge_requests/_merge_request.html.haml b/app/views/merge_requests/_merge_request.html.haml index c5bcf779..ef290833 100644 --- a/app/views/merge_requests/_merge_request.html.haml +++ b/app/views/merge_requests/_merge_request.html.haml @@ -1,8 +1,11 @@ -%a.update-item{:href => project_merge_request_path(@project, merge_request)} +%a.update-item{:href => project_merge_request_path(merge_request.project, merge_request)} = image_tag gravatar_icon(merge_request.author_email), :class => "left", :width => 40 %span.update-title = merge_request.title %span.update-author + - if not @project.present? + %strong= merge_request.project.name + = '-' %strong= merge_request.author_name authored = time_ago_in_words(merge_request.created_at) diff --git a/app/views/user_merge_requests/index.html.haml b/app/views/user_merge_requests/index.html.haml new file mode 100644 index 00000000..cf1c4143 --- /dev/null +++ b/app/views/user_merge_requests/index.html.haml @@ -0,0 +1,10 @@ +- if @merge_requests.opened.count > 0 + %div{ :class => "update-data ui-box ui-box-small ui-box-big" } + %h3 + %span.tag.open Open + .data + = render @merge_requests.opened + + .clear + %br + diff --git a/config/routes.rb b/config/routes.rb index af2d9584..a49aa7a2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -24,6 +24,7 @@ Gitlab::Application.routes.draw do get "profile", :to => "profile#show" get "dashboard", :to => "dashboard#index" get "issues", :to => "user_issues#index", :as => "issues" + get "merge_requests", :to => "user_merge_requests#index", :as => "merge_requests" #get "profile/:id", :to => "profile#show" diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 4e1f1308..3a3ac7c9 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -6,6 +6,8 @@ describe User do it { should have_many(:users_projects) } it { should have_many(:issues) } it { should have_many(:assigned_issues) } + it { should have_many(:merge_requests) } + it { should have_many(:assigned_merge_requests) } end describe "Respond to" do diff --git a/spec/requests/merge_requests_spec.rb b/spec/requests/merge_requests_spec.rb index b03ab219..bdbc8909 100644 --- a/spec/requests/merge_requests_spec.rb +++ b/spec/requests/merge_requests_spec.rb @@ -50,7 +50,7 @@ describe "MergeRequests" do end describe "GET /merge_requests/new" do - before do + before do visit new_project_merge_request_path(project) fill_in "merge_request_title", :with => "Merge Request Title" select "master", :from => "merge_request_source_branch" diff --git a/spec/requests/user_merge_requests_spec.rb b/spec/requests/user_merge_requests_spec.rb new file mode 100644 index 00000000..fb47f3dd --- /dev/null +++ b/spec/requests/user_merge_requests_spec.rb @@ -0,0 +1,47 @@ +require 'spec_helper' + +describe "User MergeRequests" do + describe "GET /issues" do + before do + + login_as :user + + @project1 = Factory :project, + :path => "project1", + :code => "TEST1" + + @project2 = Factory :project, + :path => "project2", + :code => "TEST2" + + @project1.add_access(@user, :read, :write) + @project2.add_access(@user, :read, :write) + + @merge_request1 = Factory :merge_request, + :author => @user, + :assignee => @user, + :project => @project1 + + @merge_request2 = Factory :merge_request, + :author => @user, + :assignee => @user, + :project => @project2 + + visit merge_requests_path + end + + subject { page } + + it { should have_content(@merge_request1.title) } + it { should have_content(@merge_request1.project.name) } + it { should have_content(@merge_request1.target_branch) } + it { should have_content(@merge_request1.source_branch) } + it { should have_content(@merge_request1.assignee.name) } + + it { should have_content(@merge_request2.title) } + it { should have_content(@merge_request2.project.name) } + it { should have_content(@merge_request2.target_branch) } + it { should have_content(@merge_request2.source_branch) } + it { should have_content(@merge_request2.assignee.name) } + end +end