+
<% if post_set.shown_posts.empty? %>
<%= render "post_sets/blank" %>
<% else %>
diff --git a/app/views/posts/partials/index/_seo_meta_tags.html.erb b/app/views/posts/partials/index/_seo_meta_tags.html.erb
index 66755c3e0..382f13e4b 100644
--- a/app/views/posts/partials/index/_seo_meta_tags.html.erb
+++ b/app/views/posts/partials/index/_seo_meta_tags.html.erb
@@ -12,6 +12,8 @@
<% if params[:tags].blank? && @post_set.current_page == 1 %>
<% canonical_url root_url(host: Danbooru.config.hostname) %>
+<% else %>
+ <% canonical_url posts_url(host: Danbooru.config.hostname, tags: params[:tags], page: params[:page], limit: params[:limit]) %>
<% end %>
<% noindex if @post_set.hide_from_crawler? %>
diff --git a/app/views/user_upgrades/new.html.erb b/app/views/user_upgrades/new.html.erb
index f72ed032a..7e88565bb 100644
--- a/app/views/user_upgrades/new.html.erb
+++ b/app/views/user_upgrades/new.html.erb
@@ -70,6 +70,12 @@
2,000 |
5,000 |
+
+ | Private Favorites |
+ no |
+ yes |
+ yes |
+
| Favorite Groups |
3 |
diff --git a/test/components/post_navbar_component_test.rb b/test/components/post_navbar_component_test.rb
index a27024ac0..60a37c0ec 100644
--- a/test/components/post_navbar_component_test.rb
+++ b/test/components/post_navbar_component_test.rb
@@ -7,7 +7,7 @@ class PostNavbarComponentTest < ViewComponent::TestCase
setup do
@post = create(:post)
- @user = create(:user)
+ @user = create(:gold_user)
end
context "The PostNavbarComponent" do
@@ -46,9 +46,8 @@ class PostNavbarComponentTest < ViewComponent::TestCase
context "for a post with favgroups" do
setup do
as(@user) do
- @favgroup1 = create(:favorite_group, creator: @user, is_public: true)
- @favgroup2 = create(:favorite_group, creator: @user, is_public: false)
- @post.update(tag_string: "favgroup:#{@favgroup1.id} favgroup:#{@favgroup2.id}")
+ @favgroup1 = create(:favorite_group, creator: @user, post_ids: [@post.id])
+ @favgroup2 = create(:private_favorite_group, creator: @user, post_ids: [@post.id])
end
end
diff --git a/test/components/post_votes_component_test.rb b/test/components/post_votes_component_test.rb
index df30aff6d..7a9118d56 100644
--- a/test/components/post_votes_component_test.rb
+++ b/test/components/post_votes_component_test.rb
@@ -11,12 +11,12 @@ class PostVotesComponentTest < ViewComponent::TestCase
end
context "for a user who can't vote" do
- should "not show the vote buttons" do
+ should "show the vote buttons" do
render_post_votes(@post, current_user: User.anonymous)
assert_css(".post-score")
- assert_no_css(".post-upvote-link")
- assert_no_css(".post-downvote-link")
+ assert_css(".post-upvote-link.inactive-link")
+ assert_css(".post-downvote-link.inactive-link")
end
end
@@ -34,8 +34,8 @@ class PostVotesComponentTest < ViewComponent::TestCase
context "for a downvoted post" do
should "highlight the downvote button as active" do
- @post.vote!(-1, @user)
- render_post_votes(@post, current_user: @user)
+ create(:post_vote, post: @post, user: @user, score: -1)
+ as(@user) { render_post_votes(@post, current_user: @user) }
assert_css(".post-upvote-link.inactive-link")
assert_css(".post-downvote-link.active-link")
@@ -44,8 +44,8 @@ class PostVotesComponentTest < ViewComponent::TestCase
context "for an upvoted post" do
should "highlight the upvote button as active" do
- @post.vote!(1, @user)
- render_post_votes(@post, current_user: @user)
+ create(:post_vote, post: @post, user: @user, score: 1)
+ as(@user) { render_post_votes(@post, current_user: @user) }
assert_css(".post-upvote-link.active-link")
assert_css(".post-downvote-link.inactive-link")
diff --git a/test/factories/favorite.rb b/test/factories/favorite.rb
index 441c6f4a9..40ef97b84 100644
--- a/test/factories/favorite.rb
+++ b/test/factories/favorite.rb
@@ -2,5 +2,9 @@ FactoryBot.define do
factory(:favorite) do
user
post
+
+ factory(:private_favorite) do
+ user factory: :gold_user, enable_private_favorites: true
+ end
end
end
diff --git a/test/unit/favorite_test.rb b/test/unit/favorite_test.rb
index 9c0bed69b..8273dc8af 100644
--- a/test/unit/favorite_test.rb
+++ b/test/unit/favorite_test.rb
@@ -11,10 +11,13 @@ class FavoriteTest < ActiveSupport::TestCase
context "Favorites: " do
context "removing a favorite" do
should "update the post and user favorite counts" do
+ @user1 = create(:restricted_user)
fav = Favorite.create!(post: @p1, user: @user1)
assert_equal(1, @user1.reload.favorite_count)
assert_equal(1, @p1.reload.fav_count)
+ assert_equal(0, @p1.reload.score)
+ refute(PostVote.positive.exists?(post: @p1, user: @user))
Favorite.destroy_by(post: @p1, user: @user1)
@@ -42,14 +45,8 @@ class FavoriteTest < ActiveSupport::TestCase
end
context "adding a favorite" do
- should "update the post and user favorite counts" do
- Favorite.create!(post: @p1, user: @user1)
-
- assert_equal(1, @user1.reload.favorite_count)
- assert_equal(1, @p1.reload.fav_count)
- end
-
should "not upvote the post if the user can't vote" do
+ @user1 = create(:restricted_user)
Favorite.create!(post: @p1, user: @user1)
assert_equal(1, @user1.reload.favorite_count)
@@ -89,7 +86,7 @@ class FavoriteTest < ActiveSupport::TestCase
assert_equal(["You have already favorited this post"], @f2.errors.full_messages)
assert_equal(1, @user1.reload.favorite_count)
assert_equal(1, @p1.reload.fav_count)
- assert_equal(0, @p1.reload.score)
+ assert_equal(1, @p1.reload.score)
end
end
end
diff --git a/test/unit/post_query_builder_test.rb b/test/unit/post_query_builder_test.rb
index 94958fda6..a0706f543 100644
--- a/test/unit/post_query_builder_test.rb
+++ b/test/unit/post_query_builder_test.rb
@@ -390,7 +390,7 @@ class PostQueryBuilderTest < ActiveSupport::TestCase
favgroup1 = create(:favorite_group, creator: CurrentUser.user, post_ids: [post1.id])
favgroup2 = create(:favorite_group, creator: CurrentUser.user, post_ids: [post2.id])
- favgroup3 = create(:favorite_group, creator: create(:user), post_ids: [post3.id], is_public: false)
+ favgroup3 = create(:private_favorite_group, post_ids: [post3.id])
assert_tag_match([post1], "favgroup:#{favgroup1.id}")
assert_tag_match([post2], "favgroup:#{favgroup2.name}")
@@ -421,7 +421,7 @@ class PostQueryBuilderTest < ActiveSupport::TestCase
post3 = create(:post)
favgroup1 = create(:favorite_group, creator: CurrentUser.user, post_ids: [post1.id, post2.id])
- favgroup2 = create(:favorite_group, creator: create(:user), post_ids: [post2.id, post3.id], is_public: false)
+ favgroup2 = create(:private_favorite_group, post_ids: [post2.id, post3.id])
assert_tag_match([post1, post2], "ordfavgroup:#{favgroup1.id}")
assert_tag_match([post1, post2], "ordfavgroup:#{favgroup1.name}")
@@ -975,7 +975,7 @@ class PostQueryBuilderTest < ActiveSupport::TestCase
context "for the upvote: metatag" do
setup do
- @user = create(:user)
+ @user = create(:gold_user)
@upvote = create(:post_vote, user: @user, score: 1)
@downvote = create(:post_vote, user: @user, score: -1)
end
@@ -1411,8 +1411,7 @@ class PostQueryBuilderTest < ActiveSupport::TestCase
end
should "return the correct favorite count for a fav: search for a user with private favorites" do
- fav = create(:favorite)
- fav.user.update!(favorite_count: 1, enable_private_favorites: true)
+ fav = create(:private_favorite)
assert_fast_count(0, "fav:#{fav.user.name}")
assert_fast_count(0, "ordfav:#{fav.user.name}")
diff --git a/test/unit/post_test.rb b/test/unit/post_test.rb
index a4f0a6f53..2721c52a9 100644
--- a/test/unit/post_test.rb
+++ b/test/unit/post_test.rb
@@ -699,10 +699,34 @@ class PostTest < ActiveSupport::TestCase
context "for a fav" do
should "add/remove the current user to the post's favorite listing" do
@post.update(tag_string: "aaa fav:self")
+ assert_equal(1, @post.reload.score)
assert_equal(1, @post.favorites.where(user: @user).count)
+ assert_equal(1, @post.votes.positive.where(user: @user).count)
@post.update(tag_string: "aaa -fav:self")
+ assert_equal(0, @post.reload.score)
assert_equal(0, @post.favorites.count)
+ assert_equal(0, @post.votes.positive.where(user: @user).count)
+ end
+
+ should "not allow banned users to fav" do
+ assert_raises(User::PrivilegeError) do
+ as(create(:banned_user)) { @post.update(tag_string: "aaa fav:self") }
+ end
+
+ assert_raises(User::PrivilegeError) do
+ as(create(:banned_user)) { @post.update(tag_string: "aaa -fav:self") }
+ end
+ end
+
+ should "not allow restricted users to fav" do
+ assert_raises(User::PrivilegeError) do
+ as(create(:restricted_user)) { @post.update(tag_string: "aaa fav:self") }
+ end
+
+ assert_raises(User::PrivilegeError) do
+ as(create(:restricted_user)) { @post.update(tag_string: "aaa -fav:self") }
+ end
end
should "not fail when the fav: metatag is used twice" do
@@ -870,20 +894,20 @@ class PostTest < ActiveSupport::TestCase
context "upvote:self or downvote:self" do
context "by a member" do
- should "not upvote the post" do
- assert_no_difference("PostVote.count") do
+ should "upvote the post" do
+ assert_difference("PostVote.count") do
@post.update(tag_string: "upvote:self")
end
- assert_equal(0, @post.reload.score)
+ assert_equal(1, @post.reload.score)
end
- should "not downvote the post" do
- assert_no_difference("PostVote.count") do
+ should "downvote the post" do
+ assert_difference("PostVote.count") do
@post.update(tag_string: "downvote:self")
end
- assert_equal(0, @post.reload.score)
+ assert_equal(-1, @post.reload.score)
end
end
@@ -1476,7 +1500,8 @@ class PostTest < ActiveSupport::TestCase
should "create a vote for each user who can vote" do
assert(@parent.votes.where(user: @gold1).exists?)
- assert_equal(1, @parent.score)
+ assert(@parent.votes.where(user: @user1).exists?)
+ assert_equal(2, @parent.score)
end
end
end
@@ -1523,13 +1548,13 @@ class PostTest < ActiveSupport::TestCase
end
context "Voting:" do
- should "not allow members to vote" do
+ should "allow members to vote" do
user = create(:user)
post = create(:post)
assert_nothing_raised { post.vote!(1, user) }
- assert_equal(0, post.votes.count)
- assert_equal(0, post.reload.score)
+ assert_equal(1, post.votes.count)
+ assert_equal(1, post.reload.score)
end
should "not allow duplicate votes" do