Finish port to fabrication
[shapado:piglops-shapado.git] / spec / models / user_spec.rb
1 require 'spec_helper'
2
3 describe User do
4   before(:each) do
5     @user = Fabricate(:user)
6     Thread.current[:current_user] = @user
7   end
8
9   describe "module/plugin inclusions (optional)" do
10   end
11
12   describe "validations" do
13   end
14
15   describe "association" do
16   end
17
18   describe "callbacks" do
19   end
20
21   describe "named scopes" do
22   end
23
24   describe "class methods" do
25     describe "User#find_for_authentication" do
26       it "should get the user with his login" do
27         User.find_for_authentication(:email => @user.login).should == @user
28       end
29     end
30
31     describe "User#find_by_login_or_id" do
32
33       it "should return the user with his login" do
34         User.find_by_login_or_id(@user.login).should == @user
35       end
36
37       it "should return the user with his id" do
38         User.find_by_login_or_id(@user.login).should == @user
39       end
40     end
41
42     describe "User#find_experts" do
43       it("should return @user") do
44         @user.preferred_languages = ["en", "es", "fr"]
45         @user.save
46         @stat = Fabricate(:user_stat, :user => @user, :answer_tags => ["tag1"])
47         User.find_experts(["tag1"],["en", "es", "fr"]).first.should == @user
48       end
49
50       it("should not return @user") do
51         @user.preferred_languages = ["en", "es", "fr"]
52         @user.save
53         @stat = Fabricate(:user_stat, :user => @user, :answer_tags => ["tag1"])
54         User.find_experts(["tag1"], ["en"], {:except => @user.id}).first.should_not == @user
55       end
56     end
57   end
58
59   describe "instance methods" do
60     describe "User#display_name" do
61       it "should return the user's name" do
62         @user.name = "test"
63         @user.display_name.should == @user.name
64       end
65
66       it "should return the user's login when the name is blank" do
67         @user.display_name.should == @user.login
68       end
69     end
70
71     describe "User#login=" do
72       it "should downcase the login" do
73         @user.login = "MEE"
74         @user.login.should == "mee"
75       end
76     end
77
78     describe "User#email=" do
79       it "should downcase the email" do
80         @user.email = "ME@example.com"
81         @user.email.should == "me@example.com"
82       end
83     end
84
85     describe "User#to_param" do
86       it "should return the user id when the login is blank" do
87         @user.login = ""
88         @user.to_param.should == @user.id
89       end
90
91       it "should return the user id when the login have special charts" do
92         @user.login = "jhon@doe"
93         @user.to_param.should == @user.id
94       end
95
96       it "should return the user login if this have wight spaces" do
97         @user.login = "jhon doe"
98         @user.to_param.should == @user.login
99       end
100     end
101
102     describe "User#add_preferred_tags" do
103       it "should add unique tags" do
104         @group = Fabricate(:group, :owner => @user)
105         @user.join!(@group)
106         @user.add_preferred_tags(["a", "a", "b", "c"], @group)
107         @user = User.find(@user.id)
108         @user.config_for(@group).preferred_tags.should == ["a", "b", "c"]
109         @group.destroy
110       end
111     end
112
113     describe "User#remove_preferred_tags" do
114       it "remove the tags a, b" do
115         @group = Fabricate(:group, :owner => @user)
116         @user.add_preferred_tags(["a", "b", "c"], @group)
117         @user.reload
118         @user.remove_preferred_tags(["a", "b"], @group)
119         @user = User.find(@user.id)
120         @user.config_for(@group).preferred_tags.should == ["c"]
121         @group.destroy
122       end
123     end
124
125     describe "User#preferred_tags_on" do
126       it "should return a,b,c tags" do
127         @group = Fabricate(:group, :owner => @user)
128         @user.add_preferred_tags(["a", "b", "c"], @group)
129         @user = User.find(@user.id)
130         @user.preferred_tags_on(@group).should == ["a", "b", "c"]
131         @group.destroy
132       end
133     end
134
135     describe "User#language_filter=" do
136       it "should set the language filter" do
137         @user.language_filter.should == "user"
138         @user.language_filter= "es"
139         @user.language_filter.should == "es"
140       end
141
142       it "should not set the language filter when is not a avaible filter" do
143         @user.language_filter.should == "user"
144         @user.language_filter= "x"
145         @user.language_filter.should_not == "x"
146       end
147     end
148
149     describe "User#languages_to_filter" do
150       before(:each) do
151         @group = Fabricate(:group, :languages => ["en","es","fr"])
152       end
153
154       it "should return the AVAILABLE_LANGUAGES" do
155         @user.language_filter="any"
156         @user.languages_to_filter(@group).should == @group.languages
157       end
158
159       it "should return the user's preferred languages" do
160         @user.language_filter="user"
161         @user.preferred_languages = ["en", "es"]
162         @user.languages_to_filter(@group).should == @user.preferred_languages
163       end
164
165       it "should return the user's language filter" do
166         @user.language_filter="es"
167         @user.languages_to_filter(@group).should == ["es"]
168       end
169     end
170
171     describe "User#is_preferred_tag?" do
172       it "should return the tag" do
173         @group = Fabricate(:group, :owner => @user)
174         @user.add_preferred_tags(["a", "b", "c"], @group)
175         @user = User.find(@user.id)
176         @user.is_preferred_tag?(@group, "a").should == "a"
177         @group.destroy
178       end
179     end
180
181     describe "User#admin?" do
182       it "should return true when the user's role is admin" do
183         @user.role = "admin"
184         @user.admin?.should == true
185       end
186
187       it "should return false when the user's role is not admin" do
188         @user.role = "user"
189         @user.admin?.should == false
190       end
191     end
192
193     describe "User#age" do
194       it "should return 18" do
195         @user.birthday = 18.years.ago
196         @user.age == 18
197       end
198     end
199
200     describe "User#can_modify?" do
201       it "should can modify the question" do
202         Activity.stub!(:create!)
203         @question = Fabricate(:question, :user => @user)
204         @user.can_modify?(@question)
205       end
206     end
207
208     describe "User#can_create_reward?" do
209       it "return true when the question was created more than 2 days ago" do
210         Activity.stub!(:create!)
211         @question = Fabricate(:question, :user => @user, :created_at => 3.days.ago)
212         @user.update_reputation(76, @question.group)
213         @user.reload
214         @user.can_create_reward?(@question).should == true
215       end
216     end
217
218     describe "User#groups" do
219       it "should not return groups" do
220         @user.groups.should be_empty
221       end
222
223       it "should return @group" do
224         @group = Fabricate(:group)
225         @user.join!(@group)
226         @user.groups.map(&:id).should include @group.id
227       end
228     end
229
230     describe "User#member_of?" do
231       before(:each) do
232         @group = Fabricate(:group)
233       end
234
235       it "should return false when @user is not a member of @group" do
236         @user.member_of?(@group).should be_false
237       end
238
239       it "should return true when @user is a member of @group" do
240         @user.join!(@group)
241         @user.member_of?(@group).should be_true
242       end
243     end
244
245     describe "User#role_on" do
246       before(:each) do
247         @group = Fabricate(:group)
248       end
249
250       it "should return " do
251         @group.add_member(@user, "moderator")
252         @user.role_on(@group).should == "moderator"
253       end
254     end
255
256     describe "User#owner_of?" do
257     end
258
259     describe "User#mod_of?" do
260     end
261
262     describe "User#editor_of?" do
263     end
264
265     describe "User#user_of?" do
266     end
267
268     describe "User#main_language" do
269     end
270
271     describe "User#openid_login?" do
272     end
273
274     describe "User#twitter_login?" do
275     end
276
277     describe "User#has_voted?" do
278     end
279
280     describe "User#vote_on" do
281     end
282
283     describe "User#favorite?" do
284     end
285
286     describe "User#favorite" do
287     end
288
289     describe "User#logged!" do
290     end
291
292     describe "User#on_activity" do
293     end
294
295     describe "User#activity_on" do
296       it "should increment activity days for @user on @group" do
297         @group = Fabricate(:group)
298         @user.join!(@group)
299
300         date = Time.now
301         21.times do |i|
302           @user.reload
303           date += 1.day
304           @user.activity_on(@group, date)
305           membership = @user.config_for(@group, false)
306           membership.activity_days.should == i+1
307         end
308       end
309
310       it "should reset activity days for @user on @group" do
311         @group = Fabricate(:group)
312         @user.join!(@group)
313         date = Time.now
314         21.times do |i|
315           @user.reload
316           date += 1.day
317           @user.activity_on(@group, date)
318           @user.config_for(@group, false).activity_days.should == i+1
319         end
320         date += 2.days
321         @user.activity_on(@group, date)
322         @user.reload
323         @user.config_for(@group, false).activity_days.should == 0
324       end
325     end
326
327     describe "User#reset_activity_days!" do
328     end
329
330     describe "User#upvote!" do
331     end
332
333     describe "User#downvote!" do
334     end
335
336     describe "User#update_reputation" do
337     end
338
339     describe "User#reputation_on" do
340     end
341
342     describe "User#stats" do
343     end
344
345     describe "User#badges_count_on" do
346     end
347
348     describe "User#badges_on" do
349     end
350
351     describe "User#find_badge_on" do
352     end
353
354     describe "User#add_friend" do
355     end
356
357     describe "User#remove_friend" do
358     end
359
360     describe "User#followers" do
361       it "When the user does not have followers" do
362         friend = Fabricate(:user)
363         @user.followers.count.should == 0
364       end
365
366       it "When the user have followers" do
367         @group = Fabricate(:group, :owner => @user)
368         @user.join!(@group)
369         friend = Fabricate(:user)
370         friend.join!(@group)
371         friend.add_friend(@user)
372         @user.friend_list.reload
373         @user.followers.count.should == 1
374       end
375     end
376
377     describe "User#following" do
378     end
379
380     describe "User#following?" do
381     end
382
383     describe "User#viewed_on!" do
384     end
385
386     describe "User#config_for" do
387     end
388
389     describe "User#reputation_stats" do
390     end
391
392     describe "User#has_flagged?" do
393     end
394
395     describe "User#has_requested_to_close?" do
396     end
397
398     describe "User#has_requested_to_open?" do
399     end
400
401     describe "User#generate_uuid" do
402     end
403   end
404 end