aboutsummaryrefslogtreecommitdiffstats
path: root/spec/models/tweet_spec.rb
blob: 78bf391fa8f614c117cd2b40496f9caa8dd6868a (plain)
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
      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