]> git.openstreetmap.org Git - rails.git/commitdiff
Show api error message if failed to (un)subscribe
authorAnton Khorev <tony29@yandex.ru>
Mon, 8 Jan 2024 14:44:05 +0000 (17:44 +0300)
committerAnton Khorev <tony29@yandex.ru>
Sun, 11 Feb 2024 22:27:12 +0000 (01:27 +0300)
app/assets/javascripts/index/changeset.js
app/views/browse/changeset.html.erb
test/system/changeset_comments_test.rb

index 23d24d14168ff00a2c42fb16bc8a5201557e0e59..40f6aa05b2dbbe8ac60e5a0bcbcc09773576d58a 100644 (file)
@@ -26,14 +26,14 @@ OSM.Changeset = function (map) {
     });
   }
 
-  function updateChangeset(form, method, url, include_data) {
+  function updateChangeset(method, url, include_data) {
     var data;
 
-    $(form).find("#comment-error").prop("hidden", true);
-    $(form).find("button").prop("disabled", true);
+    content.find("#comment-error").prop("hidden", true);
+    content.find("button[data-method][data-url]").prop("disabled", true);
 
     if (include_data) {
-      data = { text: $(form.text).val() };
+      data = { text: content.find("textarea").val() };
     } else {
       data = {};
     }
@@ -47,19 +47,19 @@ OSM.Changeset = function (map) {
         OSM.loadSidebarContent(window.location.pathname, page.load);
       },
       error: function (xhr) {
-        $(form).find("#comment-error").text(xhr.responseText);
-        $(form).find("#comment-error").prop("hidden", false);
-        $(form).find("button").prop("disabled", false);
+        content.find("#comment-error").text(xhr.responseText);
+        content.find("#comment-error").prop("hidden", false);
+        content.find("button[data-method][data-url]").prop("disabled", false);
       }
     });
   }
 
   function initialize() {
-    content.find("button").on("click", function (e) {
+    content.find("button[data-method][data-url]").on("click", function (e) {
       e.preventDefault();
       var data = $(e.target).data();
       var include_data = e.target.name === "comment";
-      updateChangeset(e.target.form, data.method, data.url, include_data);
+      updateChangeset(data.method, data.url, include_data);
     });
 
     content.find("textarea").on("input", function (e) {
index 4fe82d12084218effdb21cb366c9ba94a95700f3..88d90d0f79ea252eb82dc8bf6a971c5d6bfb1bd2 100644 (file)
   </div>
 
   <% if @comments.length > 0 %>
-    <form action="#">
-      <ul class="list-unstyled">
-        <% @comments.each do |comment| %>
-          <% next unless comment.visible || current_user&.moderator? %>
-          <li id="c<%= comment.id %>">
-            <small class='text-muted'>
-              <%= t(comment.visible ? ".comment_by_html" : ".hidden_comment_by_html",
-                    :time_ago => friendly_date_ago(comment.created_at),
-                    :user => link_to(comment.author.display_name, user_path(comment.author))) %>
-              <% if current_user&.moderator? %>
-                —
-                <%= tag.button t("javascripts.changesets.show.#{comment.visible ? 'hide' : 'unhide'}_comment"),
-                               :class => "btn btn-sm small btn-link link-secondary p-0 align-baseline",
-                               :data => { :method => "POST",
-                                          :url => comment.visible ? changeset_comment_hide_url(comment) : changeset_comment_unhide_url(comment) } %>
-              <% end %>
-            </small>
-            <div class="mx-2">
-              <%= comment.body.to_html %>
-            </div>
-          </li>
-        <% end %>
-      </ul>
-    </form>
+    <ul class="list-unstyled">
+      <% @comments.each do |comment| %>
+        <% next unless comment.visible || current_user&.moderator? %>
+        <li id="c<%= comment.id %>">
+          <small class='text-muted'>
+            <%= t comment.visible ? ".comment_by_html" : ".hidden_comment_by_html",
+                  :time_ago => friendly_date_ago(comment.created_at),
+                  :user => link_to(comment.author.display_name, user_path(comment.author)) %>
+            <% if current_user&.moderator? %>
+              —
+              <%= tag.button t("javascripts.changesets.show.#{comment.visible ? 'hide' : 'unhide'}_comment"),
+                             :class => "btn btn-sm small btn-link link-secondary p-0 align-baseline",
+                             :data => { :method => "POST",
+                                        :url => comment.visible ? changeset_comment_hide_url(comment) : changeset_comment_unhide_url(comment) } %>
+            <% end %>
+          </small>
+          <div class="mx-2">
+            <%= comment.body.to_html %>
+          </div>
+        </li>
+      <% end %>
+    </ul>
   <% end %>
 
   <% unless current_user %>
index 82fd81286ea4bb4d8c6dcce7c58ae2b949407c7f..b12aab5ee1057a466ac56a1d69103f7716b33fcd 100644 (file)
@@ -122,4 +122,41 @@ class ChangesetCommentsTest < ApplicationSystemTestCase
       assert_text "Wanted comment"
     end
   end
+
+  test "can subscribe" do
+    changeset = create(:changeset, :closed)
+    user = create(:user)
+    sign_in_as(user)
+    visit changeset_path(changeset)
+
+    within_sidebar do
+      assert_button "Subscribe"
+      assert_no_button "Unsubscribe"
+
+      click_on "Subscribe"
+
+      assert_no_button "Subscribe"
+      assert_button "Unsubscribe"
+    end
+  end
+
+  test "can't subscribe when blocked" do
+    changeset = create(:changeset, :closed)
+    user = create(:user)
+    sign_in_as(user)
+    visit changeset_path(changeset)
+    create(:user_block, :user => user)
+
+    within_sidebar do
+      assert_no_text "Your access to the API has been blocked"
+      assert_button "Subscribe"
+      assert_no_button "Unsubscribe"
+
+      click_on "Subscribe"
+
+      assert_text "Your access to the API has been blocked"
+      assert_button "Subscribe"
+      assert_no_button "Unsubscribe"
+    end
+  end
 end