]> git.openstreetmap.org Git - rails.git/commitdiff
Add controls to revoke all blocks page
authorAnton Khorev <tony29@yandex.ru>
Wed, 27 Dec 2023 16:19:37 +0000 (19:19 +0300)
committerAnton Khorev <tony29@yandex.ru>
Sun, 7 Jan 2024 12:15:28 +0000 (15:15 +0300)
app/views/user_blocks/revoke_all.html.erb
config/locales/en.yml
test/system/user_blocks_test.rb

index 982792dddc6aa506a12b1b3a23097ee6bcbf8fc0..7fef69b57fabddf64f3bf19f92529a7f0bf93532 100644 (file)
@@ -6,3 +6,22 @@
             :block_on => link_to(@user.display_name,
                                  user_path(@user)) %></h1>
 <% end %>
+
+<% unless @user.blocks.active.empty? %>
+
+  <%= bootstrap_form_for :revoke_all, :url => { :action => "revoke_all" } do |f| %>
+    <div class="mb-3">
+      <div class="form-check">
+        <%= check_box_tag "confirm", "yes", false, { :class => "form-check-input" } %>
+        <%= label_tag "confirm", t(".confirm",
+                                   :active_blocks => t(".active_blocks",
+                                                       :count => @user.blocks.active.count)), { :class => "form-check-label" } %>
+      </div>
+    </div>
+
+    <%= f.primary t(".revoke") %>
+  <% end %>
+
+<% else %>
+<p><%= t ".empty", :name => @user.display_name %></p>
+<% end %>
index 449b6e54041e63ead7aa31b12bb529593aeaa189..ff1ee898498cdb863645ec75ad467e027a171899 100644 (file)
@@ -2896,6 +2896,12 @@ en:
     revoke_all:
       title: "Revoking all blocks on %{block_on}"
       heading_html: "Revoking all blocks on %{block_on}"
+      empty: "%{name} has no active blocks."
+      confirm: "Are you sure you wish to revoke %{active_blocks}?"
+      active_blocks:
+        one: "%{count} active block"
+        other: "%{count} active blocks"
+      revoke: "Revoke!"
     helper:
       time_future_html: "Ends in %{time}."
       until_login: "Active until the user logs in."
index 66a8befec2d0b9437b218bb4afc761e1f921aef8..957ecb662a84ee78486c8b4d8fbca95611374ecc 100644 (file)
@@ -27,7 +27,17 @@ class ReportNoteTest < ApplicationSystemTestCase
     assert_no_link "Revoke all blocks"
   end
 
-  test "revoke all link is present and working for moderators when viewed user has active blocks" do
+  test "revoke all page has no controls when viewed user has no active blocks" do
+    blocked_user = create(:user)
+    sign_in_as(create(:moderator_user))
+
+    visit revoke_all_user_blocks_path(blocked_user)
+    assert_title "Revoking all blocks on #{blocked_user.display_name}"
+    assert_text "Revoking all blocks on #{blocked_user.display_name}"
+    assert_no_button "Revoke!"
+  end
+
+  test "revoke all link is present and working for moderators when viewed user has one active block" do
     blocked_user = create(:user)
     create(:user_block, :user => blocked_user)
     sign_in_as(create(:moderator_user))
@@ -38,5 +48,24 @@ class ReportNoteTest < ApplicationSystemTestCase
     click_link "Revoke all blocks"
     assert_title "Revoking all blocks on #{blocked_user.display_name}"
     assert_text "Revoking all blocks on #{blocked_user.display_name}"
+    assert_unchecked_field "Are you sure you wish to revoke 1 active block?"
+    assert_button "Revoke!"
+  end
+
+  test "revoke all link is present and working for moderators when viewed user has multiple active blocks" do
+    blocked_user = create(:user)
+    create(:user_block, :user => blocked_user)
+    create(:user_block, :user => blocked_user)
+    create(:user_block, :expired, :user => blocked_user)
+    sign_in_as(create(:moderator_user))
+
+    visit user_path(blocked_user)
+    assert_link "Revoke all blocks"
+
+    click_link "Revoke all blocks"
+    assert_title "Revoking all blocks on #{blocked_user.display_name}"
+    assert_text "Revoking all blocks on #{blocked_user.display_name}"
+    assert_unchecked_field "Are you sure you wish to revoke 2 active blocks?"
+    assert_button "Revoke!"
   end
 end