diff options
-rw-r--r-- | app/controllers/merge_requests_controller.rb | 3 | ||||
-rw-r--r-- | app/helpers/merge_requests_helper.rb | 10 | ||||
-rw-r--r-- | app/models/merge_request.rb | 15 | ||||
-rw-r--r-- | app/views/merge_requests/_merge_request.html.erb | 2 | ||||
-rw-r--r-- | app/views/merge_requests/index.html.erb | 7 | ||||
-rw-r--r-- | public/stylesheets/base.css | 2 | ||||
-rw-r--r-- | test/functional/merge_requests_controller_test.rb | 9 | ||||
-rw-r--r-- | test/unit/merge_request_test.rb | 29 |
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 |