yeshoua_crm 1.0.0
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/Rakefile +11 -0
- data/lib/yeshoua_crm.rb +87 -0
- data/lib/yeshoua_crm/acts_as_draftable/draft.rb +40 -0
- data/lib/yeshoua_crm/acts_as_draftable/rcrm_acts_as_draftable.rb +154 -0
- data/lib/yeshoua_crm/acts_as_list/list.rb +282 -0
- data/lib/yeshoua_crm/acts_as_taggable/rcrm_acts_as_taggable.rb +350 -0
- data/lib/yeshoua_crm/acts_as_taggable/tag.rb +81 -0
- data/lib/yeshoua_crm/acts_as_taggable/tag_list.rb +111 -0
- data/lib/yeshoua_crm/acts_as_taggable/tagging.rb +16 -0
- data/lib/yeshoua_crm/acts_as_viewed/rcrm_acts_as_viewed.rb +274 -0
- data/lib/yeshoua_crm/acts_as_votable/rcrm_acts_as_votable.rb +80 -0
- data/lib/yeshoua_crm/acts_as_votable/rcrm_acts_as_voter.rb +20 -0
- data/lib/yeshoua_crm/acts_as_votable/votable.rb +323 -0
- data/lib/yeshoua_crm/acts_as_votable/vote.rb +28 -0
- data/lib/yeshoua_crm/acts_as_votable/voter.rb +131 -0
- data/lib/yeshoua_crm/assets_manager.rb +43 -0
- data/lib/yeshoua_crm/currency.rb +439 -0
- data/lib/yeshoua_crm/currency/formatting.rb +224 -0
- data/lib/yeshoua_crm/currency/heuristics.rb +151 -0
- data/lib/yeshoua_crm/currency/loader.rb +24 -0
- data/lib/yeshoua_crm/helpers/external_assets_helper.rb +17 -0
- data/lib/yeshoua_crm/helpers/form_tag_helper.rb +123 -0
- data/lib/yeshoua_crm/helpers/tags_helper.rb +13 -0
- data/lib/yeshoua_crm/helpers/vote_helper.rb +35 -0
- data/lib/yeshoua_crm/liquid/drops/cells_drop.rb +86 -0
- data/lib/yeshoua_crm/liquid/drops/issues_drop.rb +66 -0
- data/lib/yeshoua_crm/liquid/drops/news_drop.rb +54 -0
- data/lib/yeshoua_crm/liquid/drops/users_drop.rb +72 -0
- data/lib/yeshoua_crm/liquid/filters/arrays.rb +177 -0
- data/lib/yeshoua_crm/liquid/filters/base.rb +208 -0
- data/lib/yeshoua_crm/money_helper.rb +65 -0
- data/lib/yeshoua_crm/version.rb +3 -0
- data/test/acts_as_draftable/draft_test.rb +29 -0
- data/test/acts_as_draftable/rcrm_acts_as_draftable_test.rb +185 -0
- data/test/acts_as_taggable/rcrm_acts_as_taggable_test.rb +345 -0
- data/test/acts_as_taggable/tag_list_test.rb +34 -0
- data/test/acts_as_taggable/tag_test.rb +72 -0
- data/test/acts_as_taggable/tagging_test.rb +15 -0
- data/test/acts_as_viewed/rcrm_acts_as_viewed_test.rb +47 -0
- data/test/acts_as_votable/rcrm_acts_as_votable_test.rb +19 -0
- data/test/acts_as_votable/rcrm_acts_as_voter_test.rb +14 -0
- data/test/acts_as_votable/votable_test.rb +507 -0
- data/test/acts_as_votable/voter_test.rb +296 -0
- data/test/currency_test.rb +292 -0
- data/test/liquid/drops/issues_drop_test.rb +34 -0
- data/test/liquid/drops/news_drop_test.rb +38 -0
- data/test/liquid/drops/projects_drop_test.rb +44 -0
- data/test/liquid/drops/uses_drop_test.rb +36 -0
- data/test/liquid/filters/arrays_filter_test.rb +24 -0
- data/test/liquid/filters/base_filter_test.rb +63 -0
- data/test/liquid/liquid_helper.rb +32 -0
- data/test/models/issue.rb +14 -0
- data/test/models/news.rb +3 -0
- data/test/models/project.rb +8 -0
- data/test/models/user.rb +11 -0
- data/test/models/vote_classes.rb +33 -0
- data/test/money_helper_test.rb +12 -0
- data/test/schema.rb +121 -0
- data/test/tags_helper_test.rb +29 -0
- data/test/test_helper.rb +66 -0
- data/test/vote_helper_test.rb +28 -0
- data/yeshoua_crm.gemspec +28 -0
- metadata +206 -0
@@ -0,0 +1,296 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class VoterTest < ActiveSupport::TestCase
|
4
|
+
def votable
|
5
|
+
votables(:votable)
|
6
|
+
end
|
7
|
+
|
8
|
+
def voter
|
9
|
+
voters(:voter)
|
10
|
+
end
|
11
|
+
|
12
|
+
def votable_cache
|
13
|
+
votable_caches(:votable_cache)
|
14
|
+
end
|
15
|
+
|
16
|
+
def votable_klass
|
17
|
+
votable.class
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_be_voted_on_after_a_voter_has_voted
|
21
|
+
votable.vote_by :voter => voter
|
22
|
+
assert voter.voted_on?(votable)
|
23
|
+
assert voter.voted_for?(votable)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_not_be_voted_on_if_a_voter_has_not_voted
|
27
|
+
assert !voter.voted_on?(votable)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_be_voted_on_after_a_voter_has_voted_under_scope
|
31
|
+
votable.vote_by :voter => voter, :vote_scope => 'rank'
|
32
|
+
assert voter.voted_on?(votable, :vote_scope => 'rank')
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_not_be_voted_on_other_scope_after_a_voter_has_voted_under_one_scope
|
36
|
+
votable.vote_by(:voter => voter, :vote_scope => 'rank')
|
37
|
+
assert !voter.voted_on?(votable)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_be_voted_as_true_when_a_voter_has_voted_true
|
41
|
+
votable.vote_by(:voter => voter)
|
42
|
+
assert voter.voted_as_when_voted_on(votable)
|
43
|
+
assert voter.voted_as_when_voted_for(votable)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_be_voted_as_true_when_a_voter_has_voted_true_under_scope
|
47
|
+
votable.vote_by(:voter => voter, :vote_scope => 'rank')
|
48
|
+
assert voter.voted_as_when_voted_for(votable, :vote_scope => 'rank')
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_be_voted_as_false_when_a_voter_has_voted_false
|
52
|
+
votable.vote_by(:voter => voter, :vote => false)
|
53
|
+
assert !voter.voted_as_when_voted_for(votable)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_be_voted_as_false_when_a_voter_has_voted_false_under_scope
|
57
|
+
votable.vote_by(:voter => voter, :vote => false, :vote_scope => 'rank')
|
58
|
+
assert !voter.voted_as_when_voted_for(votable, :vote_scope => 'rank')
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_be_voted_as_nil_when_a_voter_has_never_voted
|
62
|
+
assert_nil voter.voted_as_when_voting_on(votable)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_be_voted_as_nil_when_a_voter_has_never_voted_under_the_scope
|
66
|
+
votable.vote_by :voter => voter, :vote => false, :vote_scope => 'rank'
|
67
|
+
assert_nil voter.voted_as_when_voting_on(votable)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_return_true_if_voter_has_voted_true
|
71
|
+
votable.vote_by(:voter => voter)
|
72
|
+
assert voter.voted_up_on?(votable)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_return_false_if_voter_has_not_voted_true
|
76
|
+
votable.vote_by(:voter => voter, :vote => false)
|
77
|
+
assert !voter.voted_up_on?(votable)
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_return_true_if_the_voter_has_voted_false
|
81
|
+
votable.vote_by(:voter => voter, :vote => false)
|
82
|
+
assert voter.voted_down_on?(votable)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_return_false_if_the_voter_has_not_voted_false
|
86
|
+
votable.vote_by(:voter => voter, :vote => true)
|
87
|
+
assert !voter.voted_down_on?(votable)
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_provide_reserve_functionality_voter_can_vote_on_votable
|
91
|
+
voter.vote(:votable => votable, :vote => 'bad')
|
92
|
+
assert !voter.voted_as_when_voting_on(votable)
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_allow_the_voter_to_vote_up_a_model
|
96
|
+
voter.vote_up_for(votable)
|
97
|
+
assert_equal votable.get_up_votes.first.voter, voter
|
98
|
+
assert_equal votable.votes_for.up.first.voter, voter
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_allow_the_voter_to_vote_down_a_model
|
102
|
+
voter.vote_down_for(votable)
|
103
|
+
assert_equal votable.get_down_votes.first.voter, voter
|
104
|
+
assert_equal votable.votes_for.down.first.voter, voter
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_allow_the_voter_to_unvote_a_model
|
108
|
+
voter.vote_up_for(votable)
|
109
|
+
voter.unvote_for(votable)
|
110
|
+
assert_equal votable.find_votes_for.size, 0
|
111
|
+
assert_equal votable.votes_for.count, 0
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_get_all_of_the_voters_votes
|
115
|
+
voter.vote_up_for(votable)
|
116
|
+
assert_equal voter.find_votes.size, 1
|
117
|
+
assert_equal voter.votes.up.count, 1
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_get_all_of_the_voters_up_votes
|
121
|
+
voter.vote_up_for(votable)
|
122
|
+
assert_equal voter.find_up_votes.size, 1
|
123
|
+
assert_equal voter.votes.up.count, 1
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_get_all_of_the_voters_down_votes
|
127
|
+
voter.vote_down_for(votable)
|
128
|
+
assert_equal voter.find_down_votes.size, 1
|
129
|
+
assert_equal voter.votes.down.count, 1
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_get_all_of_the_votes_otes_for_a_class
|
133
|
+
votable.vote_by(:voter => voter)
|
134
|
+
votables(:votable2).vote_by(:voter => voter, :vote => false)
|
135
|
+
assert_equal voter.find_votes_for_class(votable_klass).size, 2
|
136
|
+
assert_equal voter.votes.for_type(votable_klass).count, 2
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_get_all_of_the_voters_up_votes_for_a_class
|
140
|
+
votable.vote_by(:voter => voter)
|
141
|
+
votables(:votable2).vote_by(:voter => voter, :vote => false)
|
142
|
+
assert_equal voter.find_up_votes_for_class(votable_klass).size, 1
|
143
|
+
assert_equal voter.votes.up.for_type(votable_klass).count, 1
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_get_all_of_the_voters_down_votes_for_a_class
|
147
|
+
votable.vote_by(:voter => voter)
|
148
|
+
votables(:votable2).vote_by( :voter => voter, :vote => false)
|
149
|
+
assert_equal voter.find_down_votes_for_class(votable_klass).size, 1
|
150
|
+
assert_equal voter.votes.down.for_type(votable_klass).count, 1
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_be_contained_to_instances
|
154
|
+
voter.vote(:votable => votable, :vote => false)
|
155
|
+
voters(:voter2).vote(:votable => votable)
|
156
|
+
|
157
|
+
assert !voter.voted_as_when_voting_on(votable)
|
158
|
+
end
|
159
|
+
|
160
|
+
# describe '#find_voted_items
|
161
|
+
|
162
|
+
def test_returns_objects_that_a_user_has_upvoted_for
|
163
|
+
votable.vote_by(:voter => voter)
|
164
|
+
votables(:votable2).vote_by(:voter => voters(:voter2))
|
165
|
+
assert voter.find_voted_items.include? votable
|
166
|
+
assert_equal voter.find_voted_items.size, 1
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_returns_objects_that_a_user_has_upvoted_for_using_scope
|
170
|
+
votable.vote_by(:voter => voter, :vote_scope => 'rank')
|
171
|
+
votables(:votable2).vote_by(:voter => voters(:voter2), :vote_scope => 'rank')
|
172
|
+
assert voter.find_voted_items(:vote_scope => 'rank').include? votable
|
173
|
+
assert_equal voter.find_voted_items(:vote_scope => 'rank').size, 1
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_returns_objects_that_a_user_has_downvoted_for
|
177
|
+
votable.vote_down(voter)
|
178
|
+
votables(:votable2).vote_down(voters(:voter2))
|
179
|
+
assert voter.find_voted_items.include? votable
|
180
|
+
assert_equal voter.find_voted_items.size, 1
|
181
|
+
end
|
182
|
+
|
183
|
+
def test_returns_objects_that_a_user_has_downvoted_for_using_scope
|
184
|
+
votable.vote_down voter, :vote_scope => 'rank'
|
185
|
+
votables(:votable2).vote_down(voters(:voter2), :vote_scope => 'rank')
|
186
|
+
assert voter.find_voted_items(:vote_scope => 'rank').include? votable
|
187
|
+
assert_equal voter.find_voted_items(:vote_scope => 'rank').size, 1
|
188
|
+
end
|
189
|
+
|
190
|
+
# describe '#find_up_voted_items
|
191
|
+
def test_returns_objects_that_a_user_has_upvoted_for
|
192
|
+
votable.vote_by(:voter => voter)
|
193
|
+
votables(:votable2).vote_by :voter => voters(:voter2)
|
194
|
+
assert voter.find_up_voted_items.include? votable
|
195
|
+
assert_equal voter.find_up_voted_items.size, 1
|
196
|
+
assert voter.find_liked_items.include? votable
|
197
|
+
assert_equal voter.find_liked_items.size, 1
|
198
|
+
end
|
199
|
+
|
200
|
+
def test_returns_objects_that_a_user_has_upvoted_for_using_scope
|
201
|
+
votable.vote_by(:voter => voter, :vote_scope => 'rank')
|
202
|
+
votables(:votable2).vote_by(:voter => voters(:voter2), :vote_scope => 'rank')
|
203
|
+
assert voter.find_up_voted_items(:vote_scope => 'rank').include? votable
|
204
|
+
assert_equal voter.find_up_voted_items(:vote_scope => 'rank').size, 1
|
205
|
+
end
|
206
|
+
|
207
|
+
def test_does_not_return_objects_that_a_user_has_downvoted_for
|
208
|
+
votable.vote_down voter
|
209
|
+
assert_equal voter.find_up_voted_items.size, 0
|
210
|
+
end
|
211
|
+
|
212
|
+
def test_does_not_return_objects_that_a_user_has_downvoted_for_using_scope
|
213
|
+
votable.vote_down voter, :vote_scope => 'rank'
|
214
|
+
assert_equal voter.find_up_voted_items(:vote_scope => 'rank').size, 0
|
215
|
+
end
|
216
|
+
|
217
|
+
# describe '#find_down_voted_items
|
218
|
+
|
219
|
+
def test_does_not_return_objects_that_a_user_has_upvoted_for
|
220
|
+
votable.vote_by :voter => voter
|
221
|
+
assert_equal voter.find_down_voted_items.size, 0
|
222
|
+
end
|
223
|
+
|
224
|
+
def test_does_not_return_objects_that_a_user_has_upvoted_for_using_scope
|
225
|
+
votable.vote_by :voter => voter, :vote_scope => 'rank'
|
226
|
+
assert_equal voter.find_down_voted_items(:vote_scope => 'rank').size, 0
|
227
|
+
end
|
228
|
+
|
229
|
+
def test_returns_objects_that_a_user_has_downvoted_for
|
230
|
+
votable.vote_down voter
|
231
|
+
votables(:votable2).vote_down voters(:voter2)
|
232
|
+
assert voter.find_down_voted_items.include? votable
|
233
|
+
assert_equal voter.find_down_voted_items.size, 1
|
234
|
+
assert voter.find_disliked_items.include? votable
|
235
|
+
assert_equal voter.find_disliked_items.size, 1
|
236
|
+
end
|
237
|
+
|
238
|
+
def test_returns_objects_that_a_user_has_downvoted_for_using_scope
|
239
|
+
votable.vote_down voter, :vote_scope => 'rank'
|
240
|
+
votables(:votable2).vote_down voters(:voter2), :vote_scope => 'rank'
|
241
|
+
assert voter.find_down_voted_items(:vote_scope => 'rank').include? votable
|
242
|
+
assert_equal voter.find_down_voted_items(:vote_scope => 'rank').size, 1
|
243
|
+
end
|
244
|
+
|
245
|
+
# describe '#get_voted
|
246
|
+
def get_voted
|
247
|
+
voter.get_voted(votable.class)
|
248
|
+
end
|
249
|
+
|
250
|
+
def test_returns_objects_of_a_class_that_a_voter_has_voted_for
|
251
|
+
votable.vote_by :voter => voter
|
252
|
+
votables(:votable2).vote_down voter
|
253
|
+
assert get_voted.include? votable
|
254
|
+
assert get_voted.include? votables(:votable2)
|
255
|
+
assert_equal get_voted.size, 2
|
256
|
+
end
|
257
|
+
|
258
|
+
def test_does_not_return_objects_of_a_class_that_a_voter_has_voted_for
|
259
|
+
votable.vote_by :voter => voters(:voter2)
|
260
|
+
votables(:votable2).vote_by :voter => voters(:voter2)
|
261
|
+
assert_equal get_voted.size, 0
|
262
|
+
end
|
263
|
+
|
264
|
+
# describe '#get_up_voted
|
265
|
+
|
266
|
+
def get_up_voted
|
267
|
+
voter.get_up_voted(votable.class)
|
268
|
+
end
|
269
|
+
|
270
|
+
def test_returns_up_voted_items_that_a_voter_has_voted_for
|
271
|
+
votable.vote_by :voter => voter
|
272
|
+
assert get_up_voted.include? votable
|
273
|
+
assert_equal get_up_voted.size, 1
|
274
|
+
end
|
275
|
+
|
276
|
+
def test_does_not_return_down_voted_items_a_voter_has_voted_for
|
277
|
+
votable.vote_down voter
|
278
|
+
assert_equal get_up_voted.size, 0
|
279
|
+
end
|
280
|
+
|
281
|
+
# describe '#get_down_voted
|
282
|
+
def get_down_voted
|
283
|
+
voter.get_down_voted(votable.class)
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_does_not_return_up_voted_items_that_a_voter_has_voted_for
|
287
|
+
votable.vote_by :voter => voter
|
288
|
+
assert_equal get_down_voted.size, 0
|
289
|
+
end
|
290
|
+
|
291
|
+
def test_returns_down_voted_items_a_voter_has_voted_for
|
292
|
+
votable.vote_down voter
|
293
|
+
assert get_down_voted.include? votable
|
294
|
+
assert_equal get_down_voted.size, 1
|
295
|
+
end
|
296
|
+
end
|
@@ -0,0 +1,292 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
module YeshouaCrm
|
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
|
+
YeshouaCrm::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_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_nil Currency.find_by_iso_numeric("non iso 4217 numeric code")
|
53
|
+
assert_nil Currency.find_by_iso_numeric(0)
|
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_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_nil Currency.find("XXX")
|
120
|
+
#test with symbol
|
121
|
+
Currency.unregister(:yyz)
|
122
|
+
assert_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("BRL")
|
150
|
+
assert_equal :usd, currency.id
|
151
|
+
assert_equal 1, currency.priority
|
152
|
+
assert_equal "BRL", currency.iso_code
|
153
|
+
assert_equal "840", currency.iso_numeric
|
154
|
+
assert_equal "Real", 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{#<YeshouaCrm::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: BRL, 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, "BRL"
|
246
|
+
assert_equal Currency.new(:eur).to_s, "USD"
|
247
|
+
end
|
248
|
+
|
249
|
+
def test_to_sym
|
250
|
+
assert_equal Currency.new(:usd).to_sym, :BRL
|
251
|
+
assert_equal Currency.new(:eur).to_sym, :USD
|
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
|