* Some major bug fixes related to post sets. Tests for pools and favorites were added.
* Refactored the favorites code a bit. Adding a favorite from either an user or a post now works and will update all necessary records.
This commit is contained in:
@@ -21,9 +21,9 @@ class FavoriteTest < ActiveSupport::TestCase
|
||||
p1 = Factory.create(:post)
|
||||
p2 = Factory.create(:post)
|
||||
|
||||
p1.add_favorite(user1)
|
||||
p2.add_favorite(user1)
|
||||
p1.add_favorite(user2)
|
||||
user1.add_favorite!(p1)
|
||||
user1.add_favorite!(p2)
|
||||
user2.add_favorite!(p1)
|
||||
|
||||
favorites = user1.favorites.order("id desc")
|
||||
assert_equal(2, favorites.count)
|
||||
@@ -39,9 +39,8 @@ class FavoriteTest < ActiveSupport::TestCase
|
||||
user1 = Factory.create(:user)
|
||||
p1 = Factory.create(:post)
|
||||
p2 = Factory.create(:post)
|
||||
|
||||
p1.add_favorite(user1)
|
||||
p1.add_favorite(user1)
|
||||
user1.add_favorite!(p1)
|
||||
user1.add_favorite!(p1)
|
||||
|
||||
assert_equal(1, user1.favorites.count)
|
||||
end
|
||||
|
||||
116
test/unit/post_sets/favorite_test.rb
Normal file
116
test/unit/post_sets/favorite_test.rb
Normal file
@@ -0,0 +1,116 @@
|
||||
require_relative '../../test_helper'
|
||||
|
||||
module PostSets
|
||||
class FavoriteTest < ActiveSupport::TestCase
|
||||
context "In all cases" do
|
||||
setup do
|
||||
@user = Factory.create(:user)
|
||||
CurrentUser.user = @user
|
||||
CurrentUser.ip_addr = "127.0.0.1"
|
||||
MEMCACHE.flush_all
|
||||
|
||||
@post_1 = Factory.create(:post)
|
||||
@post_2 = Factory.create(:post)
|
||||
@post_3 = Factory.create(:post)
|
||||
@post_2.add_favorite!(@user)
|
||||
@post_1.add_favorite!(@user)
|
||||
@post_3.add_favorite!(@user)
|
||||
end
|
||||
|
||||
teardown do
|
||||
CurrentUser.user = nil
|
||||
CurrentUser.ip_addr = nil
|
||||
end
|
||||
|
||||
context "a favorite set for before the most recent post" do
|
||||
setup do
|
||||
id = ::Favorite.model_for(@user.id).where(:user_id => @user.id, :post_id => @post_3.id).first.id
|
||||
@set = PostSets::Base.new(:id => @user.id, :before_id => id)
|
||||
@set.stubs(:limit).returns(1)
|
||||
@set.extend(PostSets::Favorite)
|
||||
end
|
||||
|
||||
context "a sequential paginator" do
|
||||
setup do
|
||||
@set.extend(PostSets::Sequential)
|
||||
end
|
||||
|
||||
should "return the second most recent element" do
|
||||
assert_equal(1, @set.posts.size)
|
||||
assert_equal(@post_1.id, @set.posts.first.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "a favorite set for after the second most recent post" do
|
||||
setup do
|
||||
id = ::Favorite.model_for(@user.id).where(:user_id => @user.id, :post_id => @post_2.id).first.id
|
||||
@set = PostSets::Base.new(:id => @user.id, :after_id => id)
|
||||
@set.stubs(:limit).returns(1)
|
||||
@set.extend(PostSets::Favorite)
|
||||
end
|
||||
|
||||
context "a sequential paginator" do
|
||||
setup do
|
||||
@set.extend(PostSets::Sequential)
|
||||
end
|
||||
|
||||
should "return the most recent element" do
|
||||
assert_equal(1, @set.posts.size)
|
||||
assert_equal(@post_3.id, @set.posts.first.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "a favorite set for page 2" do
|
||||
setup do
|
||||
@set = PostSets::Base.new(:id => @user.id, :page => 2)
|
||||
@set.stubs(:limit).returns(1)
|
||||
@set.extend(PostSets::Favorite)
|
||||
end
|
||||
|
||||
context "a numbered paginator" do
|
||||
setup do
|
||||
@set.extend(PostSets::Numbered)
|
||||
end
|
||||
|
||||
should "return the second most recent element" do
|
||||
assert_equal(1, @set.posts.size)
|
||||
assert_equal(@post_1.id, @set.posts.first.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "a favorite set with no page specified" do
|
||||
setup do
|
||||
@set = PostSets::Base.new(:id => @user.id)
|
||||
@set.stubs(:limit).returns(1)
|
||||
@set.extend(PostSets::Favorite)
|
||||
end
|
||||
|
||||
context "a numbered paginator" do
|
||||
setup do
|
||||
@set.extend(PostSets::Numbered)
|
||||
end
|
||||
|
||||
should "return the most recent element" do
|
||||
assert_equal(3, @set.count)
|
||||
assert_equal(1, @set.posts.size)
|
||||
assert_equal(@post_3.id, @set.posts.first.id)
|
||||
end
|
||||
end
|
||||
|
||||
context "a sequential paginator" do
|
||||
setup do
|
||||
@set.extend(PostSets::Sequential)
|
||||
end
|
||||
|
||||
should "return the most recent element" do
|
||||
assert_equal(1, @set.posts.size)
|
||||
assert_equal(@post_3.id, @set.posts.first.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -16,7 +16,6 @@ module PostSets
|
||||
@pool.add_post!(@post_2)
|
||||
@pool.add_post!(@post_1)
|
||||
@pool.add_post!(@post_3)
|
||||
@set = PostSets::Pool.new(@pool, :page => 1)
|
||||
end
|
||||
|
||||
teardown do
|
||||
@@ -24,13 +23,42 @@ module PostSets
|
||||
CurrentUser.ip_addr = nil
|
||||
end
|
||||
|
||||
context "a pool with three posts" do
|
||||
should "by default sort the posts by id" do
|
||||
assert_equal([@post_1.id, @post_2.id, @post_3.id], @set.posts.map(&:id))
|
||||
context "a post pool set for page 2" do
|
||||
setup do
|
||||
@set = PostSets::Base.new(:id => @pool.id, :page => 2)
|
||||
@set.stubs(:limit).returns(1)
|
||||
@set.extend(PostSets::Pool)
|
||||
end
|
||||
|
||||
should "be capable of sorting by pool sequence" do
|
||||
assert_equal([@post_2.id, @post_1.id, @post_3.id], @set.sorted_posts.map(&:id))
|
||||
|
||||
context "a numbered paginator" do
|
||||
setup do
|
||||
@set.extend(PostSets::Numbered)
|
||||
end
|
||||
|
||||
should "return the second element" do
|
||||
assert_equal(1, @set.posts.size)
|
||||
assert_equal(@post_1.id, @set.posts.first.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "a post pool set with no page specified" do
|
||||
setup do
|
||||
@set = PostSets::Base.new(:id => @pool.id)
|
||||
@set.stubs(:limit).returns(1)
|
||||
@set.extend(PostSets::Pool)
|
||||
end
|
||||
|
||||
context "a numbered paginator" do
|
||||
setup do
|
||||
@set.extend(PostSets::Numbered)
|
||||
end
|
||||
|
||||
should "return the first element" do
|
||||
assert_equal(3, @set.count)
|
||||
assert_equal(1, @set.posts.size)
|
||||
assert_equal(@post_2.id, @set.posts.first.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -82,7 +82,7 @@ class PostTest < ActiveSupport::TestCase
|
||||
p1 = Factory.create(:post)
|
||||
c1 = Factory.create(:post, :parent_id => p1.id)
|
||||
user = Factory.create(:user)
|
||||
c1.add_favorite(user)
|
||||
c1.add_favorite!(user)
|
||||
c1.delete!
|
||||
p1.reload
|
||||
assert(!Favorite.model_for(user.id).exists?(:post_id => c1.id, :user_id => user.id))
|
||||
@@ -332,22 +332,22 @@ class PostTest < ActiveSupport::TestCase
|
||||
should "update the fav strings ont he post" do
|
||||
user = Factory.create(:user)
|
||||
post = Factory.create(:post)
|
||||
post.add_favorite(user)
|
||||
post.add_favorite!(user)
|
||||
post.reload
|
||||
assert_equal("fav:#{user.id}", post.fav_string)
|
||||
assert(Favorite.model_for(user.id).exists?(:user_id => user.id, :post_id => post.id))
|
||||
|
||||
post.add_favorite(user)
|
||||
post.add_favorite!(user)
|
||||
post.reload
|
||||
assert_equal("fav:#{user.id}", post.fav_string)
|
||||
assert(Favorite.model_for(user.id).exists?(:user_id => user.id, :post_id => post.id))
|
||||
|
||||
post.remove_favorite(user)
|
||||
post.remove_favorite!(user)
|
||||
post.reload
|
||||
assert_equal("", post.fav_string)
|
||||
assert(!Favorite.model_for(user.id).exists?(:user_id => user.id, :post_id => post.id))
|
||||
|
||||
post.remove_favorite(user)
|
||||
post.remove_favorite!(user)
|
||||
post.reload
|
||||
assert_equal("", post.fav_string)
|
||||
assert(!Favorite.model_for(user.id).exists?(:user_id => user.id, :post_id => post.id))
|
||||
@@ -474,7 +474,7 @@ class PostTest < ActiveSupport::TestCase
|
||||
post2 = Factory.create(:post)
|
||||
post3 = Factory.create(:post)
|
||||
user = Factory.create(:user)
|
||||
post1.add_favorite(user)
|
||||
post1.add_favorite!(user)
|
||||
relation = Post.tag_match("fav:#{user.name}")
|
||||
assert_equal(1, relation.count)
|
||||
assert_equal(post1.id, relation.first.id)
|
||||
|
||||
Reference in New Issue
Block a user