redmine_crm 0.0.36 → 0.0.37

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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/README.md +160 -33
  4. data/Rakefile +3 -12
  5. data/bitbucket-pipelines.yml +20 -6
  6. data/doc/CHANGELOG +5 -0
  7. data/lib/redmine_crm.rb +5 -0
  8. data/lib/redmine_crm/acts_as_draftable/draft.rb +40 -0
  9. data/lib/redmine_crm/acts_as_draftable/rcrm_acts_as_draftable.rb +154 -0
  10. data/lib/redmine_crm/acts_as_taggable/rcrm_acts_as_taggable.rb +1 -1
  11. data/lib/redmine_crm/acts_as_viewed/rcrm_acts_as_viewed.rb +0 -1
  12. data/lib/redmine_crm/acts_as_votable/votable.rb +6 -10
  13. data/lib/redmine_crm/helpers/form_tag_helper.rb +31 -0
  14. data/lib/redmine_crm/money_helper.rb +0 -2
  15. data/lib/redmine_crm/version.rb +1 -1
  16. data/redmine_crm.gemspec +6 -1
  17. data/test/acts_as_draftable/draft_test.rb +29 -0
  18. data/test/acts_as_draftable/rcrm_acts_as_draftable_test.rb +185 -0
  19. data/test/acts_as_taggable/rcrm_acts_as_taggable_test.rb +9 -11
  20. data/test/acts_as_taggable/tag_list_test.rb +25 -29
  21. data/test/acts_as_taggable/tag_test.rb +58 -51
  22. data/test/acts_as_votable/rcrm_acts_as_votable_test.rb +6 -4
  23. data/test/acts_as_votable/rcrm_acts_as_voter_test.rb +7 -5
  24. data/test/acts_as_votable/votable_test.rb +1 -1
  25. data/test/database.yml +14 -18
  26. data/test/models/issue.rb +14 -0
  27. data/test/{fixtures → models}/news.rb +0 -0
  28. data/test/{fixtures → models}/project.rb +0 -0
  29. data/test/{fixtures → models}/user.rb +0 -0
  30. data/test/{fixtures → models}/vote_classes.rb +0 -20
  31. data/test/schema.rb +9 -1
  32. data/test/test_helper.rb +5 -57
  33. data/vendor/assets/javascripts/select2_helpers.js +39 -0
  34. metadata +75 -14
  35. data/test/fixtures/issue.rb +0 -22
  36. data/test/liquid/drops/liquid_test.rb +0 -52
@@ -253,7 +253,7 @@ module RedmineCrm
253
253
  column_names.include?(cached_tag_list_column_name)
254
254
  end
255
255
 
256
- private
256
+ private
257
257
 
258
258
  def quote_string_value(object)
259
259
  connection.quote(object)
@@ -146,7 +146,6 @@ module RedmineCrm
146
146
  target.total_views = ((target.total_views || 0) + 1)
147
147
  target.record_timestamps = false
148
148
  target.save(:validate => false, :touch => false)
149
- # target.save_without_validation
150
149
  end
151
150
  end
152
151
 
@@ -85,21 +85,17 @@ module RedmineCrm
85
85
  vote = votes_for.last
86
86
  end
87
87
 
88
- last_update = vote.updated_at
89
-
90
88
  vote.vote_flag = votable_words.meaning_of(options[:vote])
91
89
 
92
90
  # Allowing for a vote_weight to be associated with every vote. Could change with every voter object
93
91
  vote.vote_weight = (options[:vote_weight].to_i if options[:vote_weight].present?) || 1
94
92
 
95
- if vote.save
96
- self.vote_registered = true if last_update != vote.updated_at
97
- update_cached_votes options[:vote_scope]
98
- return vote
99
- else
100
- self.vote_registered = false
101
- return false
102
- end
93
+ return false if vote.invalid?
94
+
95
+ self.vote_registered = vote.changed?
96
+ vote.save!(validate: false)
97
+ update_cached_votes(options[:vote_scope])
98
+ vote
103
99
  end
104
100
 
105
101
  def unvote(args = {})
@@ -49,6 +49,37 @@ module RedmineCrm
49
49
 
50
50
  alias select2 select2_tag
51
51
 
