redmine_extensions 0.3.00 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +16 -40
- data/lib/generators/redmine_extensions/entity/entity_generator.rb +77 -24
- data/lib/generators/redmine_extensions/entity/templates/_%model_name_underscored%.api.rsb.tt +18 -0
- data/lib/generators/redmine_extensions/entity/templates/controller.rb.erb +14 -20
- data/lib/generators/redmine_extensions/entity/templates/controller_spec.rb.erb +19 -22
- data/lib/generators/redmine_extensions/entity/templates/easy_query.rb.erb +1 -3
- data/lib/generators/redmine_extensions/entity/templates/factories.rb.erb +5 -6
- data/lib/generators/redmine_extensions/entity/templates/helper.rb.erb +0 -21
- data/lib/generators/redmine_extensions/entity/templates/index.api.rsb.erb +2 -4
- data/lib/generators/redmine_extensions/entity/templates/migration.rb.erb +4 -3
- data/lib/generators/redmine_extensions/entity/templates/model.rb.erb +1 -1
- data/lib/generators/redmine_extensions/entity/templates/show.api.rsb.erb +1 -1
- data/lib/generators/redmine_extensions/entity/templates/spec/requests/%model_name_underscored%_spec.rb.tt +19 -0
- data/lib/redmine_extensions/engine.rb +1 -0
- data/lib/redmine_extensions/redmine_patches/models/custom_field_patch.rb +11 -0
- data/lib/redmine_extensions/tags/autocomplete_field.rb +1 -1
- data/lib/redmine_extensions/version.rb +1 -1
- data/spec/factories/easy_settings.rb +5 -4
- data/spec/features/autocomplete_spec.rb +1 -3
- data/spec/features/jasmine_spec.rb +1 -3
- data/spec/init_rails.rb +13 -0
- data/spec/models/easy_setting_spec.rb +0 -2
- data/spec/presenters/easy_settings/params_wrapper_spec.rb +2 -2
- data/spec/spec_helper.rb +2 -69
- data/spec/support/plugin_generator.rb +1 -10
- metadata +12 -126
- data/spec/factories/easy_queries.rb +0 -8
- data/spec/factories/issues.rb +0 -96
- data/spec/factories/projects.rb +0 -84
- data/spec/factories/time_entries.rb +0 -38
- data/spec/factories/trackers.rb +0 -15
- data/spec/factories/users.rb +0 -23
- data/spec/rails_helper.rb +0 -119
data/spec/factories/issues.rb
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
FactoryBot.define do
|
2
|
-
|
3
|
-
factory :enumeration do
|
4
|
-
name 'TestEnum'
|
5
|
-
|
6
|
-
trait :default do
|
7
|
-
name 'Default'
|
8
|
-
is_default true
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
# not an enumeration, but same behaviour
|
13
|
-
factory :issue_status, :class => 'IssueStatus' do
|
14
|
-
sequence(:name){ |n| "TestStatus-#{n}" }
|
15
|
-
default_done_ratio 100
|
16
|
-
|
17
|
-
trait :closed do
|
18
|
-
is_closed true
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
factory :issue_priority, :parent => :enumeration, :class => 'IssuePriority' do
|
23
|
-
name 'TestPriority'
|
24
|
-
end
|
25
|
-
|
26
|
-
factory :issue_category do
|
27
|
-
sequence(:name){ |n| "Issue category ##{n}" }
|
28
|
-
project
|
29
|
-
end
|
30
|
-
|
31
|
-
factory :issue do
|
32
|
-
transient do
|
33
|
-
factory_is_child false
|
34
|
-
end
|
35
|
-
|
36
|
-
sequence(:subject) { |n| "Test issue ##{n}" }
|
37
|
-
estimated_hours 4
|
38
|
-
|
39
|
-
project
|
40
|
-
tracker { project.trackers.first }
|
41
|
-
start_date { Date.today }
|
42
|
-
due_date { Date.today + 7.days }
|
43
|
-
status { tracker.default_status }
|
44
|
-
priority { IssuePriority.default || FactoryBot.create(:issue_priority, :default) }
|
45
|
-
association :author, :factory => :user, :firstname => "Author"
|
46
|
-
association :assigned_to, :factory => :user, :firstname => "Assignee"
|
47
|
-
|
48
|
-
trait :child_issue do
|
49
|
-
factory_is_child true
|
50
|
-
end
|
51
|
-
|
52
|
-
trait :reccuring do
|
53
|
-
easy_is_repeating true
|
54
|
-
easy_repeat_settings Hash[ 'period' => 'daily', 'daily_option' => 'each', 'daily_each_x' => '1', 'endtype' => 'endless', 'create_now' => 'none' ]
|
55
|
-
end
|
56
|
-
|
57
|
-
trait :reccuring_monthly do
|
58
|
-
easy_is_repeating true
|
59
|
-
easy_repeat_settings Hash[ 'period' => 'monthly', 'monthly_option' => 'xth', 'monthly_period' => '1', 'monthly_day' => (Date.today + 3.days).mday, 'endtype' => 'endless', 'create_now' => 'none' ]
|
60
|
-
end
|
61
|
-
|
62
|
-
trait :with_version do
|
63
|
-
association :fixed_version, factory: :version
|
64
|
-
end
|
65
|
-
|
66
|
-
trait :with_journals do
|
67
|
-
after(:create) do |issue|
|
68
|
-
FactoryBot.create_list(:journal, 2, issue: issue, journalized_type: 'Issue')
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
trait :with_description do
|
73
|
-
sequence(:description) { |n| "Description ##{n}" }
|
74
|
-
end
|
75
|
-
|
76
|
-
trait :with_attachment do
|
77
|
-
after(:create) do |issue|
|
78
|
-
FactoryBot.create_list(:attachment, 1, container: issue)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
trait :with_short_url
|
83
|
-
|
84
|
-
after :build do |issue, evaluator|
|
85
|
-
if evaluator.factory_is_child
|
86
|
-
issue.parent_issue_id = FactoryBot.create(:issue, :project => issue.project).id
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
factory :journal do
|
92
|
-
sequence(:notes) { |n| "Notes #{n}" }
|
93
|
-
journalized_type 'Issue'
|
94
|
-
end
|
95
|
-
|
96
|
-
end
|
data/spec/factories/projects.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
FactoryBot.define do
|
2
|
-
factory :project do
|
3
|
-
transient do
|
4
|
-
number_of_issues 0
|
5
|
-
number_of_members 0
|
6
|
-
number_of_issue_categories 2
|
7
|
-
number_of_subprojects 0
|
8
|
-
add_modules []
|
9
|
-
members []
|
10
|
-
trackers []
|
11
|
-
create_trackers false
|
12
|
-
end
|
13
|
-
# name 'Test project'
|
14
|
-
sequence(:name){ |n| "Project ##{n}" }
|
15
|
-
sequence(:identifier){ |n| "#{name.parameterize}#{n}" }
|
16
|
-
|
17
|
-
after(:create) do |project, evaluator|
|
18
|
-
trackers = Array.wrap(evaluator.trackers)
|
19
|
-
trackers = Tracker.all.to_a if trackers.empty?
|
20
|
-
trackers.concat( [FactoryBot.create(:tracker), FactoryBot.create(:bug_tracker)] ) if evaluator.create_trackers || trackers.empty?
|
21
|
-
project.trackers = trackers
|
22
|
-
project.time_entry_activities = [FactoryBot.create(:time_entry_activity)]
|
23
|
-
end
|
24
|
-
after :create do |project, evaluator|
|
25
|
-
FactoryBot.create_list :issue, evaluator.number_of_issues, :project => project
|
26
|
-
FactoryBot.create_list :member, evaluator.number_of_members, :project => project, :roles => [FactoryBot.create(:role)]
|
27
|
-
project.enabled_module_names += evaluator.add_modules
|
28
|
-
end
|
29
|
-
|
30
|
-
after :create do |project, evaluator|
|
31
|
-
evaluator.members.each do |user|
|
32
|
-
FactoryBot.create(:member, project: project, user: user)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
trait :with_milestones do
|
37
|
-
transient do
|
38
|
-
number_of_versions 3
|
39
|
-
milestone_options Hash.new
|
40
|
-
end
|
41
|
-
after :create do |project, evaluator|
|
42
|
-
FactoryBot.create_list :version, evaluator.number_of_versions, evaluator.milestone_options.merge( :project => project )
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
trait :with_subprojects do
|
47
|
-
after :create do |project, evaluator|
|
48
|
-
FactoryBot.create_list :project, evaluator.number_of_subprojects, :parent => project
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
trait :with_categories do
|
53
|
-
after :create do |project, evaluator|
|
54
|
-
FactoryBot.create_list :issue_category, evaluator.number_of_issue_categories, :project => project
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
factory :role do
|
60
|
-
sequence(:name){ |n| "Role ##{n}" }
|
61
|
-
permissions { Role.new.setable_permissions.collect(&:name).uniq }
|
62
|
-
end
|
63
|
-
|
64
|
-
factory :member_role do
|
65
|
-
role
|
66
|
-
member
|
67
|
-
end
|
68
|
-
|
69
|
-
factory :member do
|
70
|
-
project
|
71
|
-
user
|
72
|
-
|
73
|
-
after :build do |member, evaluator|
|
74
|
-
member.member_roles << FactoryBot.build(:member_role, member: member)
|
75
|
-
end
|
76
|
-
|
77
|
-
trait :without_roles do
|
78
|
-
after :create do |member, evaluator|
|
79
|
-
member.member_roles.clear
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
FactoryBot.define do
|
2
|
-
|
3
|
-
factory :time_entry_activity, :parent => :enumeration, :class => 'TimeEntryActivity' do
|
4
|
-
name 'TestActivity'
|
5
|
-
initialize_with { TimeEntryActivity.find_or_create_by(name: name)}
|
6
|
-
factory :default_time_entry_activity, :traits => [:default]
|
7
|
-
end
|
8
|
-
|
9
|
-
factory :time_entry do
|
10
|
-
hours 1
|
11
|
-
spent_on { Date.today - 1.month }
|
12
|
-
|
13
|
-
issue
|
14
|
-
project { issue.project }
|
15
|
-
user
|
16
|
-
association :activity, :factory => :default_time_entry_activity
|
17
|
-
|
18
|
-
trait :current do
|
19
|
-
spent_on { Date.today }
|
20
|
-
end
|
21
|
-
|
22
|
-
trait :old do
|
23
|
-
spent_on { Date.today - 7.days }
|
24
|
-
end
|
25
|
-
|
26
|
-
trait :future do
|
27
|
-
spent_on { Date.today + 70.days }
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
factory :easy_global_time_entry_setting do
|
32
|
-
spent_on_limit_before_today 2
|
33
|
-
spent_on_limit_before_today_edit 5
|
34
|
-
spent_on_limit_after_today 20
|
35
|
-
spent_on_limit_after_today_edit 30
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
data/spec/factories/trackers.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
FactoryBot.define do
|
2
|
-
|
3
|
-
factory :tracker do
|
4
|
-
sequence(:name) {|n| "Feature ##{n}"}
|
5
|
-
|
6
|
-
default_status { IssueStatus.first || FactoryBot.create(:issue_status) }
|
7
|
-
|
8
|
-
trait :bug do
|
9
|
-
sequence(:name) {|n| "Bug ##{n}"}
|
10
|
-
end
|
11
|
-
|
12
|
-
factory :bug_tracker, :traits => [:bug]
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
data/spec/factories/users.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
FactoryBot.define do
|
2
|
-
factory :user do
|
3
|
-
firstname 'John'
|
4
|
-
sequence(:lastname) {|n| 'Doe' + n.to_s }
|
5
|
-
login { "#{firstname}-#{lastname}".downcase }
|
6
|
-
sequence(:mail) {|n| "user#{n}@test.com" }
|
7
|
-
admin false
|
8
|
-
language 'en'
|
9
|
-
status 1
|
10
|
-
mail_notification 'only_my_events'
|
11
|
-
|
12
|
-
# easy_user_type_id 1
|
13
|
-
|
14
|
-
trait :admin do
|
15
|
-
firstname 'Admin'
|
16
|
-
admin true
|
17
|
-
end
|
18
|
-
|
19
|
-
factory :admin_user, :traits => [:admin]
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
data/spec/rails_helper.rb
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
2
|
-
ENV['RAILS_ENV'] ||= 'test'
|
3
|
-
|
4
|
-
require 'spec_helper'
|
5
|
-
require File.expand_path("../redmine/config/environment.rb", __FILE__)
|
6
|
-
# Add additional requires below this line. Rails is not loaded until this point!
|
7
|
-
require 'rspec/rails'
|
8
|
-
require 'factory_bot_rails'
|
9
|
-
require 'database_cleaner'
|
10
|
-
|
11
|
-
Rails.backtrace_cleaner.remove_silencers!
|
12
|
-
|
13
|
-
# Requires supporting ruby files with custom matchers and macros, etc, in
|
14
|
-
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
|
15
|
-
# run as spec files by default. This means that files in spec/support that end
|
16
|
-
# in _spec.rb will both be required and run as specs, causing the specs to be
|
17
|
-
# run twice. It is recommended that you do not name files matching this glob to
|
18
|
-
# end with _spec.rb. You can configure this pattern with the --pattern
|
19
|
-
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
|
20
|
-
#
|
21
|
-
# The following line is provided for convenience purposes. It has the downside
|
22
|
-
# of increasing the boot-up time by auto-requiring all files in the support
|
23
|
-
# directory. Alternatively, in the individual `*_spec.rb` files, manually
|
24
|
-
# require only the support files necessary.
|
25
|
-
#
|
26
|
-
# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
|
27
|
-
|
28
|
-
# Checks for pending migrations before tests are run.
|
29
|
-
# If you are not using ActiveRecord, you can remove this line.
|
30
|
-
ActiveRecord::Migration.maintain_test_schema!
|
31
|
-
|
32
|
-
# warning supress for ruby 2.0 and new capybara see https://gist.github.com/ericboehs/7125105
|
33
|
-
class WarningSuppressor
|
34
|
-
IGNORES = [
|
35
|
-
/QFont::setPixelSize: Pixel size <= 0/,
|
36
|
-
/CoreText performance note:/,
|
37
|
-
/Heya! This page is using wysihtml5/,
|
38
|
-
/You must provide a success callback to the Chooser to see the files that the user selects/
|
39
|
-
]
|
40
|
-
|
41
|
-
class << self
|
42
|
-
def write(message)
|
43
|
-
if suppress?(message) then 0 else puts(message);1;end
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
def suppress?(message)
|
48
|
-
IGNORES.any? { |re| message =~ re }
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
require 'capybara/poltergeist'
|
54
|
-
|
55
|
-
Capybara.register_driver :poltergeist do |app|
|
56
|
-
Capybara::Poltergeist::Driver.new(app, {
|
57
|
-
inspector: 'google-chrome-stable',
|
58
|
-
js_errors: true,
|
59
|
-
timeout: 1.hour.seconds.to_i,
|
60
|
-
phantomjs_options: ['--ignore-ssl-errors=yes'],
|
61
|
-
phantomjs_logger: WarningSuppressor
|
62
|
-
})
|
63
|
-
end
|
64
|
-
|
65
|
-
Capybara.register_driver :chrome do |app|
|
66
|
-
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
|
67
|
-
'chromeOptions' => {
|
68
|
-
'args' => ENV['CHROME_OPTIONS'].to_s.split(' ')
|
69
|
-
}
|
70
|
-
)
|
71
|
-
|
72
|
-
Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: capabilities)
|
73
|
-
end
|
74
|
-
|
75
|
-
Capybara.javascript_driver = ENV['JS_DRIVER'].present? ? ENV['JS_DRIVER'].downcase.to_sym : :poltergeist
|
76
|
-
|
77
|
-
RSpec.configure do |config|
|
78
|
-
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
79
|
-
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
80
|
-
|
81
|
-
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
82
|
-
# examples within a transaction, remove the following line or assign false
|
83
|
-
# instead of true.
|
84
|
-
config.use_transactional_fixtures = true
|
85
|
-
|
86
|
-
# RSpec Rails can automatically mix in different behaviours to your tests
|
87
|
-
# based on their file location, for example enabling you to call `get` and
|
88
|
-
# `post` in specs under `spec/controllers`.
|
89
|
-
#
|
90
|
-
# You can disable this behaviour by removing the line below, and instead
|
91
|
-
# explicitly tag your specs with their type, e.g.:
|
92
|
-
#
|
93
|
-
# RSpec.describe UsersController, :type => :controller do
|
94
|
-
# # ...
|
95
|
-
# end
|
96
|
-
#
|
97
|
-
# The different available types are documented in the features, such as in
|
98
|
-
# https://relishapp.com/rspec/rspec-rails/docs
|
99
|
-
config.infer_spec_type_from_file_location!
|
100
|
-
|
101
|
-
config.before(:each) do
|
102
|
-
DatabaseCleaner.strategy = :transaction
|
103
|
-
end
|
104
|
-
|
105
|
-
config.before(:each) do
|
106
|
-
DatabaseCleaner.start
|
107
|
-
RequestStore.clear! # invalidates cache
|
108
|
-
end
|
109
|
-
|
110
|
-
config.before(:each, clear_cache: true) do
|
111
|
-
Rails.cache.clear
|
112
|
-
end
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
config.after(:each) do
|
117
|
-
DatabaseCleaner.clean
|
118
|
-
end
|
119
|
-
end
|