Skip to content

Commit

Permalink
Fixed #1 Test code and Improvements by testing
Browse files Browse the repository at this point in the history
  • Loading branch information
hidakatsuya committed Aug 7, 2014
1 parent d9742bf commit e4532f8
Show file tree
Hide file tree
Showing 18 changed files with 387 additions and 26 deletions.
5 changes: 5 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
source 'https://rubygems.org'

group :test do
gem 'factory_girl'
end
11 changes: 5 additions & 6 deletions app/models/projects_default_query.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,20 @@ class ProjectsDefaultQuery < ActiveRecord::Base

validates :project_id, :query_id, numericality: { allow_nil: true }
validates :project_id, uniqueness: true, presence: true
validate :query_must_be_selectable_query
validate :query_must_be_selectable

def query
issue_query = super
return unless issue_query
return unless super

unless new_record? || selectable_query?(issue_query)
unless new_record? || selectable_query?(super)
update_attribute :query_id, nil
end
issue_query
super
end

private

def query_must_be_selectable_query
def query_must_be_selectable
return if errors.any? || query_id.blank? || !query_id_changed?

issue_query = IssueQuery.find_by_id(query_id)
Expand Down
14 changes: 9 additions & 5 deletions app/patches/controllers/issues_controller_patch.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def with_default_query
# Nothing to do
when api_request?
# Nothing to do
when show_all?
when show_all_issues?
params[:set_filter] = 1
when filter_applied?
# Nothing to do
Expand All @@ -33,10 +33,14 @@ def with_default_query
end

def retrieve_query_from_session_with_default_custom_query
if session[:query]
if default_query_module_enabled?
if session[:query]
retrieve_query_from_session_without_default_custom_query
else
@query = find_default_query
end
else
retrieve_query_from_session_without_default_custom_query
elsif default_query_module_enabled?
@query = find_default_query
end
end

Expand All @@ -61,7 +65,7 @@ def filter_cleared?
params[:set_filter] && [:op, :f].all? {|k| !params.key?(k) }
end

def show_all?
def show_all_issues?
params[:without_default]
end

Expand Down
4 changes: 2 additions & 2 deletions app/patches/models/issue_query_patch.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ module IssueQueryPatch
included do
unloadable

has_many :projects_default_query, dependent: :nullify, foreign_key: :query_id
has_many :projects_default_queries, dependent: :nullify, foreign_key: :query_id

