test_redmine_vz 0.0.24
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 +7 -0
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/README.md +71 -0
- data/Rakefile +20 -0
- data/config/currency_iso.json +2532 -0
- data/doc/CHANGELOG +55 -0
- data/doc/LICENSE.txt +339 -0
- data/lib/redmine_crm.rb +67 -0
- data/lib/redmine_crm/currency.rb +439 -0
- data/lib/redmine_crm/currency/formatting.rb +227 -0
- data/lib/redmine_crm/currency/heuristics.rb +151 -0
- data/lib/redmine_crm/currency/loader.rb +24 -0
- data/lib/redmine_crm/helpers/tags_helper.rb +15 -0
- data/lib/redmine_crm/helpers/vote_helper.rb +38 -0
- data/lib/redmine_crm/liquid/drops/issues_drop.rb +61 -0
- data/lib/redmine_crm/liquid/drops/news_drop.rb +45 -0
- data/lib/redmine_crm/liquid/drops/projects_drop.rb +78 -0
- data/lib/redmine_crm/liquid/drops/users_drop.rb +59 -0
- data/lib/redmine_crm/liquid/filters.rb +85 -0
- data/lib/redmine_crm/money_helper.rb +67 -0
- data/lib/redmine_crm/rcrm_acts_as_taggable.rb +342 -0
- data/lib/redmine_crm/rcrm_acts_as_viewed.rb +287 -0
- data/lib/redmine_crm/rcrm_acts_as_votable.rb +79 -0
- data/lib/redmine_crm/rcrm_acts_as_voter.rb +27 -0
- data/lib/redmine_crm/tag.rb +81 -0
- data/lib/redmine_crm/tag_list.rb +112 -0
- data/lib/redmine_crm/tagging.rb +20 -0
- data/lib/redmine_crm/version.rb +3 -0
- data/lib/redmine_crm/votable.rb +334 -0
- data/lib/redmine_crm/vote.rb +30 -0
- data/lib/redmine_crm/voter.rb +136 -0
- data/redmine_crm.gemspec +22 -0
- data/test/acts_as_taggable_test.rb +384 -0
- data/test/currency_test.rb +292 -0
- data/test/database.yml +17 -0
- data/test/fixtures/issue.rb +14 -0
- data/test/fixtures/issues.yml +12 -0
- data/test/fixtures/taggings.yml +32 -0
- data/test/fixtures/tags.yml +11 -0
- data/test/fixtures/user.rb +7 -0
- data/test/fixtures/users.yml +5 -0
- data/test/fixtures/votable_caches.yml +2 -0
- data/test/fixtures/votables.yml +4 -0
- data/test/fixtures/vote_classes.rb +54 -0
- data/test/fixtures/voters.yml +6 -0
- data/test/liquid_test.rb +80 -0
- data/test/money_helper_test.rb +12 -0
- data/test/schema.rb +100 -0
- data/test/tag_test.rb +63 -0
- data/test/tagging_test.rb +14 -0
- data/test/tags_helper_test.rb +29 -0
- data/test/test_helper.rb +118 -0
- data/test/viewed_test.rb +45 -0
- data/test/votable_model_test.rb +478 -0
- data/test/votable_test.rb +17 -0
- data/test/vote_helper_test.rb +28 -0
- data/test/voter_model_test.rb +296 -0
- metadata +141 -0
@@ -0,0 +1,292 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
module RedmineCrm
|
4
|
+
class CurrencyTest < ActiveSupport::TestCase
|
5
|
+
FOO = '{ "priority": 1, "iso_code": "FOO", "iso_numeric": "840", "name": "United States Dollar", "symbol": "$", "subunit": "Cent", "subunit_to_unit": 100, "symbol_first": true, "html_entity": "$", "decimal_mark": ".", "thousands_separator": ",", "smallest_denomination": 1 }'
|
6
|
+
def register_foo(opts={})
|
7
|
+
foo_attrs = JSON.parse(FOO, :symbolize_names => true)
|
8
|
+
# Pass an array of attribute names to 'skip' to remove them from the 'FOO'
|
9
|
+
# json before registering foo as a currency.
|
10
|
+
Array(opts[:skip]).each { |attr| foo_attrs.delete(attr) }
|
11
|
+
RedmineCrm::Currency.register(foo_attrs)
|
12
|
+
end
|
13
|
+
|
14
|
+
def unregister_foo
|
15
|
+
Currency.unregister(JSON.parse(FOO, :symbolize_names => true))
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_unknown_currency
|
19
|
+
assert_equal true, (Currency::UnknownCurrency < ArgumentError)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_matching_by_id
|
23
|
+
register_foo
|
24
|
+
foo = Currency.new(:foo)
|
25
|
+
assert_equal Currency.find(:foo), foo
|
26
|
+
assert_equal Currency.find(:FOO), foo
|
27
|
+
assert_equal Currency.find("foo"), foo
|
28
|
+
assert_equal Currency.find("FOO"), foo
|
29
|
+
unregister_foo
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_nil_unless_matching_given_id
|
33
|
+
assert_equal nil, Currency.find("ZZZ")
|
34
|
+
end
|
35
|
+
|
36
|
+
class Mock
|
37
|
+
def to_s
|
38
|
+
'208'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_matching_by_given_numeric_code
|
43
|
+
assert_equal Currency.find_by_iso_numeric(978), Currency.new(:eur)
|
44
|
+
assert_not_equal Currency.find_by_iso_numeric(208), Currency.new(:eur)
|
45
|
+
assert_equal Currency.find_by_iso_numeric('840'), Currency.new(:usd)
|
46
|
+
|
47
|
+
assert_equal Currency.find_by_iso_numeric(Mock.new), Currency.new(:dkk)
|
48
|
+
assert_not_equal Currency.find_by_iso_numeric(Mock.new), Currency.new(:usd)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_nil_if_no_currency_has_the_given_num_code
|
52
|
+
assert_equal Currency.find_by_iso_numeric("non iso 4217 numeric code"), nil
|
53
|
+
assert_equal Currency.find_by_iso_numeric(0), nil
|
54
|
+
end
|
55
|
+
|
56
|
+
# .all
|
57
|
+
def test_array_of_currencies
|
58
|
+
assert Currency.all.include?(Currency.new(:usd))
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_include_register_currencies
|
62
|
+
register_foo
|
63
|
+
assert Currency.all.include?(Currency.new(:foo))
|
64
|
+
unregister_foo
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_sort_by_priority
|
68
|
+
assert_equal Currency.all.first.priority, 1
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_raises_missing_attributes_error_if_no_priority
|
72
|
+
register_foo(:skip => :priority)
|
73
|
+
assert_raises Currency::MissingAttributeError do
|
74
|
+
Currency.all
|
75
|
+
end
|
76
|
+
unregister_foo
|
77
|
+
end
|
78
|
+
|
79
|
+
#.register
|
80
|
+
def test_register_new_currency
|
81
|
+
Currency.register(
|
82
|
+
iso_code: "XXX",
|
83
|
+
name: "Golden Doubloon",
|
84
|
+
symbol: "%",
|
85
|
+
subunit_to_unit: 100
|
86
|
+
)
|
87
|
+
new_currency = Currency.find("XXX")
|
88
|
+
assert_not_equal nil, new_currency
|
89
|
+
assert_equal "Golden Doubloon", new_currency.name
|
90
|
+
assert_equal "%", new_currency.symbol
|
91
|
+
Currency.unregister(iso_code: "XXX")
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_present_iso_code
|
95
|
+
assert_raises KeyError do
|
96
|
+
Currency.register(name: "New currency")
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# .unregister
|
101
|
+
def test_unregister_currency
|
102
|
+
Currency.register(iso_code: "XXX")
|
103
|
+
assert_not_equal nil, Currency.find("XXX")
|
104
|
+
Currency.unregister(iso_code: "XXX")
|
105
|
+
assert_equal nil, Currency.find("XXX")
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_exitred_currency
|
109
|
+
Currency.register(iso_code: "XXX")
|
110
|
+
assert_equal true, Currency.unregister(iso_code: "XXX")
|
111
|
+
assert_equal false, Currency.unregister(iso_code: "XXX")
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_passed_iso_code
|
115
|
+
Currency.register(iso_code: "XXX")
|
116
|
+
Currency.register(iso_code: "YYZ")
|
117
|
+
#test with string
|
118
|
+
Currency.unregister("XXX")
|
119
|
+
assert_equal nil, Currency.find("XXX")
|
120
|
+
#test with symbol
|
121
|
+
Currency.unregister(:yyz)
|
122
|
+
assert_equal nil, Currency.find(:yyz)
|
123
|
+
end
|
124
|
+
|
125
|
+
# .each
|
126
|
+
def test_each_currency_to_block
|
127
|
+
assert_equal true, Currency.respond_to?(:each)
|
128
|
+
currencies = []
|
129
|
+
Currency.each do |currency|
|
130
|
+
currencies.push(currency)
|
131
|
+
end
|
132
|
+
|
133
|
+
assert_equal currencies[0], Currency.all[0]
|
134
|
+
assert_equal currencies[1], Currency.all[1]
|
135
|
+
assert_equal currencies[-1], Currency.all[-1]
|
136
|
+
end
|
137
|
+
|
138
|
+
# enumerable
|
139
|
+
def test_implemants_enumerable
|
140
|
+
assert_equal true, Currency.respond_to?(:all?)
|
141
|
+
assert_equal true, Currency.respond_to?(:each_with_index)
|
142
|
+
assert_equal true, Currency.respond_to?(:map)
|
143
|
+
assert_equal true, Currency.respond_to?(:select)
|
144
|
+
assert_equal true, Currency.respond_to?(:reject)
|
145
|
+
end
|
146
|
+
|
147
|
+
# #initialize
|
148
|
+
def test_lookups_data_from_loading_config
|
149
|
+
currency = Currency.new("USD")
|
150
|
+
assert_equal :usd, currency.id
|
151
|
+
assert_equal 1, currency.priority
|
152
|
+
assert_equal "USD", currency.iso_code
|
153
|
+
assert_equal "840", currency.iso_numeric
|
154
|
+
assert_equal "United States Dollar", currency.name
|
155
|
+
assert_equal ".", currency.decimal_mark
|
156
|
+
assert_equal ".", currency.separator
|
157
|
+
assert_equal ",", currency.thousands_separator
|
158
|
+
assert_equal ",", currency.delimiter
|
159
|
+
assert_equal 1, currency.smallest_denomination
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_raises_with_unknown_currency
|
163
|
+
assert_raises Currency::UnknownCurrency do
|
164
|
+
Currency.new("xxx")
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
# #<=>
|
169
|
+
def test_compare_by_priority
|
170
|
+
assert Currency.new(:cad) > Currency.new(:usd)
|
171
|
+
assert Currency.new(:usd) < Currency.new(:eur)
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_compares_by_id_with_same_priority
|
175
|
+
Currency.register(iso_code: "ABD", priority: 15)
|
176
|
+
Currency.register(iso_code: "ABC", priority: 15)
|
177
|
+
Currency.register(iso_code: "ABE", priority: 15)
|
178
|
+
abd = Currency.find("ABD")
|
179
|
+
abc = Currency.find("ABC")
|
180
|
+
abe = Currency.find("ABE")
|
181
|
+
assert abd > abc
|
182
|
+
assert abe > abd
|
183
|
+
Currency.unregister("ABD")
|
184
|
+
Currency.unregister("ABC")
|
185
|
+
Currency.unregister("ABE")
|
186
|
+
end
|
187
|
+
|
188
|
+
# when one of the currencies has no 'priority' set
|
189
|
+
def test_compare_by_id
|
190
|
+
Currency.register(iso_code: "ABD") # No priority
|
191
|
+
abd = Currency.find(:abd)
|
192
|
+
usd = Currency.find(:usd)
|
193
|
+
assert abd < usd
|
194
|
+
Currency.unregister(iso_code: "ABD")
|
195
|
+
end
|
196
|
+
|
197
|
+
# "#=="
|
198
|
+
def test_strong_equal
|
199
|
+
eur = Currency.new(:eur)
|
200
|
+
assert eur === eur
|
201
|
+
end
|
202
|
+
|
203
|
+
def test_equal_id_in_different_case
|
204
|
+
assert_equal Currency.new(:eur), Currency.new(:eur)
|
205
|
+
assert_equal Currency.new(:eur), Currency.new(:EUR)
|
206
|
+
assert_not_equal Currency.new(:eur), Currency.new(:usd)
|
207
|
+
end
|
208
|
+
|
209
|
+
def test_direct_comparison_currency_and_symbol_string
|
210
|
+
assert_equal Currency.new(:eur), 'eur'
|
211
|
+
assert_equal Currency.new(:eur), 'EUR'
|
212
|
+
assert_equal Currency.new(:eur), :eur
|
213
|
+
assert_equal Currency.new(:eur), :EUR
|
214
|
+
assert_not_equal Currency.new(:eur), 'usd'
|
215
|
+
end
|
216
|
+
|
217
|
+
def test_comparison_with_nil
|
218
|
+
assert_not_equal nil, Currency.new(:eur)
|
219
|
+
end
|
220
|
+
|
221
|
+
#eql?
|
222
|
+
def test_eql
|
223
|
+
assert Currency.new(:eur).eql?(Currency.new(:eur))
|
224
|
+
assert !Currency.new(:eur).eql?(Currency.new(:usd))
|
225
|
+
end
|
226
|
+
|
227
|
+
# hash
|
228
|
+
def test_return_same_value_for_equal_objects
|
229
|
+
assert_equal Currency.new(:eur).hash, Currency.new(:eur).hash
|
230
|
+
assert_not_equal Currency.new(:eur).hash, Currency.new(:usd).hash
|
231
|
+
end
|
232
|
+
|
233
|
+
def test_return_intersection_for_array_of_object
|
234
|
+
intersection = [Currency.new(:eur), Currency.new(:usd)] & [Currency.new(:eur)]
|
235
|
+
assert_equal intersection, [Currency.new(:eur)]
|
236
|
+
end
|
237
|
+
|
238
|
+
# inspect
|
239
|
+
def test_work_as_documented
|
240
|
+
assert_equal Currency.new(:usd).inspect, %Q{#<RedmineCrm::Currency id: usd, priority: 1, symbol_first: true, thousands_separator: ,, html_entity: $, decimal_mark: ., name: United States Dollar, symbol: $, subunit_to_unit: 100, exponent: 2.0, iso_code: USD, iso_numeric: 840, subunit: Cent, smallest_denomination: 1>}
|
241
|
+
end
|
242
|
+
|
243
|
+
# to_s
|
244
|
+
def test_to_s
|
245
|
+
assert_equal Currency.new(:usd).to_s, "USD"
|
246
|
+
assert_equal Currency.new(:eur).to_s, "EUR"
|
247
|
+
end
|
248
|
+
|
249
|
+
def test_to_sym
|
250
|
+
assert_equal Currency.new(:usd).to_sym, :USD
|
251
|
+
assert_equal Currency.new(:eur).to_sym, :EUR
|
252
|
+
end
|
253
|
+
|
254
|
+
# to_currency
|
255
|
+
def test_to_currency
|
256
|
+
usd = Currency.new(:usd)
|
257
|
+
assert_equal usd.to_currency, usd
|
258
|
+
end
|
259
|
+
|
260
|
+
def test_doesnt_create_new_symbol_indefiniteily
|
261
|
+
assert_raises Currency::UnknownCurrency do
|
262
|
+
Currency.new("bogus")
|
263
|
+
end
|
264
|
+
assert !Symbol.all_symbols.map{|s| s.to_s}.include?("bogus")
|
265
|
+
end
|
266
|
+
|
267
|
+
# code
|
268
|
+
def test_code_as_documented
|
269
|
+
assert_equal Currency.new(:usd).code, "$"
|
270
|
+
assert_equal Currency.new(:azn).code, "\u20BC"
|
271
|
+
end
|
272
|
+
|
273
|
+
# exponent
|
274
|
+
def test_conform_to_iso_4217
|
275
|
+
assert Currency.new(:jpy).exponent == 0
|
276
|
+
assert Currency.new(:usd).exponent == 2
|
277
|
+
assert Currency.new(:iqd).exponent == 3
|
278
|
+
end
|
279
|
+
|
280
|
+
# decimal_places
|
281
|
+
def test_proper_place_for_know_currency
|
282
|
+
assert Currency.new(:mro).decimal_places == 1
|
283
|
+
assert Currency.new(:usd).decimal_places == 2
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_proper_place_for_custom_currency
|
287
|
+
register_foo
|
288
|
+
assert_equal 2, Currency.new(:foo).decimal_places
|
289
|
+
unregister_foo
|
290
|
+
end
|
291
|
+
end
|
292
|
+
end
|
data/test/database.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
mysql:
|
2
|
+
:adapter: mysql2
|
3
|
+
:host: localhost
|
4
|
+
:username: root
|
5
|
+
:password: 1
|
6
|
+
:database: rails_plugin_test
|
7
|
+
|
8
|
+
sqlite3:
|
9
|
+
:adapter: sqlite3
|
10
|
+
:database: ':memory:'
|
11
|
+
|
12
|
+
postgresql:
|
13
|
+
:adapter: postgresql
|
14
|
+
:database: rails_plugin_test
|
15
|
+
:user: container
|
16
|
+
:password: 1
|
17
|
+
:host: localhost
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Issue < ActiveRecord::Base
|
2
|
+
rcrm_acts_as_taggable
|
3
|
+
rcrm_acts_as_viewed
|
4
|
+
# default_scope {where(:closed => false)}
|
5
|
+
belongs_to :user
|
6
|
+
validates_presence_of :description
|
7
|
+
|
8
|
+
def save_without_validation
|
9
|
+
save
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class SpecialIssue < Issue
|
14
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
tag_for_error:
|
2
|
+
tag: error
|
3
|
+
taggable: first_issue (Issue)
|
4
|
+
created_at: 2014-01-01
|
5
|
+
tag_for_error1:
|
6
|
+
tag: error
|
7
|
+
taggable: second_issue (Issue)
|
8
|
+
created_at: 2015-01-01
|
9
|
+
tag_for_error2:
|
10
|
+
tag: error
|
11
|
+
taggable: third_issue (Issue)
|
12
|
+
created_at: 2015-01-01
|
13
|
+
tag_for_feature:
|
14
|
+
tag: feature
|
15
|
+
taggable: second_issue (Issue)
|
16
|
+
created_at: 2015-01-01
|
17
|
+
tag_for_bug:
|
18
|
+
tag: bug
|
19
|
+
taggable: second_issue (Issue)
|
20
|
+
created_at: 2015-01-01
|
21
|
+
tag_for_question1:
|
22
|
+
tag: question
|
23
|
+
taggable: third_issue (Issue)
|
24
|
+
created_at: 2015-01-01
|
25
|
+
tag_for_question2:
|
26
|
+
tag: question
|
27
|
+
taggable: first_issue (Issue)
|
28
|
+
created_at: 2015-01-01
|
29
|
+
tag_for_question3:
|
30
|
+
tag: question
|
31
|
+
taggable: second_issue (Issue)
|
32
|
+
created_at: 2015-02-01
|
@@ -0,0 +1,54 @@
|
|
1
|
+
class Voter < ActiveRecord::Base
|
2
|
+
rcrm_acts_as_voter
|
3
|
+
end
|
4
|
+
|
5
|
+
class NotVoter < ActiveRecord::Base
|
6
|
+
|
7
|
+
end
|
8
|
+
|
9
|
+
class Votable < ActiveRecord::Base
|
10
|
+
rcrm_acts_as_votable
|
11
|
+
validates_presence_of :name
|
12
|
+
end
|
13
|
+
|
14
|
+
class VotableVoter < ActiveRecord::Base
|
15
|
+
rcrm_acts_as_votable
|
16
|
+
rcrm_acts_as_voter
|
17
|
+
end
|
18
|
+
|
19
|
+
class StiVotable < ActiveRecord::Base
|
20
|
+
rcrm_acts_as_votable
|
21
|
+
end
|
22
|
+
|
23
|
+
class ChildOfStiVotable < StiVotable
|
24
|
+
end
|
25
|
+
|
26
|
+
class StiNotVotable < ActiveRecord::Base
|
27
|
+
validates_presence_of :name
|
28
|
+
end
|
29
|
+
|
30
|
+
class VotableChildOfStiNotVotable < StiNotVotable
|
31
|
+
rcrm_acts_as_votable
|
32
|
+
end
|
33
|
+
|
34
|
+
class NotVotable < ActiveRecord::Base
|
35
|
+
end
|
36
|
+
|
37
|
+
class VotableCache < ActiveRecord::Base
|
38
|
+
rcrm_acts_as_votable
|
39
|
+
validates_presence_of :name
|
40
|
+
end
|
41
|
+
|
42
|
+
class ABoringClass
|
43
|
+
def self.hw
|
44
|
+
'hello world'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
# def clean_database
|
50
|
+
# models = [ActsAsVotable::Vote, Voter, NotVoter, Votable, NotVotable, VotableCache]
|
51
|
+
# models.each do |model|
|
52
|
+
# ActiveRecord::Base.connection.execute "DELETE FROM #{model.table_name}"
|
53
|
+
# end
|
54
|
+
# end
|