52
+ # Transforms select filter field into select2
53
+ #
54
+ # ==== Examples
55
+ # transform_to_select2 'issue_tags', url: auto_complete_tags_url
56
+ # transform_to_select2 'manager_id', format_state: 'formatStateWithAvatar', min_input_length: 1, url: '/managers'
57
+ #
58
+ # ==== Options
59
+ # * <tt>:url</tt> Defines URL to search remote data using the ajax.
60
+ # * <tt>:format_state</tt> Defines template of search results in the drop-down.
61
+ # * <tt>:min_input_length</tt> Minimum number of characters required to start a search. Default value 0.
62
+ # * <tt>:width</tt> Sets the width of the control. Default value '60%'.
63
+ #
64
+ def transform_to_select2(field, options = {})
65
+ return if field.empty?
66
+
67
+ result = ''.html_safe
68
+ unless @transform_to_select2_included
69
+ result << javascript_include_tag('select2_helpers', plugin: 'redmine_crm')
70
+ @transform_to_select2_included = true
71
+ end
72
+
73
+ result << javascript_tag(<<-JS)
74
+ select2Filters['#{field}'] = {
75
+ url: '#{options[:url].to_s}',
76
+ formatState: #{options.fetch(:format_state, 'undefined')},
77
+ minimumInputLength: #{options.fetch(:min_input_length, 0)},
78
+ width: '#{options.fetch(:with, '60%')}'
79
+ };
80
+ JS
81
+ end
82
+
52
83
  private
53
84
 
54
85
  def select2_data_source_options(options = {})
@@ -1,5 +1,3 @@
1
- # byebug
2
- # require 'action_controller'
3
1
  require 'action_view'
4
2
 
5
3
  module RedmineCrm
@@ -1,3 +1,3 @@
1
1
  module RedmineCrm
2
- VERSION = "0.0.36"
2
+ VERSION = "0.0.37"
3
3
  end
data/redmine_crm.gemspec CHANGED
@@ -18,5 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_runtime_dependency 'liquid', "<2.6.4"
21
+ spec.add_runtime_dependency 'rails'
22
+ spec.add_runtime_dependency 'liquid', '< 2.6.4'
23
+
24
+ spec.add_development_dependency 'sqlite3'
25
+ spec.add_development_dependency 'mysql2', '~> 0.4.0'
26
+ spec.add_development_dependency 'pg'
22
27
  end