scope :only_public, -> {
if Redmine::VERSION.to_s < '2.4'
Expand All @@ -28,4 +28,4 @@ def public_visibility?
end
end

IssueQuery.send :include, DefaultCsutomQuery::IssueQueryPatch
IssueQuery.send :include, DefaultCsutomQuery::IssueQueryPatch
10 changes: 5 additions & 5 deletions app/patches/models/project_patch.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@ module ProjectPatch
included do
unloadable

has_one :projects_default_query, dependent: :delete
has_many :default_queries, dependent: :delete_all, class_name: 'ProjectsDefaultQuery'
end

def default_query
projects_default_query.try(:query)
default_queries.first.try :query
end

def init_projects_default_query
projects_default_query || build_projects_default_query
def init_default_query
default_queries.first || default_queries.new
end
end
end

Project.send :include, DefaultCustomQuery::ProjectPatch
Project.send :include, DefaultCustomQuery::ProjectPatch
4 changes: 2 additions & 2 deletions app/views/default_custom_query_setting/_form.html.erb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<%= labelled_form_for @default_query ||= @project.init_projects_default_query,
<%= labelled_form_for @default_query ||= @project.init_default_query,
as: :settings,
url: default_custom_query_setting_update_path(@project),
remote: true, method: :put, html: { id: 'default-query-setting' } do |f| %>
Expand All @@ -18,4 +18,4 @@
$('#default-query-setting').on('ajax:success', function(data, result, xhr) {
$('#tab-content-default_custom_query').html(result);
});
</script>
</script>
4 changes: 2 additions & 2 deletions app/views/issues/_sidebar_issues_bottom.html.erb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<% if @project && @project.module_enabled?(:default_custom_query) && @project.default_query.present? %>
<script>
<%= javascript_tag id: 'add-default-issues-button' do %>
(function() {
var allIssuesPath = '<%=j project_issues_path(@project, set_filter: 1) %>';

Expand All @@ -12,5 +12,5 @@
.text('<%=j l('default_custom_query.label_view_default_issues') %>');
showIssuesButton.before(showDefaultIssuesButton).before('<br>');
})();
</script>
<% end %>
<% end %>
4 changes: 4 additions & 0 deletions test/factories/default_query.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
FactoryGirl.define do
factory :default_query, class: ProjectsDefaultQuery do
end
end
7 changes: 7 additions & 0 deletions test/factories/enabled_module.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FactoryGirl.define do
factory :enabled_module do
factory :default_custom_query_module do
name 'default_custom_query'
end
end
end
33 changes: 33 additions & 0 deletions test/factories/issue_query.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
FactoryGirl.define do
factory :issue_query do
sequence(:name) {|n| "IssueQuery#{n}"}

user_id { User.current.id }

if ::Redmine::VERSION.to_s < '2.4'
trait :private do
is_public false
end

trait :public do
is_public true
end
else
trait :private do
visibility ::Query::VISIBILITY_PRIVATE
end

trait :roles do
visibility ::Query::VISIBILITY_ROLES

before(:create) do |query|
query.roles << create(:role)
end
end

trait :public do
visibility ::Query::VISIBILITY_PUBLIC
end
end
end
end
5 changes: 5 additions & 0 deletions test/factories/member.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
FactoryGirl.define do
factory :member do
mail_notification 0
end
end
12 changes: 12 additions & 0 deletions test/factories/project.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
FactoryGirl.define do
factory :project do
sequence(:name) {|n| "Project#{n}"}
sequence(:identifier) {|n| "project-#{n}"}
end

trait :with_default_custom_query do
after(:create) do |project|
create :default_custom_query_module, project: project
end
end
end
22 changes: 22 additions & 0 deletions test/factories/role.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
FactoryGirl.define do
factory :role, aliases: [:role_with_manage_default_query] do
sequence(:name) {|n| "Role#{n}"}
sequence(:position)
assignable 1
builtin 0
issues_visibility 'all'
permissions {
perms = Redmine::AccessControl.permissions -
Redmine::AccessControl.public_permissions
perms.map &:name
}

factory :role_without_manage_default_query do
permissions {
perms = Redmine::AccessControl.permissions -
Redmine::AccessControl.public_permissions
perms.map(&:name) - [:manage_default_query]
}
end
end
end
16 changes: 16 additions & 0 deletions test/factories/user.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
FactoryGirl.define do
factory :user do
sequence(:login, '000') {|n| "user#{n}"}
sequence(:lastname, '0000')

firstname 'User'
status 1
language 'ja'
mail {|u| "#{u.login}@example.co.jp" }
mail_notification 'only_my_events'
password '12345678'
password_confirmation {|u| u.password }
admin false
type 'User'
end
end
100 changes: 100 additions & 0 deletions test/integration/issues_with_default_query_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
require File.expand_path('../../test_helper', __FILE__)

class IssuesWithDefaultQueryTest < ActionController::IntegrationTest
setup do
setup_proper_project
logged_in @user

@default_query, @query = create_list(:issue_query, 2, :public, project: @project)
end

context 'when the default query is not set' do
should 'not execute the script that render the button for showing default issues' do
get project_issues_path(@project)

assert_response :success
assert_select 'script#add-default-issues-button', false
end

should 'not apply the default query' do
get project_issues_path(@project)

assert_response :success
assert_show_all_issues
end
end

context 'when the default query is set' do
setup do
set_default_query @project, @default_query
end

should 'execute the script that render the button for showing default issues' do
get project_issues_path(@project)

assert_response :success
assert_select 'script#add-default-issues-button'
end

should 'be able to operate in issues with default query' do
get project_issues_path(@project)

# should apply the default query
assert_response :success
assert_apply_query @default_query

# click the "View all issues" button
get project_issues_path(@project, set_filter: 1, without_default: 1)

assert_response :success
assert_show_all_issues

# select the other query
get project_issues_path(@project, query_id: @query.id)

assert_response :success
assert_apply_query @query
end

context 'when deleted the query that has been set as default' do
should 'unset the default query' do
delete query_path(@default_query)

assert_nil @project.default_query
assert_response :redirect
end
end

context 'when changed to PRIVATE the visilibity of the default query' do
should 'unset the default query' do
if Redmine::VERSION.to_s < '2.4'
@default_query.update_attribute :is_public, false
else
@default_query.update_attribute :visibility, Query::VISIBILITY_PRIVATE
end

get project_issues_path(@project)

assert_response :success
assert_nil @project.default_query
end
end

context 'when changed to ROLES the visibility of the default query' do
should 'unset the default query' do
if Redmine::VERSION.to_s < '2.4'
omit '2.3 or less has no ROLES visility'
else
@default_query.visibility = Query::VISIBILITY_ROLES
@default_query.roles << create(:role)
@default_query.save!

get project_issues_path(@project)

assert_response :success
assert_nil @project.default_query
end
end
end
end
end
Loading

0 comments on commit e4532f8

Please sign in to comment.