1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# -*- coding: utf-8 -*-
require 'spec_helper'
describe Tweet do
context "scopes" do
before :all do
@favoriters = []
@retweeters = []
@created_users = FactoryGirl.create_list(:user, 5)
@created_users.each do |u|
ts = FactoryGirl.create_list(:tweet, 3, user: u)
us = @created_users.reject{|m| m == u} # 4
# favs: 3, 1, 0
us.shuffle.take(3).each do |m|
FactoryGirl.create(:favorite, tweet: ts[0], user: m)
@favoriters << m
end
_s = us.shuffle[1]
FactoryGirl.create(:favorite, tweet: ts[1], user: _s)
@favoriters << _s
# rts: 2, 1, 0
us.shuffle.take(2).each do |m|
FactoryGirl.create(:retweet, tweet: ts[0], user: m)
@retweeters << m
end
_m = us.shuffle[1]
FactoryGirl.create(:retweet, tweet: ts[1], user: _m)
@retweeters << _m
end
@favoriters.uniq!
@retweeters.uniq!
end
after :all do
@created_users.map(&:destroy)
end
it "3日分" do
tweets = Tweet.recent
tweets.should_not include -> tweet {tweet.tweeted_at < Time.zone.now - 3.days}
end
it "反応があった分" do
tweets = Tweet.reacted
tweets.should_not include -> tweet {tweet.favorites_count + tweet.retweets_count == 0}
end
it "新しい順" do
tweets = Tweet.order_by_id.limit(2)
tweets.first.id.should be > tweets.last.id
end
it "ふぁぼ数順" do
tweets = Tweet.order_by_favorites
tweets.first.favorites.count.should be >= tweets.last.favorites.count
end
it "RT数順" do
tweets = Tweet.order_by_retweets
tweets.first.retweets.count.should be >= tweets.last.retweets.count
end
it "反応数順" do
tweets = Tweet.order_by_reactions.limit(2)
tweets.first.retweets.count.should be >= tweets.last.retweets.count
end
it "ユーザーにふぁぼられたツイート" do
tweets = Tweet.favorited_by(@favoriters.first)
tweets.should_not include -> tweet {tweet.user_id != @favoriters.first.id}
end
it "ユーザーにRTされたツイート" do
tweets = Tweet.retweeted_by(@retweeters.first)
tweets.should_not include -> tweet {tweet.user_id != @retweeters.first.id}
end
it "ユーザーが反応したツイート" do
user = (@favoriters + @retweeters).sample
tweets = Tweet.favorited_by(user)
tweets.should_not include -> tweet {tweet.user_id != user.id}
end
it "オリジナルのツイート" do
# TODO
end
end
context "class methods" do
it "Tweet.cached" do
# TODO
end
end
end
|