@@ -0,0 +1,29 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class DraftTest < ActiveSupport::TestCase
4
+ def test_restore
5
+ issue = Issue.new(subject: 'some subject', description: 'some description')
6
+
7
+ issue.save_draft(current_user)
8
+ restored_issue = RedmineCrm::ActsAsDraftable::Draft.find(issue.draft_id).restore
9
+
10
+ assert_equal issue.subject, restored_issue.subject
11
+ assert_equal issue.description, restored_issue.description
12
+ end
13
+
14
+ def test_restore_all
15
+ first_issue = Issue.new(subject: 'first subject')
16
+ first_issue.save_draft(current_user)
17
+ second_issue = Issue.new(subject: 'second subject')
18
+ second_issue.save_draft(current_user)
19
+
20
+ restored_issues = RedmineCrm::ActsAsDraftable::Draft.restore_all
21
+ assert_equal [first_issue.subject, second_issue.subject], restored_issues.map(&:subject).sort
22
+ end
23
+
24
+ private
25
+
26
+ def current_user
27
+ users(:sam)
28
+ end
29
+ end
@@ -0,0 +1,185 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class RcrmActsAsDraftableTest < ActiveSupport::TestCase
4
+ def test_rcrm_acts_as_draftable_without_arguments
5
+ assert_nothing_raised do
6
+ Project.rcrm_acts_as_draftable
7
+ end
8
+ end
9
+
10
+ class SomeClass < ActiveRecord::Base; end
11
+ def test_rcrm_acts_as_draftable_with_parent
12
+ assert_nothing_raised do
13
+ News.rcrm_acts_as_draftable(parent: :author)
14
+ end
15
+ assert User.new.respond_to?(:drafts)
16
+ end
17
+
18
+ def test_rcrm_acts_as_draftable_with_non_existing_parent
19
+ assert_raises do
20
+ Issue.rcrm_acts_as_draftable(parent: :foo)
21
+ end
22
+ end
23
+
24
+ def test_rcrm_acts_as_draftable_with_non_hash_argument
25
+ assert_raises do
26
+ Issue.rcrm_acts_as_draftable('bar')
27
+ end
28
+ end
29
+
30
+ def test_rcrm_acts_as_draftable_with_invalid_hash_key
31
+ assert_raises do
32
+ Issue.rcrm_acts_as_draftable(baz: 'qux')
33
+ end
34
+ end
35
+
36
+ def test_drafts
37
+ issue = Issue.new
38
+ issue.save_draft(current_user)
39
+
40
+ assert_equal 1, Issue.drafts(current_user).count
41
+ assert_equal RedmineCrm::ActsAsDraftable::Draft, Issue.drafts(current_user).first.class
42
+ end
43
+
44
+ def test_from_draft
45
+ issue = Issue.new(subject: 'subject')
46
+ issue.save_draft(current_user)
47
+
48
+ issue_from_draft = Issue.from_draft(issue.draft_id)
49
+
50
+ assert_equal Issue, issue_from_draft.class
51
+ assert_equal true, issue_from_draft.new_record?
52
+ assert_equal issue.draft_id, issue_from_draft.draft_id
53
+
54
+ assert_equal issue.subject, issue_from_draft.subject
55
+ end
56
+
57
+ def test_draft_deleted_after_save
58
+ issue = Issue.new(subject: 'subject')
59
+ issue.save_draft(current_user)
60
+
61
+ issue_from_draft = Issue.from_draft(issue.draft_id)
62
+
63
+ assert_difference 'Issue.count', 1 do
64
+ assert_difference 'RedmineCrm::ActsAsDraftable::Draft.count', -1 do
65
+ issue_from_draft.save!
66
+ end
67
+ end
68
+ assert_nil issue_from_draft.draft_id
69
+ end
70
+
71
+ def test_from_draft_with_non_existing_draft_id
72
+ assert_raises do
73
+ Issue.from_draft(999)
74
+ end
75
+ end
76
+
77
+ def test_from_draft_with_wrong_type
78
+ Project.rcrm_acts_as_draftable
79
+
80
+ project = Project.new
81
+ project.save_draft(current_user)
82
+
83
+ assert_raises do
84
+ Issue.from_draft(project.draft_id)
85
+ end
86
+ end
87
+
88
+ def test_dump_to_draft
89
+ assert_equal String, Issue.new.dump_to_draft.class
90
+ end
91
+
92
+ def test_load_to_draft
93
+ attributes = {subject: 'subject', description: 'description'}
94
+ draft = Issue.new(attributes).dump_to_draft
95
+
96
+ issue = Issue.new
97
+ issue.load_from_draft(draft)
98
+
99
+ assert_equal attributes[:subject], issue.subject
100
+ assert_equal attributes[:description], issue.description
101
+ end
102
+
103
+ def test_save_draft
104
+ attributes = {subject: 'subject'}
105
+ issue = Issue.new(attributes)
106
+
107
+ assert_difference 'Issue.count', 0 do
108
+ assert_difference 'RedmineCrm::ActsAsDraftable::Draft.count', 1 do
109
+ result = issue.save_draft(current_user)
110
+ assert_equal true, result
111
+ end
112
+ end
113
+ assert_equal Fixnum, issue.draft_id.class
114
+
115
+
116
+ draft = RedmineCrm::ActsAsDraftable::Draft.find(issue.draft_id)
117
+ assert_equal 'Issue', draft.target_type
118
+ assert_equal current_user.id, draft.user_id
119
+ assert_equal attributes[:subject], draft.restore.subject
120
+ end
121
+
122
+ def test_save_draft_without_user
123
+ issue = Issue.new
124
+
125
+ assert_difference 'Issue.count', 0 do
126
+ assert_difference 'RedmineCrm::ActsAsDraftable::Draft.count', 1 do
127
+ result = issue.save_draft
128
+ assert_equal true, result
129
+ end
130
+ end
131
+
132
+ draft = RedmineCrm::ActsAsDraftable::Draft.find(issue.draft_id)
133
+ assert_nil draft.user_id
134
+ end
135
+
136
+ def test_save_draft_with_associations
137
+ issue = Issue.new(project: projects(:second_project))
138
+ issue.save_draft(current_user)
139
+
140
+ draft = RedmineCrm::ActsAsDraftable::Draft.find(issue.draft_id)
141
+ assert_equal issue.project.name, draft.restore.project.name
142
+ end
143
+
144
+ def test_save_draft_updates_existing_draft
145
+ issue = Issue.new
146
+ issue.save_draft(current_user)
147
+
148
+ issue.subject = 'changed subject'
149
+ assert_difference 'Issue.count', 0 do
150
+ assert_difference 'RedmineCrm::ActsAsDraftable::Draft.count', 0 do
151
+ issue.save_draft(current_user)
152
+ end
153
+ end
154
+
155
+ draft = RedmineCrm::ActsAsDraftable::Draft.find(issue.draft_id)
156
+ assert_equal issue.subject, draft.restore.subject
157
+ end
158
+
159
+ def test_save_draft_does_not_save_persisted_model
160
+ issue = Issue.new
161
+ issue.save_draft(current_user)
162
+ issue.save!
163
+ assert_equal false, issue.save_draft(current_user)
164
+ end
165
+
166
+ def test_update_draft
167
+ issue = Issue.new(subject: 'subject')
168
+ issue.save_draft(current_user)
169
+
170
+ assert_difference 'Issue.count', 0 do
171
+ assert_difference 'RedmineCrm::ActsAsDraftable::Draft.count', 0 do
172
+ issue.update_draft(current_user, subject: 'updated_subject')
173
+ end
174
+ end
175
+
176
+ draft = RedmineCrm::ActsAsDraftable::Draft.find(issue.draft_id)
177
+ assert_equal issue.subject, draft.restore.subject
178
+ end
179
+
180
+ private
181
+
182
+ def current_user
183
+ users(:sam)
184
+ end
185
+ end
@@ -221,9 +221,13 @@ class RcrmActsAsTaggableTest < ActiveSupport::TestCase
221
221
  end
