Don't allow users to request aliases, implications, or renames for invalid tag names. As a side effect, it's no longer possible to request shortcut aliases like `/hr -> hakurei_reimu` (slash abbreviations still exist, but they can't be overridden with aliases). Tests involving these types of aliases are removed.
200 lines
8.2 KiB
Ruby
200 lines
8.2 KiB
Ruby
require 'test_helper'
|
|
|
|
class BulkUpdateRequestsControllerTest < ActionDispatch::IntegrationTest
|
|
context "BulkUpdateRequestsController" do
|
|
setup do
|
|
@user = create(:user, id: 999)
|
|
@builder = create(:builder_user)
|
|
@admin = create(:admin_user)
|
|
as(@admin) { @forum_topic = create(:forum_topic, id: 100, category_id: 0) }
|
|
as(@user) { @bulk_update_request = create(:bulk_update_request, user: @user, forum_topic: @forum_topic, script: "create alias aaa -> bbb") }
|
|
end
|
|
|
|
context "#new" do
|
|
should "render" do
|
|
get_auth new_bulk_update_request_path, @user
|
|
assert_response :success
|
|
end
|
|
end
|
|
|
|
context "#edit" do
|
|
should "render" do
|
|
get_auth edit_bulk_update_request_path(@bulk_update_request), @user
|
|
assert_response :success
|
|
end
|
|
end
|
|
|
|
context "#create" do
|
|
should "succeed" do
|
|
assert_difference("BulkUpdateRequest.count", 1) do
|
|
post_auth bulk_update_requests_path, @user, params: { bulk_update_request: attributes_for(:bulk_update_request) }
|
|
assert_response :redirect
|
|
end
|
|
end
|
|
|
|
should "fail for an invalid script" do
|
|
assert_difference("BulkUpdateRequest.count", 0) do
|
|
post_auth bulk_update_requests_path, @user, params: { bulk_update_request: attributes_for(:bulk_update_request).merge(script: "create alis gray -> grey") }
|
|
assert_response :success
|
|
end
|
|
end
|
|
|
|
should "fail for a blank reason" do
|
|
assert_difference("BulkUpdateRequest.count", 0) do
|
|
post_auth bulk_update_requests_path, @user, params: { bulk_update_request: attributes_for(:bulk_update_request).merge(reason: "") }
|
|
assert_response :success
|
|
end
|
|
end
|
|
end
|
|
|
|
context "#update" do
|
|
should "allow admins to update other people's requests" do
|
|
put_auth bulk_update_request_path(@bulk_update_request.id), create(:admin_user), params: {bulk_update_request: {script: "create alias zzz -> 222" }}
|
|
assert_response :redirect
|
|
assert_equal("create alias zzz -> 222", @bulk_update_request.reload.script)
|
|
end
|
|
|
|
should "not allow builders to update other people's requests" do
|
|
put_auth bulk_update_request_path(@bulk_update_request.id), create(:builder_user), params: {bulk_update_request: {script: "create alias zzz -> 222" }}
|
|
assert_response 403
|
|
assert_equal("create alias aaa -> bbb", @bulk_update_request.reload.script)
|
|
end
|
|
|
|
should "not allow members to update other people's requests" do
|
|
put_auth bulk_update_request_path(@bulk_update_request.id), create(:user), params: {bulk_update_request: {script: "create alias zzz -> 222" }}
|
|
assert_response 403
|
|
assert_equal("create alias aaa -> bbb", @bulk_update_request.reload.script)
|
|
end
|
|
|
|
should "fail for an invalid script" do
|
|
put_auth bulk_update_request_path(@bulk_update_request.id), @user, params: { bulk_update_request: { script: "create alis gray -> grey" }}
|
|
assert_response :success
|
|
assert_equal("create alias aaa -> bbb", @bulk_update_request.reload.script)
|
|
end
|
|
end
|
|
|
|
context "#index" do
|
|
setup do
|
|
@other_BUR = create(:bulk_update_request, user: @builder, script: "create alias cirno -> 9")
|
|
@rejected_BUR = create(:bulk_update_request, status: "rejected")
|
|
@approved_BUR = create(:bulk_update_request, status: "approved", approver: @admin)
|
|
end
|
|
|
|
should "render" do
|
|
get bulk_update_requests_path
|
|
assert_response :success
|
|
end
|
|
|
|
should respond_to_search({}).with { [@approved_BUR, @rejected_BUR, @other_BUR, @bulk_update_request] }
|
|
should respond_to_search(order: "id_desc").with { [@approved_BUR, @rejected_BUR, @other_BUR, @bulk_update_request] }
|
|
should respond_to_search(status: "pending").with { [@other_BUR, @bulk_update_request] }
|
|
should respond_to_search(script_matches: "cirno -> 9").with { @other_BUR }
|
|
should respond_to_search(tags_include_any: "cirno").with { @other_BUR }
|
|
|
|
context "using includes" do
|
|
should respond_to_search(forum_topic_id: 100).with { @bulk_update_request }
|
|
should respond_to_search(forum_topic: {category_id: 0}).with { @bulk_update_request }
|
|
should respond_to_search(user_id: 999).with { @bulk_update_request }
|
|
should respond_to_search(user: {level: User::Levels::BUILDER}).with { @other_BUR }
|
|
should respond_to_search(has_approver: "true").with { @approved_BUR }
|
|
should respond_to_search(has_approver: "false").with { [@rejected_BUR, @other_BUR, @bulk_update_request] }
|
|
end
|
|
end
|
|
|
|
context "#show" do
|
|
should "render" do
|
|
get bulk_update_request_path(@bulk_update_request)
|
|
assert_response :success
|
|
end
|
|
end
|
|
|
|
context "#destroy" do
|
|
context "for the creator" do
|
|
should "succeed" do
|
|
delete_auth bulk_update_request_path(@bulk_update_request), @user
|
|
assert_response :redirect
|
|
assert_equal("rejected", @bulk_update_request.reload.status)
|
|
end
|
|
end
|
|
|
|
context "for another Builder" do
|
|
should "fail" do
|
|
assert_difference("BulkUpdateRequest.count", 0) do
|
|
delete_auth bulk_update_request_path(@bulk_update_request), create(:builder_user)
|
|
assert_response 403
|
|
end
|
|
end
|
|
end
|
|
|
|
context "for an admin" do
|
|
should "succeed" do
|
|
delete_auth bulk_update_request_path(@bulk_update_request), @admin
|
|
assert_response :redirect
|
|
assert_equal("rejected", @bulk_update_request.reload.status)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "#approve" do
|
|
context "for a member" do
|
|
should "fail" do
|
|
post_auth approve_bulk_update_request_path(@bulk_update_request), @user
|
|
assert_response 403
|
|
assert_equal("pending", @bulk_update_request.reload.status)
|
|
end
|
|
end
|
|
|
|
context "for a builder" do
|
|
should "fail when moving a non-artist tag" do
|
|
create(:tag, name: "foo", post_count: 0)
|
|
@bulk_update_request = create(:bulk_update_request, script: "alias foo -> bar")
|
|
|
|
post_auth approve_bulk_update_request_path(@bulk_update_request), @builder
|
|
|
|
assert_response 403
|
|
assert_equal("pending", @bulk_update_request.reload.status)
|
|
assert_equal(false, TagAlias.exists?(antecedent_name: "foo", consequent_name: "bar"))
|
|
end
|
|
|
|
should "fail for a large artist move" do
|
|
create(:tag, name: "artist1", category: Tag.categories.artist, post_count: 1000)
|
|
@bulk_update_request = create(:bulk_update_request, script: "create alias artist1 -> artist2")
|
|
|
|
post_auth approve_bulk_update_request_path(@bulk_update_request), @builder
|
|
|
|
assert_response 403
|
|
assert_equal("pending", @bulk_update_request.reload.status)
|
|
assert_equal(false, TagAlias.where(antecedent_name: "artist1", consequent_name: "artist2").exists?)
|
|
end
|
|
|
|
should "succeed for a small artist move" do
|
|
create(:tag, name: "artist1a", category: Tag.categories.artist, post_count: 10)
|
|
create(:tag, name: "artist1b", category: Tag.categories.general, post_count: 0)
|
|
create(:tag, name: "artist2a", category: Tag.categories.artist, post_count: 20)
|
|
@bulk_update_request = create(:bulk_update_request, script: "rename artist1a -> artist1b\ncreate alias artist2a -> artist2b")
|
|
|
|
perform_enqueued_jobs do
|
|
post_auth approve_bulk_update_request_path(@bulk_update_request), @builder
|
|
end
|
|
|
|
assert_redirected_to(bulk_update_requests_path)
|
|
assert_equal("approved", @bulk_update_request.reload.status)
|
|
assert_equal(@builder, @bulk_update_request.approver)
|
|
assert_equal(true, TagAlias.exists?(antecedent_name: "artist2a", consequent_name: "artist2b", status: "active"))
|
|
end
|
|
end
|
|
|
|
context "for an admin" do
|
|
should "succeed" do
|
|
post_auth approve_bulk_update_request_path(@bulk_update_request), @admin
|
|
|
|
assert_response :redirect
|
|
assert_equal("processing", @bulk_update_request.reload.status)
|
|
perform_enqueued_jobs
|
|
assert_equal("approved", @bulk_update_request.reload.status)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|