]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/5086'
authorTom Hughes <tom@compton.nu>
Fri, 16 Aug 2024 16:22:59 +0000 (17:22 +0100)
committerTom Hughes <tom@compton.nu>
Fri, 16 Aug 2024 16:22:59 +0000 (17:22 +0100)
app/assets/stylesheets/common.scss
app/views/user_blocks/_block.html.erb
app/views/user_blocks/edit.html.erb
test/system/user_blocks_test.rb

index 321b0bcb9af1dd17fa091ca51e1f8dbf397991b7..d551462b2202ec34defa80b70c13be334e08553f 100644 (file)
@@ -904,6 +904,12 @@ div.secondary-actions {
   }
 }
 
+/* Rules for block pages */
+
+#block_list .username {
+  max-width: 20em;
+}
+
 /* Rules for tabs inside secondary background sections */
 
 .bg-body-secondary .nav-tabs {
index a18d1dbdbabe51a753515e138fad795483d2b422..5444bdd5b8c66c21d61c6c8e307e53faca7fb75f 100644 (file)
@@ -1,9 +1,9 @@
 <tr>
   <% if show_user_name %>
-  <td><%= link_to block.user.display_name, block.user %></td>
+  <td><%= link_to block.user.display_name, block.user, :class => "username d-inline-block text-truncate text-wrap" %></td>
   <% end %>
   <% if show_creator_name %>
-  <td><%= link_to block.creator.display_name, block.creator %></td>
+  <td><%= link_to block.creator.display_name, block.creator, :class => "username d-inline-block text-truncate text-wrap" %></td>
   <% end %>
   <td><%= h truncate(block.reason) %></td>
   <td><%= h block_status(block) %></td>
index 12b875f2f4c085286985fe65fcaa9c21bbc9a32f..2d8956ffca730f29c1498074e05110c3a681ca48 100644 (file)
@@ -9,16 +9,25 @@
 <%= bootstrap_form_for(@user_block) do |f| %>
   <%= f.richtext_field :reason, :cols => 80, :rows => 20, :format => @user_block.reason_format %>
 
-  <%= f.form_group do %>
-    <%= label_tag "user_block_period", t(".period"), :class => "form-label" %>
-    <%= select_tag("user_block_period",
-                   options_for_select(UserBlock::PERIODS.collect { |h| [block_duration_in_words(h.hours), h.to_s] },
-                                      UserBlock::PERIODS.min_by { |h| (params[:user_block_period].to_i - h).abs }),
-                   :class => "form-select") %>
-  <% end %>
+  <% if @user_block.active? %>
+    <%= f.form_group do %>
+      <%= label_tag "user_block_period", t(".period"), :class => "form-label" %>
+      <%= select_tag "user_block_period",
+                     options_for_select(UserBlock::PERIODS.collect { |h| [block_duration_in_words(h.hours), h.to_s] },
+                                        UserBlock::PERIODS.min_by { |h| (params[:user_block_period].to_i - h).abs }),
+                     :class => "form-select" %>
+    <% end %>
+
+    <%= f.form_group :needs_view do %>
+      <%= f.check_box :needs_view %>
+    <% end %>
+  <% else %>
+    <div class="alert alert-info">
+      <%= t "user_blocks.update.inactive_block_cannot_be_reactivated" %>
+    </div>
 
-  <%= f.form_group :needs_view do %>
-    <%= f.check_box :needs_view %>
+    <%= hidden_field_tag "user_block_period", 0 %>
+    <%= f.hidden_field :needs_view %>
   <% end %>
 
   <%= f.primary %>
index 6e4f5b471141548a50d7094c088843c022352b62..89f98d759afcc89c85132fdee6c23c7cc0d8949b 100644 (file)
@@ -68,4 +68,34 @@ class UserBlocksSystemTest < ApplicationSystemTestCase
     assert_unchecked_field "Are you sure you wish to revoke 2 active blocks?"
     assert_button "Revoke!"
   end
+
+  test "duration controls are present for active blocks" do
+    creator_user = create(:moderator_user)
+    block = create(:user_block, :creator => creator_user, :reason => "Testing editing active blocks", :ends_at => Time.now.utc + 2.days)
+    sign_in_as(creator_user)
+
+    visit edit_user_block_path(block)
+    assert_field "Reason", :with => "Testing editing active blocks"
+    assert_select "user_block_period", :selected => "2 days"
+    assert_unchecked_field "Needs view"
+
+    fill_in "Reason", :with => "Editing active blocks works"
+    click_on "Update block"
+    assert_text(/Reason for block:\s+Editing active blocks works/)
+  end
+
+  test "duration controls are removed for inactive blocks" do
+    creator_user = create(:moderator_user)
+    block = create(:user_block, :expired, :creator => creator_user, :reason => "Testing editing expired blocks")
+    sign_in_as(creator_user)
+
+    visit edit_user_block_path(block)
+    assert_field "Reason", :with => "Testing editing expired blocks"
+    assert_no_select "user_block_period"
+    assert_no_field "Needs view"
+
+    fill_in "Reason", :with => "Editing expired blocks works"
+    click_on "Update block"
+    assert_text(/Reason for block:\s+Editing expired blocks works/)
+  end
 end