222
222
 
223
223
  def test_tags_not_saved_if_validation_fails
224
- assert_equivalent ["error", "question"], issues(:first_issue).tag_list
225
- assert !issues(:first_issue).update_attributes(:tag_list => "One, Two", :description => "")
226
- assert_equivalent ["error", "question"], Issue.find(issues(:first_issue).id).tag_list
224
+ issue = issues(:first_issue)
225
+ assert_equivalent ["error", "question"], issue.tag_list
226
+
227
+ issue.stub(:valid?, false) do
228
+ assert !issue.update_attributes(tag_list: "One, Two")
229
+ end
230
+ assert_equivalent ["error", "question"], Issue.find(issue.id).tag_list
227
231
  end
228
232
 
229
233
  def test_tag_list_accessors_on_new_record
@@ -291,10 +295,8 @@ class RcrmActsAsTaggableTest < ActiveSupport::TestCase
291
295
  end
292
296
 
293
297
  def test_find_tagged_with_using_sti
294
- special_issue = SpecialIssue.create!(:description => 'Test', :tag_list => 'Random')
295
-
296
- assert_equal [special_issue], SpecialIssue.find_tagged_with('Random')
297
- assert SpecialIssue.find_tagged_with('Random').include?(special_issue)
298
+ issue = Issue.create!(description: 'Test', tag_list: 'Random')
299
+ assert_equal [issue], Issue.find_tagged_with('Random')
298
300
  end
299
301
 
300
302
  def test_case_insensitivity
@@ -329,10 +331,6 @@ class RcrmActsAsTaggableTest < ActiveSupport::TestCase
329
331
  RedmineCrm::ActsAsTaggable::Tag.destroy_unused = false
330
332
  end
331
333
 
332
- def test_quote_value
333
- assert_equal "'RedmineCrm::ActsAsTaggable::Tag'", Issue.send(:quote_value, RedmineCrm::ActsAsTaggable::Tag)
334
- end
335
-
336
334
  def test_tags_condition
337
335
  assert_equal "(tags_TABLE.name LIKE #{tags(:feature).id} OR tags_TABLE.name LIKE #{tags(:bug).id})",
338
336
  Issue.send(:tags_condition, [tags(:feature), tags(:bug)], 'tags_TABLE')
