]> git.openstreetmap.org Git - rails.git/commitdiff
Show blocked api response when commenting notes
authorAnton Khorev <tony29@yandex.ru>
Sun, 7 Jan 2024 16:07:14 +0000 (19:07 +0300)
committerAnton Khorev <tony29@yandex.ru>
Tue, 16 Jan 2024 23:15:14 +0000 (02:15 +0300)
app/assets/javascripts/index/note.js
app/views/notes/show.html.erb
test/system/note_comments_test.rb

index e7790c904b111804f7332b46cc7a81bffcee654e..0c0be716b4bba5e5c46d1ef0537e9fd422a55eef 100644 (file)
@@ -52,20 +52,18 @@ OSM.Note = function (map) {
           OSM.loadSidebarContent(path, function () {
             initialize(path, id, moveToNote);
           });
+        },
+        error: function (xhr) {
+          $(form).find("#comment-error")
+            .text(xhr.responseText)
+            .prop("hidden", false);
+          updateButtons(form);
         }
       });
     });
 
     content.find("textarea").on("input", function (e) {
-      var form = e.target.form;
-
-      if ($(e.target).val() === "") {
-        $(form.close).val($(form.close).data("defaultActionText"));
-        $(form.comment).prop("disabled", true);
-      } else {
-        $(form.close).val($(form.close).data("commentActionText"));
-        $(form.comment).prop("disabled", false);
-      }
+      updateButtons(e.target.form);
     });
 
     content.find("textarea").val("").trigger("input");
@@ -84,6 +82,17 @@ OSM.Note = function (map) {
     if (callback) callback();
   }
 
+  function updateButtons(form) {
+    $(form.close).prop("disabled", false);
+    if ($(form.text).val() === "") {
+      $(form.close).val($(form.close).data("defaultActionText"));
+      $(form.comment).prop("disabled", true);
+    } else {
+      $(form.close).val($(form.close).data("commentActionText"));
+      $(form.comment).prop("disabled", false);
+    }
+  }
+
   function moveToNote() {
     var data = $(".details").data();
     if (!data) return;
index d355d3e5f29ab07b80431251309d828fcbc14a23..3a1224676e47b7e5afb0c8deba255b48a32a65a1 100644 (file)
@@ -49,6 +49,8 @@
         <div class="mb-3">
           <textarea class="form-control" name="text" cols="40" rows="5" maxlength="2000"></textarea>
         </div>
+        <div id="comment-error" class="alert alert-danger p-2 mb-3" hidden>
+        </div>
         <div class="btn-wrapper">
           <% if current_user.moderator? -%>
             <%= submit_tag t(".hide"), :name => "hide", :class => "btn btn-light",
index ea19dcd9497fc3f6d17bb206693580114db685d2..a629dfce3ca9f0e7f2ea09ef19c133880c917860 100644 (file)
@@ -45,4 +45,62 @@ class NoteCommentsTest < ApplicationSystemTestCase
       assert_content "Some newly added note comment"
     end
   end
+
+  test "can't add a comment when blocked" do
+    note = create(:note_with_comments)
+    user = create(:user)
+    sign_in_as(user)
+    visit note_path(note)
+    block = create(:user_block, :user => user)
+
+    within_sidebar do
+      fill_in "text", :with => "Comment that won't be added while blocked"
+
+      assert_no_text "Comment from #{user.display_name}"
+      assert_no_text "Comment that won't be added while blocked"
+      assert_no_text "Your access to the API has been blocked"
+      assert_button "Comment & Resolve", :disabled => false
+      assert_button "Comment", :disabled => false
+
+      click_on "Comment"
+
+      assert_no_text "Comment from #{user.display_name}"
+      assert_no_text "Comment that won't be added while blocked"
+      assert_text "Your access to the API has been blocked"
+      assert_button "Comment & Resolve", :disabled => false
+      assert_button "Comment", :disabled => false
+
+      block.revoke! block.creator
+
+      click_on "Comment"
+
+      assert_text "Comment from #{user.display_name}"
+      assert_text "Comment that won't be added while blocked"
+      assert_no_text "Your access to the API has been blocked"
+    end
+  end
+
+  test "can't resolve a note when blocked" do
+    note = create(:note_with_comments)
+    user = create(:user)
+    sign_in_as(user)
+    visit note_path(note)
+    create(:user_block, :user => user)
+
+    within_sidebar do
+      assert_text "Unresolved note"
+      assert_no_text "Resolved note"
+      assert_no_text "Your access to the API has been blocked"
+      assert_button "Resolve", :disabled => false
+      assert_button "Comment", :disabled => true
+
+      click_on "Resolve"
+
+      assert_text "Unresolved note"
+      assert_no_text "Resolved note"
+      assert_text "Your access to the API has been blocked"
+      assert_button "Resolve", :disabled => false
+      assert_button "Comment", :disabled => true
+    end
+  end
 end