From 5f24bdb7d067df9204e08e126f43c071116089b0 Mon Sep 17 00:00:00 2001 From: Hiroyuki Sato Date: Wed, 21 Aug 2013 16:55:18 +0900 Subject: [PATCH] Render not found when failing to look for a commit --- app/controllers/projects/network_controller.rb | 4 ---- features/project/network.feature | 4 ++++ features/steps/project/project_network_graph.rb | 7 +++++++ features/steps/shared/project.rb | 4 ++++ lib/extracts_path.rb | 16 ++++++++++------ 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/app/controllers/projects/network_controller.rb b/app/controllers/projects/network_controller.rb index e4a84f8..9832495 100644 --- a/app/controllers/projects/network_controller.rb +++ b/app/controllers/projects/network_controller.rb @@ -8,10 +8,6 @@ class Projects::NetworkController < Projects::ApplicationController before_filter :require_non_empty_project def show - if @options[:q] - @commit = @project.repository.commit(@options[:q]) || @commit - end - respond_to do |format| format.html diff --git a/features/project/network.feature b/features/project/network.feature index f98e19b..ceae08c 100644 --- a/features/project/network.feature +++ b/features/project/network.feature @@ -34,3 +34,7 @@ Feature: Project Network Graph Then page should not have content not cotaining "v2.1.0" When click "Show only selected branch" checkbox Then page should have content not cotaining "v2.1.0" + + Scenario: I should fail to look for a commit + When I look for a commit by ";" + Then page status code should be 404 diff --git a/features/steps/project/project_network_graph.rb b/features/steps/project/project_network_graph.rb index c883479..b3be2a4 100644 --- a/features/steps/project/project_network_graph.rb +++ b/features/steps/project/project_network_graph.rb @@ -87,4 +87,11 @@ class ProjectNetworkGraph < Spinach::FeatureSteps page.should have_content 'v2.1.0' end end + + When 'I look for a commit by ";"' do + within ".content .search" do + fill_in 'q', with: ';' + find('button').click + end + end end diff --git a/features/steps/shared/project.rb b/features/steps/shared/project.rb index 66553e1..c5d8b62 100644 --- a/features/steps/shared/project.rb +++ b/features/steps/shared/project.rb @@ -51,6 +51,10 @@ module SharedProject page.should have_content("Features:") end + Then 'page status code should be 404' do + page.status_code.should == 404 + end + def current_project @project ||= Project.first end diff --git a/lib/extracts_path.rb b/lib/extracts_path.rb index d103524..f9843d5 100644 --- a/lib/extracts_path.rb +++ b/lib/extracts_path.rb @@ -94,19 +94,23 @@ module ExtractsPath # Automatically renders `not_found!` if a valid tree path could not be # resolved (e.g., when a user inserts an invalid path or ref). def assign_ref_vars + # assign allowed options + allowed_options = ["filter_ref", "q"] + @options = params.select {|key, value| allowed_options.include?(key) && !value.blank? } + @options = HashWithIndifferentAccess.new(@options) + @id = get_id @ref, @path = extract_ref(@id) @repo = @project.repository - @commit = @repo.commit(@ref) + if @options[:q].blank? + @commit = @repo.commit(@ref) + else + @commit = @repo.commit(@options[:q]) + end @tree = Tree.new(@repo, @commit.id, @ref, @path) @hex_path = Digest::SHA1.hexdigest(@path) @logs_path = logs_file_project_ref_path(@project, @ref, @path) - # assign allowed options - allowed_options = ["filter_ref", "q"] - @options = params.select {|key, value| allowed_options.include?(key) && !value.blank? } - @options = HashWithIndifferentAccess.new(@options) - raise InvalidPathError unless @tree.exists? rescue RuntimeError, NoMethodError, InvalidPathError not_found! -- libgit2 0.21.2