@@ -1,38 +1,34 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper'
2
2
 
3
- module RedmineCrm
4
- module ActsAsTaggable
5
- class TagListTest < ActiveSupport::TestCase
6
- def setup
7
- @tag_list = TagList.new(%w(error bug))
8
- end
3
+ class TagListTest < ActiveSupport::TestCase
4
+ def setup
5
+ @tag_list = RedmineCrm::ActsAsTaggable::TagList.new(%w(error bug))
6
+ end
9
7
 
10
- def test_from
11
- assert_equal %w(one two three), TagList.from('one, two, two, three, three, three')
12
- end
8
+ def test_from
9
+ assert_equal %w(one two three), RedmineCrm::ActsAsTaggable::TagList.from('one, two, two, three, three, three')
10
+ end
13
11
 
14
- def test_add
15
- @tag_list.add(['new_tag'])
16
- assert_equal %w(error bug new_tag), @tag_list
17
- end
12
+ def test_add
13
+ @tag_list.add(['new_tag'])
14
+ assert_equal %w(error bug new_tag), @tag_list
15
+ end
18
16
 
19
- def test_remove
20
- @tag_list.remove(['old_tag'])
21
- assert_equal %w(error bug), @tag_list
22
- @tag_list.remove(['error'])
23
- assert_equal %w(bug), @tag_list
24
- end
17
+ def test_remove
18
+ @tag_list.remove(['old_tag'])
19
+ assert_equal %w(error bug), @tag_list
20
+ @tag_list.remove(['error'])
21
+ assert_equal %w(bug), @tag_list
22
+ end
25
23
 
26
- def test_toggle
27
- @tag_list.toggle(['new_tag'])
28
- assert_equal %w(error bug new_tag), @tag_list
29
- @tag_list.toggle(['error'])
30
- assert_equal %w(bug new_tag), @tag_list
31
- end
24
+ def test_toggle
25
+ @tag_list.toggle(['new_tag'])
26
+ assert_equal %w(error bug new_tag), @tag_list
27
+ @tag_list.toggle(['error'])
28
+ assert_equal %w(bug new_tag), @tag_list
29
+ end
32
30
 
33
- def test_to_s
34
- assert_equal 'error, bug', @tag_list.to_s
35
- end
36
- end
31
+ def test_to_s
32
+ assert_equal 'error, bug', @tag_list.to_s
37
33
  end
38
34
  end
@@ -1,65 +1,72 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper'
2
2
 
3
- module RedmineCrm
4
- module ActsAsTaggable
5
- class TagTest < ActiveSupport::TestCase
6
- def test_find_or_create_with_like_by_name
7
- assert_no_difference 'RedmineCrm::ActsAsTaggable::Tag.count' do
8
- Tag.find_or_create_with_like_by_name('error')
9
- end
10
-
11
- assert_difference 'RedmineCrm::ActsAsTaggable::Tag.count', 1 do
12
- Tag.find_or_create_with_like_by_name('new_tag')
13
- end
14
- end
3
+ class TagTest < ActiveSupport::TestCase
4
+ def test_find_or_create_with_like_by_name
5
+ assert_no_difference 'RedmineCrm::ActsAsTaggable::Tag.count' do
6
+ RedmineCrm::ActsAsTaggable::Tag.find_or_create_with_like_by_name('error')
7
+ end
15
8
 
16
- def test_name_required
17
- t = Tag.create
18
- assert_match /blank/, t.errors[:name].to_s
19
- end
9
+ assert_difference 'RedmineCrm::ActsAsTaggable::Tag.count', 1 do
10
+ RedmineCrm::ActsAsTaggable::Tag.find_or_create_with_like_by_name('new_tag')
11
+ end
12
+ end
20
13
 
21
- def test_name_unique
22
- t = Tag.create!(:name => 'My tag')
23
- duplicate = t.dup
24
- assert !duplicate.save
25
- assert_match /not uniq/, duplicate.errors[:name].to_s
26
- end
14
+ def test_name_required
15
+ tag = RedmineCrm::ActsAsTaggable::Tag.new
16
+ tag.valid?
17
+ assert_match /blank/, tag.errors[:name].to_s
18
+ end
27
19
 
