redmine_extensions 0.3.00 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|