about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2018-08-28 05:39:43 +0200
committerGitHub <noreply@github.com>2018-08-28 05:39:43 +0200
commit5e1767173f82672c77e4d1ce5d9f252750e5f96d (patch)
tree4699f8e757aa530206ee935e3ebb5cf36aba19db
parent2bbec9f4dab1441391983ce920b6a0094f0e0348 (diff)
Display pending message on admin relays UI (#8494)
* Add missing specs for relay accept/reject

* Display pending message on admin relays UI
-rw-r--r--app/views/admin/relays/_relay.html.haml10
-rw-r--r--config/locales/en.yml1
-rw-r--r--spec/fabricators/relay_fabricator.rb2
-rw-r--r--spec/lib/activitypub/activity/accept_spec.rb26
-rw-r--r--spec/lib/activitypub/activity/reject_spec.rb26
5 files changed, 61 insertions, 4 deletions
diff --git a/app/views/admin/relays/_relay.html.haml b/app/views/admin/relays/_relay.html.haml
index d974c80a6..667821894 100644
--- a/app/views/admin/relays/_relay.html.haml
+++ b/app/views/admin/relays/_relay.html.haml
@@ -2,20 +2,24 @@
   %td
     %samp= relay.inbox_url
   %td
-    - if relay.enabled?
+    - if relay.accepted?
       %span.positive-hint
         = fa_icon('check')
         = ' '
         = t 'admin.relays.enabled'
+    - elsif relay.pending?
+      = fa_icon('hourglass')
+      = ' '
+      = t 'admin.relays.pending'
     - else
       %span.negative-hint
         = fa_icon('times')
         = ' '
         = t 'admin.relays.disabled'
   %td
-    - if relay.enabled?
+    - if relay.accepted?
       = table_link_to 'power-off', t('admin.relays.disable'), disable_admin_relay_path(relay), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }
-    - else
+    - elsif !relay.pending?
       = table_link_to 'power-off', t('admin.relays.enable'), enable_admin_relay_path(relay), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }
 
     = table_link_to 'times', t('admin.relays.delete'), admin_relay_path(relay), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') }
diff --git a/config/locales/en.yml b/config/locales/en.yml
index aa7efff84..4f893716b 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -303,6 +303,7 @@ en:
       description_html: A <strong>federation relay</strong> is an intermediary server that exchanges large volumes of public toots between servers that subscribe and publish to it. <strong>It can help small and medium servers discover content from the fediverse</strong>, which would otherwise require local users manually following other people on remote servers.
       enable_hint: Once enabled, your server will subscribe to all public toots from this relay, and will begin sending this server's public toots to it.
       inbox_url: Relay URL
+      pending: Waiting for relay's approval
       setup: Setup a relay connection
       status: Status
       title: Relays
diff --git a/spec/fabricators/relay_fabricator.rb b/spec/fabricators/relay_fabricator.rb
index 2c9df4ad3..3f8726f6b 100644
--- a/spec/fabricators/relay_fabricator.rb
+++ b/spec/fabricators/relay_fabricator.rb
@@ -1,4 +1,4 @@
 Fabricator(:relay) do
   inbox_url "https://example.com/inbox"
-  enabled   true
+  state   :idle
 end
diff --git a/spec/lib/activitypub/activity/accept_spec.rb b/spec/lib/activitypub/activity/accept_spec.rb
index 6503c83e3..883bab6ac 100644
--- a/spec/lib/activitypub/activity/accept_spec.rb
+++ b/spec/lib/activitypub/activity/accept_spec.rb
@@ -35,4 +35,30 @@ RSpec.describe ActivityPub::Activity::Accept do
       expect(recipient.requested?(sender)).to be false
     end
   end
+
+  context 'given a relay' do
+    let!(:relay) { Fabricate(:relay, state: :pending, follow_activity_id: 'https://abc-123/456') }
+
+    let(:json) do
+      {
+        '@context': 'https://www.w3.org/ns/activitystreams',
+        id: 'foo',
+        type: 'Accept',
+        actor: ActivityPub::TagManager.instance.uri_for(sender),
+        object: {
+          id: 'https://abc-123/456',
+          type: 'Follow',
+          actor: ActivityPub::TagManager.instance.uri_for(recipient),
+          object: ActivityPub::TagManager.instance.uri_for(sender),
+        },
+      }.with_indifferent_access
+    end
+
+    subject { described_class.new(json, sender) }
+
+    it 'marks the relay as accepted' do
+      subject.perform
+      expect(relay.reload.accepted?).to be true
+    end
+  end
 end
diff --git a/spec/lib/activitypub/activity/reject_spec.rb b/spec/lib/activitypub/activity/reject_spec.rb
index 7fd95bcc6..e7205df8d 100644
--- a/spec/lib/activitypub/activity/reject_spec.rb
+++ b/spec/lib/activitypub/activity/reject_spec.rb
@@ -35,4 +35,30 @@ RSpec.describe ActivityPub::Activity::Reject do
       expect(recipient.requested?(sender)).to be false
     end
   end
+
+  context 'given a relay' do
+    let!(:relay) { Fabricate(:relay, state: :pending, follow_activity_id: 'https://abc-123/456') }
+
+    let(:json) do
+      {
+        '@context': 'https://www.w3.org/ns/activitystreams',
+        id: 'foo',
+        type: 'Reject',
+        actor: ActivityPub::TagManager.instance.uri_for(sender),
+        object: {
+          id: 'https://abc-123/456',
+          type: 'Follow',
+          actor: ActivityPub::TagManager.instance.uri_for(recipient),
+          object: ActivityPub::TagManager.instance.uri_for(sender),
+        },
+      }.with_indifferent_access
+    end
+
+    subject { described_class.new(json, sender) }
+
+    it 'marks the relay as rejected' do
+      subject.perform
+      expect(relay.reload.rejected?).to be true
+    end
+  end
 end