28
- def test_taggings
29
- assert_equivalent [taggings(:tag_for_error), taggings(:tag_for_error1), taggings(:tag_for_error2)], tags(:error).taggings
30
- assert_equivalent [taggings(:tag_for_question1), taggings(:tag_for_question2), taggings(:tag_for_question3)], tags(:question).taggings
31
- end
20
+ def test_name_unique
21
+ tag = RedmineCrm::ActsAsTaggable::Tag.create!(name: 'My tag')
22
+ tag_with_same_name = tag.dup
23
+ assert !tag_with_same_name.valid?
24
+ assert_match /not uniq/, tag_with_same_name.errors[:name].to_s
25
+ end
32
26
 
33
- def test_to_s
34
- assert_equal tags(:error).name, tags(:error).to_s
35
- end
27
+ def test_taggings
28
+ assert_equivalent [taggings(:tag_for_error), taggings(:tag_for_error1), taggings(:tag_for_error2)], tags(:error).taggings
29
+ assert_equivalent [taggings(:tag_for_question1), taggings(:tag_for_question2), taggings(:tag_for_question3)], tags(:question).taggings
30
+ end
36
31
 
37
- def test_equality
38
- assert_equal tags(:error), tags(:error)
39
- assert_equal Tag.find(tags(:error).id), Tag.find(tags(:error).id)
40
- assert_equal Tag.new(:name => 'A'), Tag.new(:name => 'A')
41
- assert_not_equal Tag.new(:name => 'A'), Tag.new(:name => 'B')
42
- end
32
+ def test_to_s
33
+ assert_equal tags(:error).name, tags(:error).to_s
34
+ end
43
35
 
44
- def test_taggings_removed_when_tag_destroyed
45
- assert_difference("Tagging.count", -Tagging.where(:tag_id => tags(:error).id).count) do
46
- assert tags(:error).destroy
47
- end
48
- end
36
+ def test_tag_is_equal_to_itself
37
+ tag = tags(:error)
38
+ assert_equal tag, tag
39
+ end
49
40
 
50
- def test_all_counts
51
- assert_tag_counts Tag.counts, :error => 3, :feature => 1, :bug => 1, :question => 3
52
- end
41
+ def test_tag_is_equal_to_tag_with_same_name
42
+ tag = tags(:error)
43
+ assert_equal tag, tag.dup
44
+ end
53
45
 
54
- def test_all_counts_with_string_conditions
55
- assert_tag_counts Tag.counts(:conditions => 'taggings.created_at >= \'2015-01-01\''),
56
- :question => 3, :error => 2, :feature => 1, :bug => 1
57
- end
46
+ def test_tag_is_not_equal_to_tag_with_other_name
47
+ tag = tags(:error)
48
+ other_tag = tag.dup
49
+ other_tag.name = 'not error'
50
+ assert_not_equal tag, other_tag
51
+ end
58
52
 
59
- def test_all_counts_with_array_conditions
60
- assert_tag_counts Tag.counts(:conditions => ['taggings.created_at >= ?', '2015-01-01']),
61
- :question => 3, :error => 2, :feature => 1, :bug => 1
62
- end
53
+ def test_taggings_removed_when_tag_destroyed
54
+ assert_difference("RedmineCrm::ActsAsTaggable::Tagging.count", -RedmineCrm::ActsAsTaggable::Tagging.where(tag_id: tags(:error).id).count) do
55
+ assert tags(:error).destroy
63
56
  end
64
57
  end
58
+
59
+ def test_all_counts
60
+ assert_tag_counts RedmineCrm::ActsAsTaggable::Tag.counts, error: 3, feature: 1, bug: 1, question: 3
61
+ end
62
+
63
+ def test_all_counts_with_string_conditions
64
+ assert_tag_counts RedmineCrm::ActsAsTaggable::Tag.counts(conditions: 'taggings.created_at >= \'2015-01-01\''),
65
+ question: 3, error: 2, feature: 1, bug: 1
66
+ end
67
+
68
+ def test_all_counts_with_array_conditions
69
+ assert_tag_counts RedmineCrm::ActsAsTaggable::Tag.counts(conditions: ['taggings.created_at >= ?', '2015-01-01']),
70
+ question: 3, error: 2, feature: 1, bug: 1
71
+ end
65
72
  end