summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/merge_requests_controller.rb3
-rw-r--r--app/helpers/merge_requests_helper.rb10
-rw-r--r--app/models/merge_request.rb15
-rw-r--r--app/views/merge_requests/_merge_request.html.erb2
-rw-r--r--app/views/merge_requests/index.html.erb7
-rw-r--r--public/stylesheets/base.css2
-rw-r--r--test/functional/merge_requests_controller_test.rb9
-rw-r--r--test/unit/merge_request_test.rb29
8 files changed, 74 insertions, 3 deletions
diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb
index dcaf0eb..e28aa66 100644
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -33,7 +33,8 @@ class MergeRequestsController < ApplicationController
renders_in_site_specific_context
def index
- @open_merge_requests = @repository.merge_requests.open
+ #@open_merge_requests = @repository.merge_requests.open
+ @open_merge_requests = @repository.merge_requests.from_filter(params[:status])
@recently_closed_merge_requests = @repository.merge_requests.closed.find(:all, {
:limit => 10, :order => "updated_at desc"
})
diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb
index 0c132e4..19aefd3 100644
--- a/app/helpers/merge_requests_helper.rb
+++ b/app/helpers/merge_requests_helper.rb
@@ -19,5 +19,13 @@
#++
module MergeRequestsHelper
-
+ def link_to_status(status)
+ if params[:status].blank? && status == "open"
+ link_to(status.titlecase, {:status => status}, {:class => "selected"})
+ elsif params[:status] == status
+ link_to(status.titlecase, {:status => status}, {:class => "selected"})
+ else
+ link_to(status.titlecase, {:status => status})
+ end
+ end
end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 288756d..dab8dad 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -72,6 +72,8 @@ class MergeRequest < ActiveRecord::Base
named_scope :open, :conditions => ['status in (?)', [STATUS_OPEN, STATUS_VERIFYING]]
named_scope :closed, :conditions => ["status in (?)", [STATUS_MERGED, STATUS_REJECTED]]
+ named_scope :merged, :conditions => ["status = ?", [STATUS_MERGED]]
+ named_scope :rejected, :conditions => ["status = ?", [STATUS_REJECTED]]
def self.human_name
I18n.t("activerecord.models.merge_request")
@@ -88,6 +90,19 @@ class MergeRequest < ActiveRecord::Base
}
end
+ def self.from_filter(filter_name = nil)
+ case filter_name
+ when "open"
+ open
+ when "merged"
+ merged
+ when "rejected"
+ rejected
+ else
+ open
+ end
+ end
+
def status_string
self.class.status_string(status)
end
diff --git a/app/views/merge_requests/_merge_request.html.erb b/app/views/merge_requests/_merge_request.html.erb
index 31dd314..19d35f9 100644
--- a/app/views/merge_requests/_merge_request.html.erb
+++ b/app/views/merge_requests/_merge_request.html.erb
@@ -38,7 +38,7 @@
<%= merge_request.created_at.to_s(:short) -%>
- <% if !no_link && merge_request.open_or_in_verification? -%>
+ <% if !no_link -%>
| <strong>
<%= link_to t("views.merges.review"),
repo_owner_path(merge_request.target_repository,
diff --git a/app/views/merge_requests/index.html.erb b/app/views/merge_requests/index.html.erb
index 965d880..cedaf56 100644
--- a/app/views/merge_requests/index.html.erb
+++ b/app/views/merge_requests/index.html.erb
@@ -36,6 +36,13 @@
<% end -%>
<% content_for :sidebar do -%>
+ <h4>Filter</h4>
+ <ul class="links">
+ <% ["open", "merged", "rejected"].each do |status| -%>
+ <li class="merge_requests"><%= link_to_status(status) -%></li>
+ <% end -%>
+ </ul>
+
<h4>Recently handled merge requests</h4>
<ul class="recently-closed-merge-requests">
<% @recently_closed_merge_requests.each do |merge_request| -%>
diff --git a/public/stylesheets/base.css b/public/stylesheets/base.css
index f9d0af9..11cd1e6 100644
--- a/public/stylesheets/base.css
+++ b/public/stylesheets/base.css
@@ -609,6 +609,8 @@ li.wiki a {background-image: url('/images/silk/book_open.png');}
li.memberships a, li.committerships a {background-image: url('/images/silk/group_gear.png');}
li.membership a, li.committership a {background-image: url('/images/silk/group_edit.png');}
+li.merge_requests a.selected { color: #09460F;}
+
.with_icons li {
padding-bottom: 3px;
}
diff --git a/test/functional/merge_requests_controller_test.rb b/test/functional/merge_requests_controller_test.rb
index 4bea783..6fd9312 100644
--- a/test/functional/merge_requests_controller_test.rb
+++ b/test/functional/merge_requests_controller_test.rb
@@ -53,6 +53,15 @@ class MergeRequestsControllerTest < ActionController::TestCase
:repository_id => @target_repository.to_param
assert_equal @target_repository.comments.count, assigns(:comment_count)
end
+
+ should "filter on status" do
+ @merge_request.update_attribute(:status, MergeRequest::STATUS_MERGED)
+ get :index, :project_id => @project.to_param,
+ :repository_id => @target_repository.to_param,
+ :status => "merged"
+ assert_response :success
+ assert_equal [@merge_request], assigns(:open_merge_requests)
+ end
end
context "#show (GET)" do
diff --git a/test/unit/merge_request_test.rb b/test/unit/merge_request_test.rb
index edd97a5..f71de21 100644
--- a/test/unit/merge_request_test.rb
+++ b/test/unit/merge_request_test.rb
@@ -303,7 +303,36 @@ class MergeRequestTest < ActiveSupport::TestCase
should 'have a setter and getter' do
@merge_request.updated_by = users(:mike)
assert_equal users(:mike), @merge_request.updated_by
+ end
+ end
+
+ context "from_filter" do
+ setup do
+ @repo = repositories(:johans)
+ end
+
+ should "default to open merge-requests" do
+ merge_requests(:moes_to_johans).update_attribute(:status, MergeRequest::STATUS_MERGED)
+ assert !@repo.merge_requests.from_filter(nil).include?(merge_requests(:moes_to_johans))
+ assert_equal [merge_requests(:moes_to_johans_open)], @repo.merge_requests.from_filter(nil)
end
+ should "fall back to open merge-requests on invalid filter name" do
+ merge_requests(:moes_to_johans).update_attribute(:status, MergeRequest::STATUS_MERGED)
+ assert !@repo.merge_requests.from_filter("kittens").include?(merge_requests(:moes_to_johans))
+ assert_equal [merge_requests(:moes_to_johans_open)], @repo.merge_requests.from_filter("kittens")
+ end
+
+ should "find merged merge-requests" do
+ merge_requests(:moes_to_johans).update_attribute(:status, MergeRequest::STATUS_MERGED)
+ assert !@repo.merge_requests.from_filter("merged").include?(merge_requests(:moes_to_johans_open))
+ assert_equal [merge_requests(:moes_to_johans)], @repo.merge_requests.from_filter("merged")
+ end
+
+ should "find rejected merge-requests" do
+ merge_requests(:moes_to_johans).update_attribute(:status, MergeRequest::STATUS_REJECTED)
+ assert !@repo.merge_requests.from_filter("rejected").include?(merge_requests(:moes_to_johans_open))
+ assert_equal [merge_requests(:moes_to_johans)], @repo.merge_requests.from_filter("rejected")
+ end
end
end