From c73ce7b695aef1bbfe36bf674173d5a9fb988df5 Mon Sep 17 00:00:00 2001
From: Eugen Rochko <eugen@zeonfederated.com>
Date: Sat, 5 May 2018 00:54:24 +0200
Subject: Store home feeds for 7 days instead of 14 (#7354)

* Store home feeds for 7 days instead of 14

Reduces workload for status fan-out to active followers

* Fix test for user model
---
 spec/models/user_spec.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'spec')

diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 760214ded..cc8d88cc8 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -75,7 +75,7 @@ RSpec.describe User, type: :model do
     describe 'inactive' do
       it 'returns a relation of inactive users' do
         specified = Fabricate(:user, current_sign_in_at: 15.days.ago)
-        Fabricate(:user, current_sign_in_at: 13.days.ago)
+        Fabricate(:user, current_sign_in_at: 6.days.ago)
 
         expect(User.inactive).to match_array([specified])
       end
-- 
cgit 


From 661f7e6d9d589315728f26e5cc5b345ee769f4b0 Mon Sep 17 00:00:00 2001
From: Shuhei Kitagawa <shuheiktgw@users.noreply.github.com>
Date: Sat, 5 May 2018 22:53:59 +0900
Subject: Add tests for admin/custom_emojis_controller (#7350)

---
 .../admin/custom_emojis_controller_spec.rb         | 115 +++++++++++++++++++++
 1 file changed, 115 insertions(+)
 create mode 100644 spec/controllers/admin/custom_emojis_controller_spec.rb

(limited to 'spec')

diff --git a/spec/controllers/admin/custom_emojis_controller_spec.rb b/spec/controllers/admin/custom_emojis_controller_spec.rb
new file mode 100644
index 000000000..b7e2894e9
--- /dev/null
+++ b/spec/controllers/admin/custom_emojis_controller_spec.rb
@@ -0,0 +1,115 @@
+require 'rails_helper'
+
+describe Admin::CustomEmojisController do
+  render_views
+
+  let(:user) { Fabricate(:user, admin: true) }
+
+  before do
+    sign_in user, scope: :user
+  end
+
+  describe 'GET #index' do
+    subject { get :index }
+
+    before do
+      Fabricate(:custom_emoji)
+    end
+
+    it 'renders index page' do
+      expect(subject).to have_http_status 200
+      expect(subject).to render_template :index
+    end
+  end
+
+  describe 'GET #new' do
+    subject { get :new }
+
+    it 'renders new page' do
+      expect(subject).to have_http_status 200
+      expect(subject).to render_template :new
+    end
+  end
+
+  describe 'POST #create' do
+    subject { post :create, params: { custom_emoji: params } }
+
+    let(:image) { fixture_file_upload(Rails.root.join('spec', 'fixtures', 'files', 'emojo.png'), 'image/png') }
+
+    context 'when parameter is valid' do
+      let(:params) { { shortcode: 'test', image: image } }
+
+      it 'creates custom emoji' do
+        expect { subject }.to change { CustomEmoji.count }.by(1)
+      end
+    end
+
+    context 'when parameter is invalid' do
+      let(:params) { { shortcode: 't', image: image } }
+
+      it 'renders new' do
+        expect(subject).to render_template :new
+      end
+    end
+  end
+
+  describe 'PUT #update' do
+    let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'test') }
+    let(:image) { fixture_file_upload(Rails.root.join('spec', 'fixtures', 'files', 'emojo.png'), 'image/png') }
+
+    before do
+      put :update, params: { id: custom_emoji.id, custom_emoji: params }
+    end
+
+    context 'when parameter is valid' do
+      let(:params) { { shortcode: 'updated', image: image } }
+
+      it 'succeeds in updating custom emoji' do
+        expect(flash[:notice]).to eq I18n.t('admin.custom_emojis.updated_msg')
+        expect(custom_emoji.reload).to have_attributes(shortcode: 'updated')
+      end
+    end
+
+    context 'when parameter is invalid' do
+      let(:params) { { shortcode: 'u', image: image } }
+
+      it 'fails to update custom emoji' do
+        expect(flash[:alert]).to eq I18n.t('admin.custom_emojis.update_failed_msg')
+        expect(custom_emoji.reload).to have_attributes(shortcode: 'test')
+      end
+    end
+  end
+
+  describe 'POST #copy' do
+    subject { post :copy, params: { id: custom_emoji.id } }
+
+    let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'test') }
+
+    it 'copies custom emoji' do
+      expect { subject }.to change { CustomEmoji.where(shortcode: 'test').count }.by(1)
+      expect(flash[:notice]).to eq I18n.t('admin.custom_emojis.copied_msg')
+    end
+  end
+
+  describe 'POST #enable' do
+    let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'test', disabled: true) }
+
+    before { post :enable, params: { id: custom_emoji.id } }
+
+    it 'enables custom emoji' do
+      expect(response).to redirect_to admin_custom_emojis_path
+      expect(custom_emoji.reload).to have_attributes(disabled: false)
+    end
+  end
+
+  describe 'POST #disable' do
+    let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'test', disabled: false) }
+
+    before { post :disable, params: { id: custom_emoji.id } }
+
+    it 'enables custom emoji' do
+      expect(response).to redirect_to admin_custom_emojis_path
+      expect(custom_emoji.reload).to have_attributes(disabled: true)
+    end
+  end
+end
-- 
cgit 


From c7d1a2e400cd6677057a8af90fff866207576098 Mon Sep 17 00:00:00 2001
From: Eugen Rochko <eugen@zeonfederated.com>
Date: Sat, 5 May 2018 23:06:29 +0200
Subject: Improve admin UI for accounts (#7360)

* Improve design of account statuses admin UI (consistent with reports)

* Make account moderation notes look consistent with report notes

* i18n-tasks remove-unused

* Fix code style issues

* Fix tests
---
 .../admin/reported_statuses_controller.rb          | 19 --------
 app/controllers/admin/statuses_controller.rb       | 35 +++++----------
 app/javascript/styles/mastodon/admin.scss          |  3 +-
 .../_account_moderation_note.html.haml             | 15 +++----
 app/views/admin/accounts/show.html.haml            | 39 +++++++---------
 app/views/admin/reports/_status.html.haml          |  2 +-
 app/views/admin/statuses/index.html.haml           | 52 +++++++++-------------
 config/locales/ar.yml                              |  9 ----
 config/locales/ca.yml                              |  9 ----
 config/locales/de.yml                              |  9 ----
 config/locales/en.yml                              | 11 +----
 config/locales/eo.yml                              |  9 ----
 config/locales/es.yml                              |  9 ----
 config/locales/fa.yml                              |  9 ----
 config/locales/fi.yml                              |  9 ----
 config/locales/fr.yml                              |  9 ----
 config/locales/gl.yml                              |  9 ----
 config/locales/he.yml                              |  6 ---
 config/locales/hu.yml                              |  9 ----
 config/locales/id.yml                              |  1 -
 config/locales/io.yml                              |  1 -
 config/locales/it.yml                              |  9 ----
 config/locales/ja.yml                              |  9 ----
 config/locales/ko.yml                              |  9 ----
 config/locales/nl.yml                              |  9 ----
 config/locales/no.yml                              |  9 ----
 config/locales/oc.yml                              |  9 ----
 config/locales/pl.yml                              |  9 ----
 config/locales/pt-BR.yml                           |  9 ----
 config/locales/pt.yml                              |  9 ----
 config/locales/ru.yml                              |  9 ----
 config/locales/sk.yml                              |  9 ----
 config/locales/sr-Latn.yml                         |  9 ----
 config/locales/sr.yml                              |  9 ----
 config/locales/sv.yml                              |  9 ----
 config/locales/th.yml                              |  1 -
 config/locales/tr.yml                              |  1 -
 config/locales/uk.yml                              |  1 -
 config/locales/zh-CN.yml                           |  9 ----
 config/locales/zh-HK.yml                           |  9 ----
 config/locales/zh-TW.yml                           |  1 -
 config/routes.rb                                   |  4 +-
 .../admin/reported_statuses_controller_spec.rb     | 49 ++++----------------
 spec/controllers/admin/statuses_controller_spec.rb | 48 ++++----------------
 44 files changed, 77 insertions(+), 446 deletions(-)

(limited to 'spec')

diff --git a/app/controllers/admin/reported_statuses_controller.rb b/app/controllers/admin/reported_statuses_controller.rb
index 522f68c98..d3c2f5e9e 100644
--- a/app/controllers/admin/reported_statuses_controller.rb
+++ b/app/controllers/admin/reported_statuses_controller.rb
@@ -3,7 +3,6 @@
 module Admin
   class ReportedStatusesController < BaseController
     before_action :set_report
-    before_action :set_status, only: [:update, :destroy]
 
     def create
       authorize :status, :update?
@@ -14,20 +13,6 @@ module Admin
       redirect_to admin_report_path(@report)
     end
 
-    def update
-      authorize @status, :update?
-      @status.update!(status_params)
-      log_action :update, @status
-      redirect_to admin_report_path(@report)
-    end
-
-    def destroy
-      authorize @status, :destroy?
-      RemovalWorker.perform_async(@status.id)
-      log_action :destroy, @status
-      render json: @status
-    end
-
     private
 
     def status_params
@@ -51,9 +36,5 @@ module Admin
     def set_report
       @report = Report.find(params[:report_id])
     end
-
-    def set_status
-      @status = @report.statuses.find(params[:id])
-    end
   end
 end
diff --git a/app/controllers/admin/statuses_controller.rb b/app/controllers/admin/statuses_controller.rb
index d5787acfb..382bfc4a2 100644
--- a/app/controllers/admin/statuses_controller.rb
+++ b/app/controllers/admin/statuses_controller.rb
@@ -5,7 +5,6 @@ module Admin
     helper_method :current_params
 
     before_action :set_account
-    before_action :set_status, only: [:update, :destroy]
 
     PER_PAGE = 20
 
@@ -26,40 +25,18 @@ module Admin
     def create
       authorize :status, :update?
 
-      @form         = Form::StatusBatch.new(form_status_batch_params.merge(current_account: current_account))
+      @form         = Form::StatusBatch.new(form_status_batch_params.merge(current_account: current_account, action: action_from_button))
       flash[:alert] = I18n.t('admin.statuses.failed_to_execute') unless @form.save
 
       redirect_to admin_account_statuses_path(@account.id, current_params)
     end
 
-    def update
-      authorize @status, :update?
-      @status.update!(status_params)
-      log_action :update, @status
-      redirect_to admin_account_statuses_path(@account.id, current_params)
-    end
-
-    def destroy
-      authorize @status, :destroy?
-      RemovalWorker.perform_async(@status.id)
-      log_action :destroy, @status
-      render json: @status
-    end
-
     private
 
-    def status_params
-      params.require(:status).permit(:sensitive)
-    end
-
     def form_status_batch_params
       params.require(:form_status_batch).permit(:action, status_ids: [])
     end
 
-    def set_status
-      @status = @account.statuses.find(params[:id])
-    end
-
     def set_account
       @account = Account.find(params[:account_id])
     end
@@ -72,5 +49,15 @@ module Admin
         page: page > 1 && page,
       }.select { |_, value| value.present? }
     end
+
+    def action_from_button
+      if params[:nsfw_on]
+        'nsfw_on'
+      elsif params[:nsfw_off]
+        'nsfw_off'
+      elsif params[:delete]
+        'delete'
+      end
+    end
   end
 end
diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss
index a6cc8b62b..1948a2a23 100644
--- a/app/javascript/styles/mastodon/admin.scss
+++ b/app/javascript/styles/mastodon/admin.scss
@@ -336,7 +336,8 @@
   }
 }
 
-.simple_form.new_report_note {
+.simple_form.new_report_note,
+.simple_form.new_account_moderation_note {
   max-width: 100%;
 }
 
diff --git a/app/views/admin/account_moderation_notes/_account_moderation_note.html.haml b/app/views/admin/account_moderation_notes/_account_moderation_note.html.haml
index 6761a4319..432fb79a6 100644
--- a/app/views/admin/account_moderation_notes/_account_moderation_note.html.haml
+++ b/app/views/admin/account_moderation_notes/_account_moderation_note.html.haml
@@ -1,10 +1,7 @@
-%tr
-  %td
+.speech-bubble
+  .speech-bubble__bubble
     = simple_format(h(account_moderation_note.content))
-  %td
-    = account_moderation_note.account.acct
-  %td
-    %time.formatted{ datetime: account_moderation_note.created_at.iso8601, title: l(account_moderation_note.created_at) }
-      = l account_moderation_note.created_at
-  %td
-    = link_to t('admin.account_moderation_notes.delete'), admin_account_moderation_note_path(account_moderation_note), method: :delete if can?(:destroy, account_moderation_note)
+  .speech-bubble__owner
+    = admin_account_link_to account_moderation_note.account
+    %time.formatted{ datetime: account_moderation_note.created_at.iso8601 }= l account_moderation_note.created_at
+    = table_link_to 'trash', t('admin.account_moderation_notes.delete'), admin_account_moderation_note_path(account_moderation_note), method: :delete if can?(:destroy, account_moderation_note)
diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml
index 7312618ee..2e6de1864 100644
--- a/app/views/admin/accounts/show.html.haml
+++ b/app/views/admin/accounts/show.html.haml
@@ -2,7 +2,7 @@
   = @account.acct
 
 .table-wrapper
-  %table.table
+  %table.table.inline-table
     %tbody
       %tr
         %th= t('admin.accounts.username')
@@ -73,17 +73,17 @@
 
       %tr
         %th= t('admin.accounts.follows')
-        %td= @account.following_count
+        %td= number_to_human @account.following_count
       %tr
         %th= t('admin.accounts.followers')
-        %td= @account.followers_count
+        %td= number_to_human @account.followers_count
       %tr
         %th= t('admin.accounts.statuses')
-        %td= link_to @account.statuses_count, admin_account_statuses_path(@account.id)
+        %td= link_to number_to_human(@account.statuses_count), admin_account_statuses_path(@account.id)
       %tr
         %th= t('admin.accounts.media_attachments')
         %td
-          = link_to @account.media_attachments.count, admin_account_statuses_path(@account.id, { media: true })
+          = link_to number_to_human(@account.media_attachments.count), admin_account_statuses_path(@account.id, { media: true })
           = surround '(', ')' do
             = number_to_human_size @account.media_attachments.sum('file_file_size')
       %tr
@@ -120,11 +120,12 @@
       = link_to t('admin.accounts.perform_full_suspension'), admin_account_suspension_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' if can?(:suspend, @account)
 
 - if !@account.local? && @account.hub_url.present?
-  %hr
+  %hr.spacer/
+
   %h3 OStatus
 
   .table-wrapper
-    %table.table
+    %table.table.inline-table
       %tbody
         %tr
           %th= t('admin.accounts.feed_url')
@@ -148,11 +149,12 @@
         = link_to t('admin.accounts.unsubscribe'), unsubscribe_admin_account_path(@account.id), method: :post, class: 'button negative' if can?(:unsubscribe, @account)
 
 - if !@account.local? && @account.inbox_url.present?
-  %hr
+  %hr.spacer/
+
   %h3 ActivityPub
 
   .table-wrapper
-    %table.table
+    %table.table.inline-table
       %tbody
         %tr
           %th= t('admin.accounts.inbox_url')
@@ -167,24 +169,15 @@
           %th= t('admin.accounts.followers_url')
           %td= link_to @account.followers_url, @account.followers_url
 
-%hr
-%h3= t('admin.accounts.moderation_notes')
+%hr.spacer/
+
+= render @moderation_notes
 
 = simple_form_for @account_moderation_note, url: admin_account_moderation_notes_path do |f|
   = render 'shared/error_messages', object: @account_moderation_note
 
-  = f.input :content
+  = f.input :content, placeholder: t('admin.reports.notes.placeholder'), rows: 6
   = f.hidden_field :target_account_id
 
   .actions
-  = f.button :button, t('admin.account_moderation_notes.create'), type: :submit
-
-.table-wrapper
-  %table.table
-    %thead
-      %tr
-        %th
-        %th= t('admin.account_moderation_notes.account')
-        %th= t('admin.account_moderation_notes.created_at')
-    %tbody
-      = render @moderation_notes
+    = f.button :button, t('admin.account_moderation_notes.create'), type: :submit
diff --git a/app/views/admin/reports/_status.html.haml b/app/views/admin/reports/_status.html.haml
index 137609539..9057e6048 100644
--- a/app/views/admin/reports/_status.html.haml
+++ b/app/views/admin/reports/_status.html.haml
@@ -7,7 +7,7 @@
         %p><
           %strong= Formatter.instance.format_spoiler(status)
 
-      = Formatter.instance.format(status)
+      = Formatter.instance.format(status, custom_emojify: true)
 
     - unless status.media_attachments.empty?
       - if status.media_attachments.first.video?
diff --git a/app/views/admin/statuses/index.html.haml b/app/views/admin/statuses/index.html.haml
index fe2581527..880a24f76 100644
--- a/app/views/admin/statuses/index.html.haml
+++ b/app/views/admin/statuses/index.html.haml
@@ -3,11 +3,8 @@
 
 - content_for :page_title do
   = t('admin.statuses.title')
-
-.back-link
-  = link_to admin_account_path(@account.id) do
-    %i.fa.fa-chevron-left.fa-fw
-    = t('admin.statuses.back_to_account')
+  \-
+  = "@#{@account.acct}"
 
 .filters
   .filter-subset
@@ -15,33 +12,26 @@
     %ul
       %li= link_to t('admin.statuses.no_media'), admin_account_statuses_path(@account.id, current_params.merge(media: nil)), class: !params[:media] && 'selected'
       %li= link_to t('admin.statuses.with_media'), admin_account_statuses_path(@account.id, current_params.merge(media: true)), class: params[:media] && 'selected'
+  .back-link{ style: 'flex: 1 1 auto; text-align: right' }
+    = link_to admin_account_path(@account.id) do
+      %i.fa.fa-chevron-left.fa-fw
+      = t('admin.statuses.back_to_account')
+
+%hr.spacer/
+
+= form_for(@form, url: admin_account_statuses_path(@account.id)) do |f|
+  = hidden_field_tag :page, params[:page]
+  = hidden_field_tag :media, params[:media]
 
-- if @statuses.empty?
-  .accounts-grid
-    = render 'accounts/nothing_here'
-- else
-  = form_for(@form, url: admin_account_statuses_path(@account.id)) do |f|
-    = hidden_field_tag :page, params[:page]
-    = hidden_field_tag :media, params[:media]
-    .batch-form-box
-      .batch-checkbox-all
+  .batch-table
+    .batch-table__toolbar
+      %label.batch-table__toolbar__select.batch-checkbox-all
         = check_box_tag :batch_checkbox_all, nil, false
-      = f.select :action, Form::StatusBatch::ACTION_TYPE.map{|action| [t("admin.statuses.batch.#{action}"), action]}
-      = f.submit t('admin.statuses.execute'), data: { confirm: t('admin.reports.are_you_sure') }, class: 'button'
-      .media-spoiler-toggle-buttons
-        .media-spoiler-show-button.button= t('admin.statuses.media.show')
-        .media-spoiler-hide-button.button= t('admin.statuses.media.hide')
-    - @statuses.each do |status|
-      .account-status{ data: { id: status.id } }
-        .batch-checkbox
-          = f.check_box :status_ids, { multiple: true, include_hidden: false }, status.id
-        .activity-stream.activity-stream-headless
-          .entry= render 'stream_entries/simple_status', status: status
-        .account-status__actions
-          - unless status.media_attachments.empty?
-            = link_to admin_account_status_path(@account.id, status, current_params.merge(status: { sensitive: !status.sensitive })), method: :patch, class: 'icon-button nsfw-button', title: t("admin.reports.nsfw.#{!status.sensitive}") do
-              = fa_icon status.sensitive? ? 'eye' : 'eye-slash'
-          = link_to admin_account_status_path(@account.id, status), method: :delete, class: 'icon-button trash-button', title: t('admin.reports.delete'), data: { confirm: t('admin.reports.are_you_sure') }, remote: true do
-            = fa_icon 'trash'
+      .batch-table__toolbar__actions
+        = f.button safe_join([fa_icon('eye-slash'), t('admin.statuses.batch.nsfw_on')]), name: :nsfw_on, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') }
+        = f.button safe_join([fa_icon('eye'), t('admin.statuses.batch.nsfw_off')]), name: :nsfw_off, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') }
+        = f.button safe_join([fa_icon('trash'), t('admin.statuses.batch.delete')]), name: :delete, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') }
+    .batch-table__body
+      = render partial: 'admin/reports/status', collection: @statuses, locals: { f: f }
 
 = paginate @statuses
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index e9ca3038e..a5179ae14 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -52,9 +52,7 @@ ar:
     unfollow: إلغاء المتابعة
   admin:
     account_moderation_notes:
-      account: مُشرِف
       create: إنشاء
-      created_at: التاريخ
       created_msg: تم إنشاء ملاحظة الإشراف بنجاح !
       delete: حذف
       destroyed_msg: تم تدمير ملاحظة الإشراف بنجاح !
@@ -241,12 +239,8 @@ ar:
       are_you_sure: هل أنت متأكد ؟
       comment:
         none: لا شيء
-      delete: حذف
       id: معرّف ID
       mark_as_resolved: إعتبار التقرير كمحلول
-      nsfw:
-        'false': الكشف عن الصور
-        'true': إخفاء الوسائط المرفقة
       report: 'التقرير #%{id}'
       report_contents: المحتويات
       reported_account: حساب مُبلّغ عنه
@@ -305,11 +299,8 @@ ar:
       back_to_account: العودة إلى صفحة الحساب
       batch:
         delete: حذف
-      execute: تفعيل
       failed_to_execute: خطأ في التفعيل
       media:
-        hide: إخفاء الوسائط
-        show: إظهار الوسائط
         title: الوسائط
       title: منشورات الحساب
       with_media: بالوسائط
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index 2758bb487..a8c75c32d 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -53,9 +53,7 @@ ca:
     unfollow: Deixa de seguir
   admin:
     account_moderation_notes:
-      account: Moderador
       create: Crea
-      created_at: Data
       created_msg: La nota de moderació s'ha creat correctament!
       delete: Suprimeix
       destroyed_msg: Nota de moderació destruïda amb èxit!
@@ -269,7 +267,6 @@ ca:
       comment:
         none: Cap
       created_at: Reportat
-      delete: Suprimeix
       id: ID
       mark_as_resolved: Marca com a resolt
       mark_as_unresolved: Marcar sense resoldre
@@ -279,9 +276,6 @@ ca:
         create_and_unresolve: Reobrir amb nota
         delete: Esborrar
         placeholder: Descriu les accions que s'han pres o qualsevol altra actualització d'aquest informe…
-      nsfw:
-        'false': Mostra els fitxers multimèdia adjunts
-        'true': Amaga els fitxers multimèdia adjunts
       reopen: Reobrir informe
       report: 'Informe #%{id}'
       report_contents: Contingut
@@ -356,11 +350,8 @@ ca:
         delete: Suprimeix
         nsfw_off: Marcar com a no sensible
         nsfw_on: Marcar com a sensible
-      execute: Executa
       failed_to_execute: No s'ha pogut executar
       media:
-        hide: Amaga el contingut multimèdia
-        show: Mostra el contingut multimèdia
         title: Contingut multimèdia
       no_media: Sense contingut multimèdia
       title: Estats del compte
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 6b2c08735..aa4295c89 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -53,9 +53,7 @@ de:
     unfollow: Entfolgen
   admin:
     account_moderation_notes:
-      account: Moderator*in
       create: Erstellen
-      created_at: Datum
       created_msg: Moderationsnotiz erfolgreich erstellt!
       delete: Löschen
       destroyed_msg: Moderationsnotiz erfolgreich gelöscht!
@@ -269,7 +267,6 @@ de:
       comment:
         none: Kein
       created_at: Gemeldet
-      delete: Löschen
       id: ID
       mark_as_resolved: Als gelöst markieren
       mark_as_unresolved: Als ungelöst markieren
@@ -279,9 +276,6 @@ de:
         create_and_unresolve: Mit Kommentar wieder öffnen
         delete: Löschen
         placeholder: Beschreibe, welche Maßnahmen ergriffen wurden oder andere Neuigkeiten zu dieser Meldung…
-      nsfw:
-        'false': Medienanhänge wieder anzeigen
-        'true': Medienanhänge verbergen
       reopen: Meldung wieder öffnen
       report: 'Meldung #%{id}'
       report_contents: Inhalt
@@ -356,11 +350,8 @@ de:
         delete: Löschen
         nsfw_off: Als nicht heikel markieren
         nsfw_on: Als heikel markieren
-      execute: Ausführen
       failed_to_execute: Ausführen fehlgeschlagen
       media:
-        hide: Medien verbergen
-        show: Medien anzeigen
         title: Medien
       no_media: Keine Medien
       title: Beiträge des Kontos
diff --git a/config/locales/en.yml b/config/locales/en.yml
index f7127f794..7e389b1c2 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -53,9 +53,7 @@ en:
     unfollow: Unfollow
   admin:
     account_moderation_notes:
-      account: Moderator
-      create: Create
-      created_at: Date
+      create: Leave note
       created_msg: Moderation note successfully created!
       delete: Delete
       destroyed_msg: Moderation note successfully destroyed!
@@ -269,7 +267,6 @@ en:
       comment:
         none: None
       created_at: Reported
-      delete: Delete
       id: ID
       mark_as_resolved: Mark as resolved
       mark_as_unresolved: Mark as unresolved
@@ -279,9 +276,6 @@ en:
         create_and_unresolve: Reopen with note
         delete: Delete
         placeholder: Describe what actions have been taken, or any other updates to this report…
-      nsfw:
-        'false': Unhide media attachments
-        'true': Hide media attachments
       reopen: Reopen report
       report: 'Report #%{id}'
       report_contents: Contents
@@ -356,11 +350,8 @@ en:
         delete: Delete
         nsfw_off: Mark as not sensitive
         nsfw_on: Mark as sensitive
-      execute: Execute
       failed_to_execute: Failed to execute
       media:
-        hide: Hide media
-        show: Show media
         title: Media
       no_media: No media
       title: Account statuses
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index c768d8a03..9c44d0e62 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -52,9 +52,7 @@ eo:
     unfollow: Ne plu sekvi
   admin:
     account_moderation_notes:
-      account: Kontrolanto
       create: Krei
-      created_at: Dato
       created_msg: Kontrola noto sukcese kreita!
       delete: Forigi
       destroyed_msg: Kontrola noto sukcese detruita!
@@ -244,12 +242,8 @@ eo:
       are_you_sure: Ĉu vi certas?
       comment:
         none: Nenio
-      delete: Forigi
       id: ID
       mark_as_resolved: Marki kiel solvita
-      nsfw:
-        'false': Malkaŝi aŭdovidajn kunsendaĵojn
-        'true': Kaŝi aŭdovidajn kunsendaĵojn
       report: 'Signalo #%{id}'
       report_contents: Enhavo
       reported_account: Signalita konto
@@ -320,11 +314,8 @@ eo:
         delete: Forigi
         nsfw_off: Malŝalti NSFW
         nsfw_on: Ŝalti NSFW
-      execute: Ekigi
       failed_to_execute: Ekigo malsukcesa
       media:
-        hide: Kaŝi aŭdovidaĵojn
-        show: Montri aŭdovidaĵojn
         title: Aŭdovidaĵoj
       no_media: Neniu aŭdovidaĵo
       title: Mesaĝoj de la konto
diff --git a/config/locales/es.yml b/config/locales/es.yml
index cd36e3a97..be7dcd81e 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -53,9 +53,7 @@ es:
     unfollow: Dejar de seguir
   admin:
     account_moderation_notes:
-      account: Moderador
       create: Crear
-      created_at: Fecha
       created_msg: "¡Nota de moderación creada con éxito!"
       delete: Borrar
       destroyed_msg: "¡Nota de moderación destruida con éxito!"
@@ -269,7 +267,6 @@ es:
       comment:
         none: Ninguno
       created_at: Denunciado
-      delete: Eliminar
       id: ID
       mark_as_resolved: Marcar como resuelto
       mark_as_unresolved: Marcar como no resuelto
@@ -279,9 +276,6 @@ es:
         create_and_unresolve: Reabrir con una nota
         delete: Eliminar
         placeholder: Especificar qué acciones se han tomado o cualquier otra novedad respecto a esta denuncia…
-      nsfw:
-        'false': Mostrar multimedia
-        'true': Ocultar multimedia
       reopen: Reabrir denuncia
       report: 'Reportar #%{id}'
       report_contents: Contenido
@@ -356,11 +350,8 @@ es:
         delete: Eliminar
         nsfw_off: Marcar contenido como no sensible
         nsfw_on: Marcar contenido como sensible
-      execute: Ejecutar
       failed_to_execute: Falló al ejecutar
       media:
-        hide: Ocultar multimedia
-        show: Mostrar multimedia
         title: Multimedia
       no_media: No hay multimedia
       title: Estado de las cuentas
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index a3005547a..3aa40f0b3 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -52,9 +52,7 @@ fa:
     unfollow: پایان پیگیری
   admin:
     account_moderation_notes:
-      account: مدیر
       create: نوشتن
-      created_at: تاریخ
       created_msg: یادداشت مدیر با موفقیت ساخته شد!
       delete: پاک کردن
       destroyed_msg: یادداشت مدیر با موفقیت پاک شد!
@@ -244,12 +242,8 @@ fa:
       are_you_sure: آیا مطمئن هستید؟
       comment:
         none: خالی
-      delete: پاک‌کردن
       id: شناسه
       mark_as_resolved: علامت‌گذاری به عنوان حل‌شده
-      nsfw:
-        'false': نمایش پیوست‌های تصویری
-        'true': نهفتن پیوست‌های تصویری
       report: 'گزارش #%{id}'
       report_contents: محتوا
       reported_account: حساب گزارش‌شده
@@ -308,11 +302,8 @@ fa:
         delete: پاک‌کردن
         nsfw_off: NSFW خاموش
         nsfw_on: NSFW روشن
-      execute: اجرا
       failed_to_execute: اجرا نشد
       media:
-        hide: نهفتن رسانه
-        show: نمایش رسانه
         title: رسانه
       no_media: بدون رسانه
       title: نوشته‌های حساب
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 550ad1805..b313c8723 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -52,9 +52,7 @@ fi:
     unfollow: Lopeta seuraaminen
   admin:
     account_moderation_notes:
-      account: Moderaattori
       create: Luo
-      created_at: Päiväys
       created_msg: Moderointimerkinnän luonti onnistui!
       delete: Poista
       destroyed_msg: Moderointimerkinnän poisto onnistui!
@@ -244,12 +242,8 @@ fi:
       are_you_sure: Oletko varma?
       comment:
         none: Ei mitään
-      delete: Poista
       id: Tunniste
       mark_as_resolved: Merkitse ratkaistuksi
-      nsfw:
-        'false': Peru medialiitteiden piilotus
-        'true': Piilota medialiitteet
       report: Raportti nro %{id}
       report_contents: Sisältö
       reported_account: Raportoitu tili
@@ -320,11 +314,8 @@ fi:
         delete: Poista
         nsfw_off: NSFW POIS
         nsfw_on: NSFW PÄÄLLÄ
-      execute: Suorita
       failed_to_execute: Suoritus epäonnistui
       media:
-        hide: Piilota media
-        show: Näytä media
         title: Media
       no_media: Ei mediaa
       title: Tilin tilat
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 462ce7b4b..3b543fdb7 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -53,9 +53,7 @@ fr:
     unfollow: Ne plus suivre
   admin:
     account_moderation_notes:
-      account: Modérateur·ice
       create: Créer
-      created_at: Date
       created_msg: Note de modération créée avec succès !
       delete: Supprimer
       destroyed_msg: Note de modération supprimée avec succès !
@@ -269,7 +267,6 @@ fr:
       comment:
         none: Aucun
       created_at: Signalé
-      delete: Supprimer
       id: ID
       mark_as_resolved: Marquer comme résolu
       mark_as_unresolved: Marquer comme non-résolu
@@ -279,9 +276,6 @@ fr:
         create_and_unresolve: Ré-ouvrir avec une note
         delete: Effacer
         placeholder: Décrivez quelles actions ont été prises, ou toute autre mise à jour de ce signalement…
-      nsfw:
-        'false': Ré-afficher les médias
-        'true': Masquer les médias
       reopen: Ré-ouvrir le signalement
       report: 'Signalement #%{id}'
       report_contents: Contenu
@@ -356,11 +350,8 @@ fr:
         delete: Supprimer
         nsfw_off: Marquer comme non-sensible
         nsfw_on: Marquer comme sensible
-      execute: Exécuter
       failed_to_execute: Erreur d’exécution
       media:
-        hide: Masquer les médias
-        show: Montrer les médias
         title: Médias
       no_media: Aucun média
       title: État du compte
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 6f2270224..eec1b4e1e 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -53,9 +53,7 @@ gl:
     unfollow: Deixar de seguir
   admin:
     account_moderation_notes:
-      account: Moderador
       create: Crear
-      created_at: Data
       created_msg: Nota a moderación creada con éxito!
       delete: Eliminar
       destroyed_msg: Nota a moderación destruída con éxito!
@@ -269,7 +267,6 @@ gl:
       comment:
         none: Nada
       created_at: Reportado
-      delete: Eliminar
       id: ID
       mark_as_resolved: Marcar como resolto
       mark_as_unresolved: Marcar como non resolto
@@ -279,9 +276,6 @@ gl:
         create_and_unresolve: Voltar a abrir con nota
         delete: Eliminar
         placeholder: Describir qué decisións foron tomadas, ou calquer actualización a este informe…
-      nsfw:
-        'false': Non agochar anexos de medios
-        'true': Agochar anexos de medios
       reopen: Voltar a abrir o informe
       report: 'Informe #%{id}'
       report_contents: Contidos
@@ -356,11 +350,8 @@ gl:
         delete: Eliminar
         nsfw_off: Marcar como non sensible
         nsfw_on: Marcar como sensible
-      execute: Executar
       failed_to_execute: Fallou a execución
       media:
-        hide: Agochar medios
-        show: Mostar medios
         title: Medios
       no_media: Sen medios
       title: Estados da conta
diff --git a/config/locales/he.yml b/config/locales/he.yml
index d641c6e1a..d66d9f034 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -52,9 +52,7 @@ he:
     unfollow: הפסקת מעקב
   admin:
     account_moderation_notes:
-      account: מנחה דיון
       create: ליצור
-      created_at: תאריך
       created_msg: הודעת מנחה נוצרה בהצלחה!
       delete: למחוק
       destroyed_msg: הודעת מנחה נמחקה בהצלחה!
@@ -181,12 +179,8 @@ he:
       are_you_sure: 100% על בטוח?
       comment:
         none: ללא
-      delete: מחיקה
       id: ID
       mark_as_resolved: סימון כפתור
-      nsfw:
-        'false': לכל המשפחה
-        'true': תוכן רגיש
       report: 'דווח על #%{id}'
       report_contents: תוכן
       reported_account: חשבון מדווח
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 7fe431d37..422c05955 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -52,9 +52,7 @@ hu:
     unfollow: Követés abbahagyása
   admin:
     account_moderation_notes:
-      account: Moderátor
       create: Új bejegyzés
-      created_at: Dátum
       created_msg: Moderációs bejegyzés létrehozva!
       delete: Törlés
       destroyed_msg: Moderációs bejegyzés törölve!
@@ -244,12 +242,8 @@ hu:
       are_you_sure: Biztos vagy benne?
       comment:
         none: Egyik sem
-      delete: Törlés
       id: ID
       mark_as_resolved: Megjelölés megoldottként
-      nsfw:
-        'false': Média-csatolmányok rejtésének feloldása
-        'true': Média-csatolmányok elrejtése
       report: "#%{id} számú jelentés"
       report_contents: Tartalom
       reported_account: Bejelentett fiók
@@ -314,11 +308,8 @@ hu:
         delete: Törlés
         nsfw_off: Szenzitív tartalom kikapcsolva
         nsfw_on: Szenzitív tartalom bekapcsolva
-      execute: Végrehajt
       failed_to_execute: Végrehajtás sikertelen
       media:
-        hide: Média elrejtése
-        show: Média megjelenítése
         title: Média
       no_media: Nem található médiafájl
       title: Felhasználó tülkjei
diff --git a/config/locales/id.yml b/config/locales/id.yml
index 5a63b8038..0476e2848 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -107,7 +107,6 @@ id:
     reports:
       comment:
         none: Tidak ada
-      delete: Hapus
       id: ID
       mark_as_resolved: Tandai telah diseleseikan
       report: 'Laporkan #%{id}'
diff --git a/config/locales/io.yml b/config/locales/io.yml
index 7c25acc47..bf15de488 100644
--- a/config/locales/io.yml
+++ b/config/locales/io.yml
@@ -106,7 +106,6 @@ io:
     reports:
       comment:
         none: None
-      delete: Delete
       id: ID
       mark_as_resolved: Mark as resolved
       report: 'Report #%{id}'
diff --git a/config/locales/it.yml b/config/locales/it.yml
index e010be02d..c1ac176c4 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -49,9 +49,7 @@ it:
     unfollow: Non seguire più
   admin:
     account_moderation_notes:
-      account: Moderatore
       create: Crea
-      created_at: Data
       created_msg: Nota di moderazione creata con successo!
       delete: Elimina
       destroyed_msg: Nota di moderazione distrutta con successo!
@@ -214,7 +212,6 @@ it:
       assigned: Moderatore assegnato
       comment:
         none: Nessuno
-      delete: Elimina
       id: ID
       mark_as_resolved: Segna come risolto
       mark_as_unresolved: Segna come non risolto
@@ -223,9 +220,6 @@ it:
         create_and_resolve: Risolvi con nota
         create_and_unresolve: Riapri con nota
         delete: Elimina
-      nsfw:
-        'false': Mostra gli allegati multimediali
-        'true': Nascondi allegati multimediali
       report_contents: Contenuti
       resolved: Risolto
       silence_account: Silenzia account
@@ -266,11 +260,8 @@ it:
         delete: Elimina
         nsfw_off: NSFW OFF
         nsfw_on: NSFW ON
-      execute: Esegui
       failed_to_execute: Impossibile eseguire
       media:
-        hide: Nascondi media
-        show: Mostra media
         title: Media
       no_media: Nessun media
       with_media: con media
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 5b3cc5f15..bc48613b9 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -53,9 +53,7 @@ ja:
     unfollow: フォロー解除
   admin:
     account_moderation_notes:
-      account: モデレータ
       create: 書き込む
-      created_at: 日付
       created_msg: モデレーションメモを書き込みました!
       delete: 削除
       destroyed_msg: モデレーションメモを削除しました!
@@ -269,7 +267,6 @@ ja:
       comment:
         none: なし
       created_at: レポート日時
-      delete: 削除
       id: ID
       mark_as_resolved: 解決済みとしてマーク
       mark_as_unresolved: 未解決として再び開く
@@ -279,9 +276,6 @@ ja:
         create_and_unresolve: 書き込み、未解決として開く
         delete: 削除
         placeholder: このレポートに取られた措置や、その他の更新を記述してください…
-      nsfw:
-        'false': NSFW オフ
-        'true': NSFW オン
       reopen: 再び開く
       report: レポート#%{id}
       report_contents: 内容
@@ -356,11 +350,8 @@ ja:
         delete: 削除
         nsfw_off: 閲覧注意のマークを取り除く
         nsfw_on: 閲覧注意としてマークする
-      execute: 実行
       failed_to_execute: 実行に失敗しました
       media:
-        hide: メディアを隠す
-        show: メディアを表示
         title: メディア
       no_media: メディアなし
       title: トゥート一覧
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 0f3c6483f..bd6717d49 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -53,9 +53,7 @@ ko:
     unfollow: 팔로우 해제
   admin:
     account_moderation_notes:
-      account: 모더레이터
       create: 작성하기
-      created_at: 작성 날짜
       created_msg: 모더레이션 기록이 성공적으로 작성되었습니다!
       delete: 삭제
       destroyed_msg: 모더레이션 기록이 성공적으로 삭제되었습니다!
@@ -271,7 +269,6 @@ ko:
       comment:
         none: 없음
       created_at: 리포트 시각
-      delete: 삭제
       id: ID
       mark_as_resolved: 해결 완료 처리
       mark_as_unresolved: 미해결로 표시
@@ -281,9 +278,6 @@ ko:
         create_and_unresolve: 노트 작성과 함께 미해결로 표시
         delete: 삭제
         placeholder: 이 리포트에 대한 조치, 다른 업데이트 사항에 대해 설명합니다…
-      nsfw:
-        'false': NSFW 꺼짐
-        'true': NSFW 켜짐
       reopen: 리포트 다시 열기
       report: '신고 #%{id}'
       report_contents: 내용
@@ -358,11 +352,8 @@ ko:
         delete: 삭제
         nsfw_off: NSFW 끄기
         nsfw_on: NSFW 켜기
-      execute: 실행
       failed_to_execute: 실행을 실패하였습니다
       media:
-        hide: 미디어 숨기기
-        show: 미디어 보여주기
         title: 미디어
       no_media: 미디어 없음
       title: 계정 툿
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 7a488bb0f..00f21babd 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -53,9 +53,7 @@ nl:
     unfollow: Ontvolgen
   admin:
     account_moderation_notes:
-      account: Moderator
       create: Aanmaken
-      created_at: Datum
       created_msg: Aanmaken van opmerking voor moderatoren geslaagd!
       delete: Verwijderen
       destroyed_msg: Verwijderen van opmerking voor moderatoren geslaagd!
@@ -269,7 +267,6 @@ nl:
       comment:
         none: Geen
       created_at: Gerapporteerd op
-      delete: Verwijderen
       id: ID
       mark_as_resolved: Markeer als opgelost
       mark_as_unresolved: Markeer als onopgelost
@@ -279,9 +276,6 @@ nl:
         create_and_unresolve: Heropenen met opmerking
         delete: Verwijderen
         placeholder: Beschrijf welke acties zijn ondernomen of andere opmerkingen over deze gerapporteerde toot…
-      nsfw:
-        'false': Media tonen
-        'true': Media verbergen
       reopen: Gerapporteerde toot heropenen
       report: 'Gerapporteerde toot #%{id}'
       report_contents: Inhoud
@@ -356,11 +350,8 @@ nl:
         delete: Verwijderen
         nsfw_off: Als niet gevoelig markeren
         nsfw_on: Als gevoelig markeren
-      execute: Uitvoeren
       failed_to_execute: Uitvoeren mislukt
       media:
-        hide: Media verbergen
-        show: Media tonen
         title: Media
       no_media: Geen media
       title: Toots van account
diff --git a/config/locales/no.yml b/config/locales/no.yml
index 8b84182af..6ce2c0f01 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -52,9 +52,7 @@
     unfollow: Slutte følge
   admin:
     account_moderation_notes:
-      account: Moderator
       create: Lag
-      created_at: Dato
       created_msg: Moderasjonsnotat laget uten problem!
       delete: Slett
       destroyed_msg: Moderasjonsnotat slettet uten problem!
@@ -244,12 +242,8 @@
       are_you_sure: Er du sikker?
       comment:
         none: Ingen
-      delete: Slett
       id: ID
       mark_as_resolved: Merk som løst
-      nsfw:
-        'false': Vis mediavedlegg
-        'true': Skjul mediavedlegg
       report: 'Rapportér #%{id}'
       report_contents: Innhold
       reported_account: Rapportert konto
@@ -314,11 +308,8 @@
         delete: Slett
         nsfw_off: NSFW AV
         nsfw_on: NSFW PÅ
-      execute: Utfør
       failed_to_execute: Utføring mislyktes
       media:
-        hide: Skjul media
-        show: Vis media
         title: Media
       no_media: Ingen media
       title: Kontostatuser
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index c248ffd85..c11fe614b 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -53,9 +53,7 @@ oc:
     unfollow: Quitar de sègre
   admin:
     account_moderation_notes:
-      account: Moderator
       create: Crear
-      created_at: Data
       created_msg: Nòta de moderacion ben creada !
       delete: Suprimir
       destroyed_msg: Nòta de moderacion ben suprimida !
@@ -265,7 +263,6 @@ oc:
       comment:
         none: Pas cap
       created_at: Creacion
-      delete: Suprimir
       id: ID
       mark_as_resolved: Marcar coma resolgut
       mark_as_unresolved: Marcar coma pas resolgut
@@ -274,9 +271,6 @@ oc:
         create_and_resolve: Resòlvre amb una nòta
         create_and_unresolve: Tornar dobrir amb una nòta
         placeholder: Explicatz las accions que son estadas menadas o çò qu’es estat fach per aqueste rapòrt…
-      nsfw:
-        'false': Sens contengut sensible
-        'true': Contengut sensible activat
       reopen: Tornar dobrir lo rapòrt
       report: 'senhalament #%{id}'
       report_contents: Contenguts
@@ -348,11 +342,8 @@ oc:
         delete: Suprimir
         nsfw_off: NSFW OFF
         nsfw_on: NSFW ON
-      execute: Lançar
       failed_to_execute: Fracàs
       media:
-        hide: Amagar mèdia
-        show: Mostrar mèdia
         title: Mèdia
       no_media: Cap mèdia
       title: Estatuts del compte
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 7455df2c0..bd38aa6f7 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -53,9 +53,7 @@ pl:
     unfollow: Przestań śledzić
   admin:
     account_moderation_notes:
-      account: Autor
       create: Dodaj
-      created_at: Data
       created_msg: Pomyślnie dodano notatkę moderacyjną!
       delete: Usuń
       destroyed_msg: Pomyślnie usunięto notatkę moderacyjną!
@@ -270,7 +268,6 @@ pl:
       comment:
         none: Brak
       created_at: Zgłoszono
-      delete: Usuń
       id: ID
       mark_as_resolved: Oznacz jako rozwiązane
       mark_as_unresolved: Oznacz jako nierozwiązane
@@ -280,9 +277,6 @@ pl:
         create_and_unresolve: Cofnij rozwiązanie i pozostaw notatkę
         delete: Usuń
         placeholder: Opisz wykonane akcje i inne szczegóły dotyczące tego zgłoszenia…
-      nsfw:
-        'false': Nie oznaczaj jako NSFW
-        'true': Oznaczaj jako NSFW
       reopen: Otwórz ponownie
       report: 'Zgłoszenie #%{id}'
       report_contents: Zawartość
@@ -357,11 +351,8 @@ pl:
         delete: Usuń
         nsfw_off: Cofnij NSFW
         nsfw_on: Oznacz jako NSFW
-      execute: Wykonaj
       failed_to_execute: Nie udało się wykonać
       media:
-        hide: Ukryj zawartość multimedialną
-        show: Pokaż zawartość multimedialną
         title: Media
       no_media: Bez zawartości multimedialnej
       title: Wpisy konta
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 4a574a575..862833d87 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -53,9 +53,7 @@ pt-BR:
     unfollow: Deixar de seguir
   admin:
     account_moderation_notes:
-      account: Moderador
       create: Criar
-      created_at: Data
       created_msg: Nota de moderação criada com sucesso!
       delete: Excluir
       destroyed_msg: Nota de moderação excluída com sucesso!
@@ -269,7 +267,6 @@ pt-BR:
       comment:
         none: Nenhum
       created_at: Denunciado
-      delete: Excluir
       id: ID
       mark_as_resolved: Marcar como resolvido
       mark_as_unresolved: Marcar como não resolvido
@@ -279,9 +276,6 @@ pt-BR:
         create_and_unresolve: Reabrir com nota
         delete: Excluir
         placeholder: Descreva que ações foram tomadas, ou quaisquer atualizações sobre esta denúncia…
-      nsfw:
-        'false': Mostrar mídias anexadas
-        'true': Esconder mídias anexadas
       reopen: Reabrir denúncia
       report: 'Denúncia #%{id}'
       report_contents: Conteúdos
@@ -356,11 +350,8 @@ pt-BR:
         delete: Deletar
         nsfw_off: Marcar como não-sensível
         nsfw_on: Marcar como sensível
-      execute: Executar
       failed_to_execute: Falha em executar
       media:
-        hide: Esconder mídia
-        show: Mostrar mídia
         title: Mídia
       no_media: Não há mídia
       title: Postagens da conta
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index fb2a6cad1..62a7ef0ec 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -52,9 +52,7 @@ pt:
     unfollow: Deixar de seguir
   admin:
     account_moderation_notes:
-      account: Moderador
       create: Criar
-      created_at: Data
       created_msg: Nota de moderação criada com sucesso!
       delete: Eliminar
       destroyed_msg: Nota de moderação excluída com sucesso!
@@ -244,12 +242,8 @@ pt:
       are_you_sure: Tens a certeza?
       comment:
         none: Nenhum
-      delete: Eliminar
       id: ID
       mark_as_resolved: Marcar como resolvido
-      nsfw:
-        'false': Mostrar imagens/vídeos
-        'true': Esconder imagens/vídeos
       report: 'Denúncia #%{id}'
       report_contents: Conteúdos
       reported_account: Conta denunciada
@@ -314,11 +308,8 @@ pt:
         delete: Eliminar
         nsfw_off: NSFW OFF
         nsfw_on: NSFW ON
-      execute: Executar
       failed_to_execute: Falhou ao executar
       media:
-        hide: Esconder média
-        show: Mostrar média
         title: Média
       no_media: Não há média
       title: Estado das contas
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index bf4225758..603e1f3ca 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -52,9 +52,7 @@ ru:
     unfollow: Отписаться
   admin:
     account_moderation_notes:
-      account: Модератор
       create: Создать
-      created_at: Дата
       created_msg: Заметка модератора успешно создана!
       delete: Удалить
       destroyed_msg: Заметка модератора успешно удалена!
@@ -246,12 +244,8 @@ ru:
       are_you_sure: Вы уверены?
       comment:
         none: Нет
-      delete: Удалить
       id: ID
       mark_as_resolved: Отметить как разрешенную
-      nsfw:
-        'false': Показать мультимедийные вложения
-        'true': Скрыть мультимедийные вложения
       report: 'Жалоба #%{id}'
       report_contents: Содержимое
       reported_account: Аккаунт нарушителя
@@ -322,11 +316,8 @@ ru:
         delete: Удалить
         nsfw_off: Выключить NSFW
         nsfw_on: Включить NSFW
-      execute: Выполнить
       failed_to_execute: Не удалось выполнить
       media:
-        hide: Скрыть медиаконтент
-        show: Показать медиаконтент
         title: Медиаконтент
       no_media: Без медиаконтента
       title: Статусы аккаунта
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index fc9e9452c..7fb097f03 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -53,9 +53,7 @@ sk:
     unfollow: Prestať sledovať
   admin:
     account_moderation_notes:
-      account: Moderátor
       create: Vytvoriť
-      created_at: Dátum
       created_msg: Poznámka moderátora bola úspešne vytvorená!
       delete: Zmazať
       destroyed_msg: Poznámka moderátora bola úspešne zmazaná!
@@ -268,7 +266,6 @@ sk:
       comment:
         none: Žiadne
       created_at: Nahlásené
-      delete: Vymazať
       id: Identifikácia
       mark_as_resolved: Označiť ako vyriešené
       mark_as_unresolved: Označ ako nevyriešené
@@ -278,9 +275,6 @@ sk:
         create_and_unresolve: Otvor znovu, s poznámkou
         delete: Vymaž
         placeholder: Opíš aké opatrenia boli urobené, alebo akékoľvek iné aktualizácie k tomuto nahláseniu…
-      nsfw:
-        'false': Odkryť mediálne prílohy
-        'true': Skryť mediálne prílohy
       reopen: Znovu otvor report
       report: Nahlásiť
       report_contents: Obsah
@@ -355,11 +349,8 @@ sk:
         delete: Vymazať
         nsfw_off: Obsah nieje chúlostivý
         nsfw_on: Označ obeah aka chúlostivý
-      execute: Vykonať
       failed_to_execute: Nepodarilo sa vykonať
       media:
-        hide: Skryť médiá
-        show: Zobraziť médiá
         title: Médiá
       no_media: Žiadné médiá
       title: Statusy na účte
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index 742c976d1..dba952917 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -52,9 +52,7 @@ sr-Latn:
     unfollow: Otprati
   admin:
     account_moderation_notes:
-      account: Moderator
       create: Napravi
-      created_at: Datum
       created_msg: Moderatorska beleška uspešno napravljena!
       delete: Obriši
       destroyed_msg: Moderatorska beleška uspešno obrisana!
@@ -246,12 +244,8 @@ sr-Latn:
       are_you_sure: Da li ste sigurni?
       comment:
         none: Ništa
-      delete: Obriši
       id: ID
       mark_as_resolved: Označi kao rešen
-      nsfw:
-        'false': Otkrij medijske priloge
-        'true': Sakrij medijske priloge
       report: 'Prijava #%{id}'
       report_contents: Sadržaj
       reported_account: Prijavljeni nalog
@@ -310,11 +304,8 @@ sr-Latn:
         delete: Obriši
         nsfw_off: NSFW isključen
         nsfw_on: NSFW uključen
-      execute: Izvrši
       failed_to_execute: Neuspelo izvršavanje
       media:
-        hide: Sakrij multimediju
-        show: Prikaži multimediju
         title: Multimedija
       no_media: Bez multimedije
       title: Statusi naloga
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 0d55910a6..74abf0323 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -52,9 +52,7 @@ sr:
     unfollow: Отпрати
   admin:
     account_moderation_notes:
-      account: Модератор
       create: Направи
-      created_at: Датум
       created_msg: Модераторска белешка успешно направљена!
       delete: Обриши
       destroyed_msg: Модераторска белешка успешно обрисана!
@@ -246,12 +244,8 @@ sr:
       are_you_sure: Да ли сте сигурни?
       comment:
         none: Ништа
-      delete: Обриши
       id: ID
       mark_as_resolved: Означи као решен
-      nsfw:
-        'false': Откриј медијске прилоге
-        'true': Сакриј медијске прилоге
       report: 'Пријава #%{id}'
       report_contents: Садржај
       reported_account: Пријављени налог
@@ -310,11 +304,8 @@ sr:
         delete: Обриши
         nsfw_off: NSFW искључен
         nsfw_on: NSFW укључен
-      execute: Изврши
       failed_to_execute: Неуспело извршавање
       media:
-        hide: Сакриј мултимедију
-        show: Прикажи мултимедију
         title: Мултимедија
       no_media: Без мултимедије
       title: Статуси налога
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index 845248652..9e0bb0856 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -53,9 +53,7 @@ sv:
     unfollow: Sluta följa
   admin:
     account_moderation_notes:
-      account: Moderator
       create: Skapa
-      created_at: Datum
       created_msg: Modereringsnotering skapad utan problem!
       delete: Ta bort
       destroyed_msg: Modereringsnotering borttagen utan problem!
@@ -269,7 +267,6 @@ sv:
       comment:
         none: Ingen
       created_at: Anmäld
-      delete: Radera
       id: ID
       mark_as_resolved: Markera som löst
       mark_as_unresolved: Markera som olöst
@@ -279,9 +276,6 @@ sv:
         create_and_unresolve: Återuppta med anteckning
         delete: Radera
         placeholder: Beskriv vilka åtgärder som vidtagits eller andra uppdateringar till den här anmälan…
-      nsfw:
-        'false': Visa bifogade mediafiler
-        'true': Dölj bifogade mediafiler
       reopen: Återuppta anmälan
       report: 'Anmäl #%{id}'
       report_contents: Innehåll
@@ -356,11 +350,8 @@ sv:
         delete: Radera
         nsfw_off: Markera som ej känslig
         nsfw_on: Markera som känslig
-      execute: Utför
       failed_to_execute: Misslyckades att utföra
       media:
-        hide: Dölj media
-        show: Visa media
         title: Media
       no_media: Ingen media
       title: Kontostatus
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 350b93b52..9d93115b0 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -109,7 +109,6 @@ th:
     reports:
       comment:
         none: None
-      delete: ลบ
       id: ไอดี
       mark_as_resolved: ทำเครื่องหมายว่าจัดการแล้ว
       report: 'Report #%{id}'
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 6e7aeb77e..0d78216b6 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -108,7 +108,6 @@ tr:
     reports:
       comment:
         none: Yok
-      delete: Sil
       id: ID
       mark_as_resolved: Giderildi olarak işaretle
       report: 'Şikayet #%{id}'
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 44f64b5c9..6fe46b4d9 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -100,7 +100,6 @@ uk:
     reports:
       comment:
         none: Немає
-      delete: Видалити
       id: ID
       mark_as_resolved: Відмітити як вирішену
       report: 'Скарга #%{id}'
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 78c72bd30..7ea491fd4 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -52,9 +52,7 @@ zh-CN:
     unfollow: 取消关注
   admin:
     account_moderation_notes:
-      account: 管理员
       create: 新建
-      created_at: 日期
       created_msg: 管理备忘建立成功!
       delete: 删除
       destroyed_msg: 管理备忘删除成功!
@@ -242,12 +240,8 @@ zh-CN:
       are_you_sure: 你确定吗?
       comment:
         none: 没有
-      delete: 删除
       id: ID
       mark_as_resolved: 标记为“已处理”
-      nsfw:
-        'false': 取消 NSFW 标记
-        'true': 添加 NSFW 标记
       report: '举报 #%{id}'
       report_contents: 内容
       reported_account: 举报用户
@@ -312,11 +306,8 @@ zh-CN:
         delete: 删除
         nsfw_off: 取消 NSFW 标记
         nsfw_on: 添加 NSFW 标记
-      execute: 执行
       failed_to_execute: 执行失败
       media:
-        hide: 隐藏媒体文件
-        show: 显示媒体文件
         title: 媒体文件
       no_media: 不含媒体文件
       title: 帐户嘟文
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index a27b0c04c..3f91b7191 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -53,9 +53,7 @@ zh-HK:
     unfollow: 取消關注
   admin:
     account_moderation_notes:
-      account: 管理員
       create: 新增
-      created_at: 日期
       created_msg: 管理記錄已新增
       delete: 刪除
       destroyed_msg: 管理記錄已被刪除
@@ -268,7 +266,6 @@ zh-HK:
       comment:
         none: 沒有
       created_at: 日期
-      delete: 刪除
       id: ID
       mark_as_resolved: 標示為「已處理」
       mark_as_unresolved: 標示為「未處理」
@@ -278,9 +275,6 @@ zh-HK:
         create_and_unresolve: 建立筆記並標示為「未處理」
         delete: 刪除
         placeholder: 記錄已執行的動作,或其他更新
-      nsfw:
-        'false': 取消 NSFW 標記
-        'true': 添加 NSFW 標記
       reopen: 重開舉報
       report: '舉報 #%{id}'
       report_contents: 舉報內容
@@ -355,11 +349,8 @@ zh-HK:
         delete: 刪除
         nsfw_off: 取消 NSFW 標記
         nsfw_on: 添加 NSFW 標記
-      execute: 執行
       failed_to_execute: 執行失敗
       media:
-        hide: 隱藏媒體檔案
-        show: 顯示媒體檔案
         title: 媒體檔案
       no_media: 不含媒體檔案
       title: 帳戶文章
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index f69d22d79..d8c0f89a9 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -80,7 +80,6 @@ zh-TW:
     reports:
       comment:
         none: 無
-      delete: 刪除
       id: ID
       mark_as_resolved: 標記為已解決
       report: '檢舉 #%{id}'
diff --git a/config/routes.rb b/config/routes.rb
index d959301e9..90f6ac594 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -135,7 +135,7 @@ Rails.application.routes.draw do
     end
 
     resources :reports, only: [:index, :show, :update] do
-      resources :reported_statuses, only: [:create, :update, :destroy]
+      resources :reported_statuses, only: [:create]
     end
 
     resources :report_notes, only: [:create, :destroy]
@@ -156,7 +156,7 @@ Rails.application.routes.draw do
       resource :silence, only: [:create, :destroy]
       resource :suspension, only: [:create, :destroy]
       resource :confirmation, only: [:create]
-      resources :statuses, only: [:index, :create, :update, :destroy]
+      resources :statuses, only: [:index, :create]
 
       resource :role do
         member do
diff --git a/spec/controllers/admin/reported_statuses_controller_spec.rb b/spec/controllers/admin/reported_statuses_controller_spec.rb
index 29957ed37..7adbf36b9 100644
--- a/spec/controllers/admin/reported_statuses_controller_spec.rb
+++ b/spec/controllers/admin/reported_statuses_controller_spec.rb
@@ -22,7 +22,7 @@ describe Admin::ReportedStatusesController do
     let(:sensitive) { true }
     let!(:media_attachment) { Fabricate(:media_attachment, status: status) }
 
-    context 'updates sensitive column to true' do
+    context 'when action is nsfw_on' do
       it 'updates sensitive column' do
         is_expected.to change {
           status.reload.sensitive
@@ -30,7 +30,7 @@ describe Admin::ReportedStatusesController do
       end
     end
 
-    context 'updates sensitive column to false' do
+    context 'when action is nsfw_off' do
       let(:action) { 'nsfw_off' }
       let(:sensitive) { false }
 
@@ -41,35 +41,13 @@ describe Admin::ReportedStatusesController do
       end
     end
 
-    it 'redirects to report page' do
-      subject.call
-      expect(response).to redirect_to(admin_report_path(report))
-    end
-  end
-
-  describe 'PATCH #update' do
-    subject do
-      -> { patch :update, params: { report_id: report, id: status, status: { sensitive: sensitive } } }
-    end
-
-    let(:status) { Fabricate(:status, sensitive: !sensitive) }
-    let(:sensitive) { true }
-
-    context 'updates sensitive column to true' do
-      it 'updates sensitive column' do
-        is_expected.to change {
-          status.reload.sensitive
-        }.from(false).to(true)
-      end
-    end
+    context 'when action is delete' do
+      let(:action) { 'delete' }
 
-    context 'updates sensitive column to false' do
-      let(:sensitive) { false }
-
-      it 'updates sensitive column' do
-        is_expected.to change {
-          status.reload.sensitive
-        }.from(true).to(false)
+      it 'removes a status' do
+        allow(RemovalWorker).to receive(:perform_async)
+        subject.call
+        expect(RemovalWorker).to have_received(:perform_async).with(status_ids.first)
       end
     end
 
@@ -78,15 +56,4 @@ describe Admin::ReportedStatusesController do
       expect(response).to redirect_to(admin_report_path(report))
     end
   end
-
-  describe 'DELETE #destroy' do
-    it 'removes a status' do
-      allow(RemovalWorker).to receive(:perform_async)
-
-      delete :destroy, params: { report_id: report, id: status }
-      expect(response).to have_http_status(200)
-      expect(RemovalWorker).
-        to have_received(:perform_async).with(status.id)
-    end
-  end
 end
diff --git a/spec/controllers/admin/statuses_controller_spec.rb b/spec/controllers/admin/statuses_controller_spec.rb
index cbaf39786..6afcc1442 100644
--- a/spec/controllers/admin/statuses_controller_spec.rb
+++ b/spec/controllers/admin/statuses_controller_spec.rb
@@ -34,13 +34,13 @@ describe Admin::StatusesController do
 
   describe 'POST #create' do
     subject do
-      -> { post :create, params: { account_id: account.id, form_status_batch: { action: action, status_ids: status_ids } } }
+      -> { post :create, params: { :account_id => account.id, action => '', :form_status_batch => { status_ids: status_ids } } }
     end
 
     let(:action) { 'nsfw_on' }
     let(:status_ids) { [media_attached_status.id] }
 
-    context 'updates sensitive column to true' do
+    context 'when action is nsfw_on' do
       it 'updates sensitive column' do
         is_expected.to change {
           media_attached_status.reload.sensitive
@@ -48,7 +48,7 @@ describe Admin::StatusesController do
       end
     end
 
-    context 'updates sensitive column to false' do
+    context 'when action is nsfw_off' do
       let(:action) { 'nsfw_off' }
       let(:sensitive) { false }
 
@@ -59,32 +59,13 @@ describe Admin::StatusesController do
       end
     end
 
-    it 'redirects to account statuses page' do
-      subject.call
-      expect(response).to redirect_to(admin_account_statuses_path(account.id))
-    end
-  end
-
-  describe 'PATCH #update' do
-    subject do
-      -> { patch :update, params: { account_id: account.id, id: media_attached_status, status: { sensitive: sensitive } } }
-    end
-
-    context 'updates sensitive column to true' do
-      it 'updates sensitive column' do
-        is_expected.to change {
-          media_attached_status.reload.sensitive
-        }.from(false).to(true)
-      end
-    end
-
-    context 'updates sensitive column to false' do
-      let(:sensitive) { false }
+    context 'when action is delete' do
+      let(:action) { 'delete' }
 
-      it 'updates sensitive column' do
-        is_expected.to change {
-          media_attached_status.reload.sensitive
-        }.from(true).to(false)
+      it 'removes a status' do
+        allow(RemovalWorker).to receive(:perform_async)
+        subject.call
+        expect(RemovalWorker).to have_received(:perform_async).with(status_ids.first)
       end
     end
 
@@ -93,15 +74,4 @@ describe Admin::StatusesController do
       expect(response).to redirect_to(admin_account_statuses_path(account.id))
     end
   end
-
-  describe 'DELETE #destroy' do
-    it 'removes a status' do
-      allow(RemovalWorker).to receive(:perform_async)
-
-      delete :destroy, params: { account_id: account.id, id: status }
-      expect(response).to have_http_status(200)
-      expect(RemovalWorker).
-        to have_received(:perform_async).with(status.id)
-    end
-  end
 end
-- 
cgit 


From 8c35d163a5c50eeb30220141036dac0c5dad295c Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi <ykzts@desire.sh>
Date: Sun, 6 May 2018 17:55:50 +0900
Subject: Port travis_retry for CI (#7379)

* Port travis_retry for CI

* Add license
---
 .circleci/config.yml |  4 ++--
 Gemfile              |  1 -
 Gemfile.lock         |  3 ---
 bin/retry            | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 spec/spec_helper.rb  |  8 --------
 5 files changed, 48 insertions(+), 14 deletions(-)
 create mode 100755 bin/retry

(limited to 'spec')

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 70d03f6b9..fc9c7e22b 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -90,7 +90,7 @@ aliases:
             command: ./bin/rails parallel:create parallel:load_schema parallel:prepare
         - run:
             name: Run Tests
-            command: bundle exec parallel_test ./spec/ --group-by filesize --type rspec
+            command: ./bin/retry bundle exec parallel_test ./spec/ --group-by filesize --type rspec
 
 jobs:
   install:
@@ -150,7 +150,7 @@ jobs:
       - image: circleci/node:8.11.1-stretch
     steps:
       - *attach_workspace
-      - run: yarn test:jest
+      - run: ./bin/retry yarn test:jest
 
   check-i18n:
     <<: *defaults
diff --git a/Gemfile b/Gemfile
index 98718f87d..2beac94d2 100644
--- a/Gemfile
+++ b/Gemfile
@@ -112,7 +112,6 @@ group :test do
   gem 'microformats', '~> 4.0'
   gem 'rails-controller-testing', '~> 1.0'
   gem 'rspec-sidekiq', '~> 3.0'
-  gem 'rspec-retry', '~> 0.5', require: false
   gem 'simplecov', '~> 0.16', require: false
   gem 'webmock', '~> 3.3'
   gem 'parallel_tests', '~> 2.21'
diff --git a/Gemfile.lock b/Gemfile.lock
index f4be9bf9c..6a579d53b 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -501,8 +501,6 @@ GEM
       rspec-expectations (~> 3.7.0)
       rspec-mocks (~> 3.7.0)
       rspec-support (~> 3.7.0)
-    rspec-retry (0.5.7)
-      rspec-core (> 3.3)
     rspec-sidekiq (3.0.3)
       rspec-core (~> 3.0, >= 3.0.0)
       sidekiq (>= 2.4.0)
@@ -726,7 +724,6 @@ DEPENDENCIES
   redis-rails (~> 5.0)
   rqrcode (~> 0.10)
   rspec-rails (~> 3.7)
-  rspec-retry (~> 0.5)
   rspec-sidekiq (~> 3.0)
   rubocop (~> 0.55)
   ruby-progressbar (~> 1.4)
diff --git a/bin/retry b/bin/retry
new file mode 100755
index 000000000..419ece62a
--- /dev/null
+++ b/bin/retry
@@ -0,0 +1,46 @@
+#!/bin/bash
+# https://github.com/travis-ci/travis-build/blob/cbe49ea239ab37b9b38b5b44d287b7ec7a108c16/lib/travis/build/templates/header.sh#L243-L260
+#
+# MIT LICENSE
+#
+# Copyright (c) 2016 Travis CI GmbH <contact@travis-ci.org>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+retry() {
+  local result=0
+  local count=1
+
+  while [ $count -le 3 ]; do
+    if [ $result -ne 0 ]; then
+      echo -e "\n${ANSI_RED}The command \"$@\" failed. Retrying, $count of 3.${ANSI_RESET}\n" >&2
+    fi
+
+    "$@" && { result=0 && break; } || result=$?
+    count=$(($count + 1))
+    sleep 1
+  done
+
+  if [ $count -gt 3 ]; then
+    echo -e "\n${ANSI_RED}The command \"$@\" failed 3 times.${ANSI_RESET}\n" >&2
+  fi
+
+  return $result
+}
+
+retry $@
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 903032937..a0466dd4b 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,4 +1,3 @@
-#require 'rspec/retry'
 require 'simplecov'
 
 GC.disable
@@ -12,9 +11,6 @@ end
 gc_counter = -1
 
 RSpec.configure do |config|
-  #config.verbose_retry = true
-  #config.display_try_failure_messages = true
-
   config.expect_with :rspec do |expectations|
     expectations.include_chain_clauses_in_custom_matcher_descriptions = true
   end
@@ -29,10 +25,6 @@ RSpec.configure do |config|
     end
   end
 
-  #config.around :each do |ex|
-  #  ex.run_with_retry retry: 3
-  #end
-
   config.before :suite do
     Chewy.strategy(:bypass)
   end
-- 
cgit 


From bd10a7e48076c913a652c347b0477496be8813fa Mon Sep 17 00:00:00 2001
From: Shuhei Kitagawa <shuheiktgw@users.noreply.github.com>
Date: Sun, 6 May 2018 17:59:03 +0900
Subject: Add resend confirmation for admin (#7378)

* Add confirmations_controller#resend

* Add tests for confirmations_controller#resend

* Add translations
---
 app/controllers/admin/confirmations_controller.rb  | 19 +++++++++++++
 app/views/admin/accounts/show.html.haml            | 10 +++++--
 config/locales/ar.yml                              |  6 +++++
 config/locales/ca.yml                              |  6 +++++
 config/locales/de.yml                              |  6 +++++
 config/locales/en.yml                              |  6 +++++
 config/locales/eo.yml                              |  6 +++++
 config/locales/es.yml                              |  6 +++++
 config/locales/fa.yml                              |  6 +++++
 config/locales/fi.yml                              |  6 +++++
 config/locales/fr.yml                              |  6 +++++
 config/locales/gl.yml                              |  6 +++++
 config/locales/he.yml                              |  6 +++++
 config/locales/hu.yml                              |  6 +++++
 config/locales/id.yml                              |  6 +++++
 config/locales/it.yml                              |  6 +++++
 config/locales/ja.yml                              |  6 +++++
 config/locales/ko.yml                              |  6 +++++
 config/locales/nl.yml                              |  6 +++++
 config/locales/no.yml                              |  6 +++++
 config/locales/oc.yml                              |  6 +++++
 config/locales/pl.yml                              |  6 +++++
 config/locales/pt-BR.yml                           |  6 +++++
 config/locales/pt.yml                              |  6 +++++
 config/locales/ru.yml                              |  6 +++++
 config/locales/sk.yml                              |  6 +++++
 config/locales/sr-Latn.yml                         |  6 +++++
 config/locales/sr.yml                              |  6 +++++
 config/locales/sv.yml                              |  6 +++++
 config/locales/th.yml                              |  6 +++++
 config/locales/tr.yml                              |  6 +++++
 config/locales/zh-CN.yml                           |  6 +++++
 config/locales/zh-HK.yml                           |  6 +++++
 config/routes.rb                                   |  9 +++++--
 .../admin/confirmations_controller_spec.rb         | 31 ++++++++++++++++++++++
 35 files changed, 251 insertions(+), 4 deletions(-)

(limited to 'spec')

diff --git a/app/controllers/admin/confirmations_controller.rb b/app/controllers/admin/confirmations_controller.rb
index 34dfb458e..8d3477e66 100644
--- a/app/controllers/admin/confirmations_controller.rb
+++ b/app/controllers/admin/confirmations_controller.rb
@@ -3,6 +3,7 @@
 module Admin
   class ConfirmationsController < BaseController
     before_action :set_user
+    before_action :check_confirmation, only: [:resend]
 
     def create
       authorize @user, :confirm?
@@ -11,10 +12,28 @@ module Admin
       redirect_to admin_accounts_path
     end
 
+    def resend
+      authorize @user, :confirm?
+
+      @user.resend_confirmation_instructions
+
+      log_action :confirm, @user
+
+      flash[:notice] = I18n.t('admin.accounts.resend_confirmation.success')
+      redirect_to admin_accounts_path
+    end
+
     private
 
     def set_user
       @user = Account.find(params[:account_id]).user || raise(ActiveRecord::RecordNotFound)
     end
+
+    def check_confirmation
+      if @user.confirmed?
+        flash[:error] = I18n.t('admin.accounts.resend_confirmation.already_confirmed')
+        redirect_to admin_accounts_path
+      end
+    end
   end
 end
diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml
index 2e6de1864..ed8190af5 100644
--- a/app/views/admin/accounts/show.html.haml
+++ b/app/views/admin/accounts/show.html.haml
@@ -36,13 +36,19 @@
           %th= t('admin.accounts.email')
           %td
             = @account.user_email
-            - if @account.user_confirmed?
-              = fa_icon('check')
             = table_link_to 'edit', t('admin.accounts.change_email.label'), admin_account_change_email_path(@account.id) if can?(:change_email, @account.user)
         - if @account.user_unconfirmed_email.present?
           %th= t('admin.accounts.unconfirmed_email')
           %td
             = @account.user_unconfirmed_email
+        %tr
+          %th= t('admin.accounts.email_status')
+          %td
+            - if @account.user&.confirmed?
+              = t('admin.accounts.confirmed')
+            - else
+              = t('admin.accounts.confirming')
+              = table_link_to 'refresh', t('admin.accounts.resend_confirmation.send'), resend_admin_account_confirmation_path(@account.id), method: :post if can?(:confirm, @account.user)
         %tr
           %th= t('admin.accounts.login_status')
           %td
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index a5179ae14..eb0127eb5 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -61,6 +61,7 @@ ar:
       by_domain: النطاق
       confirm: تأكيد
       confirmed: مؤكَّد
+      confirming: التأكد
       demote: إنزال الرُتبة الوظيفية
       disable: تعطيل
       disable_two_factor_authentication: تعطيل 2FA
@@ -69,6 +70,7 @@ ar:
       domain: النطاق
       edit: تعديل
       email: البريد الإلكتروني
+      email_status: حالة البريد الإلكتروني
       enable: تفعيل
       enabled: مفعَّل
       feed_url: عنوان رابط التغذية
@@ -106,6 +108,10 @@ ar:
       public: عمومي
       push_subscription_expires: انتهاء الاشتراك ”PuSH“
       redownload: تحديث الصورة الرمزية
+      resend_confirmation:
+        already_confirmed: هذا المستخدم مؤكد بالفعل
+        send: أعد إرسال رسالة البريد الالكتروني الخاصة بالتأكيد
+        success: تم إرسال رسالة التأكيد بنجاح!
       reset: إعادة التعيين
       reset_password: إعادة ضبط كلمة السر
       resubscribe: اشترك مرة أخرى
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index a8c75c32d..bdc3f7484 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -70,6 +70,7 @@ ca:
         title: Canviar adreça de correu de %{username}
       confirm: Confirma
       confirmed: Confirmat
+      confirming: Confirmando
       demote: Degrada
       disable: Inhabilita
       disable_two_factor_authentication: Desactiva 2FA
@@ -78,6 +79,7 @@ ca:
       domain: Domini
       edit: Edita
       email: Correu electrònic
+      email_status: Estado del correo electrónico
       enable: Habilita
       enabled: Habilitat
       feed_url: URL del canal
@@ -116,6 +118,10 @@ ca:
       push_subscription_expires: La subscripció PuSH expira
       redownload: Actualitza l'avatar
       remove_avatar: Eliminar avatar
+      resend_confirmation:
+        already_confirmed: Este usuario ya está confirmado
+        send: Reenviar el correo electrónico de confirmación
+        success: "¡Correo electrónico de confirmación enviado con éxito!"
       reset: Reinicialitza
       reset_password: Restableix la contrasenya
       resubscribe: Torna a subscriure
diff --git a/config/locales/de.yml b/config/locales/de.yml
index aa4295c89..05d7e01b3 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -70,6 +70,7 @@ de:
         title: E-Mail-Adresse für %{username} ändern
       confirm: Bestätigen
       confirmed: Bestätigt
+      confirming: Bestätigung
       demote: Degradieren
       disable: Ausschalten
       disable_two_factor_authentication: 2FA abschalten
@@ -78,6 +79,7 @@ de:
       domain: Domain
       edit: Bearbeiten
       email: E-Mail
+      email_status: E-Mail-Status
       enable: Freischalten
       enabled: Freigegeben
       feed_url: Feed-URL
@@ -116,6 +118,10 @@ de:
       push_subscription_expires: PuSH-Abonnement läuft aus
       redownload: Avatar neu laden
       remove_avatar: Profilbild entfernen
+      resend_confirmation:
+        already_confirmed: Dieser Benutzer wurde bereits bestätigt
+        send: Bestätigungsmail erneut senden
+        success: Bestätigungs-E-Mail erfolgreich gesendet!
       reset: Zurücksetzen
       reset_password: Passwort zurücksetzen
       resubscribe: Wieder abonnieren
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 4f967f9ac..e18354eac 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -70,6 +70,7 @@ en:
         title: Change Email for %{username}
       confirm: Confirm
       confirmed: Confirmed
+      confirming: Confirming
       demote: Demote
       disable: Disable
       disable_two_factor_authentication: Disable 2FA
@@ -78,6 +79,7 @@ en:
       domain: Domain
       edit: Edit
       email: E-mail
+      email_status: E-mail Status
       enable: Enable
       enabled: Enabled
       feed_url: Feed URL
@@ -116,6 +118,10 @@ en:
       push_subscription_expires: PuSH subscription expires
       redownload: Refresh avatar
       remove_avatar: Remove avatar
+      resend_confirmation:
+        already_confirmed: This user is already confirmed
+        send: Resend confirmation email
+        success: Confirmation email successfully sent!
       reset: Reset
       reset_password: Reset password
       resubscribe: Resubscribe
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 9c44d0e62..47d591993 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -61,6 +61,7 @@ eo:
       by_domain: Domajno
       confirm: Konfirmi
       confirmed: Konfirmita
+      confirming: Konfirmante
       demote: Degradi
       disable: Malebligi
       disable_two_factor_authentication: Malebligi 2FA
@@ -69,6 +70,7 @@ eo:
       domain: Domajno
       edit: Redakti
       email: Retpoŝto
+      email_status: Retpoŝto Stato
       enable: Ebligi
       enabled: Ebligita
       feed_url: URL de la fluo
@@ -106,6 +108,10 @@ eo:
       public: Publika
       push_subscription_expires: Eksvalidiĝo de la abono al PuSH
       redownload: Aktualigi profilbildon
+      resend_confirmation:
+        already_confirmed: Ĉi tiu uzanto jam estas konfirmita
+        send: Esend konfirmi retpoŝton
+        success: Konfirma retpoŝto sukcese sendis
       reset: Restarigi
       reset_password: Restarigi pasvorton
       resubscribe: Reaboni
diff --git a/config/locales/es.yml b/config/locales/es.yml
index be7dcd81e..11bee3239 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -70,6 +70,7 @@ es:
         title: Cambiar el correo electrónico de %{username}
       confirm: Confirmar
       confirmed: Confirmado
+      confirming: Confirmando
       demote: Degradar
       disable: Deshabilitar
       disable_two_factor_authentication: Desactivar autenticación de dos factores
@@ -78,6 +79,7 @@ es:
       domain: Dominio
       edit: Editar
       email: E-mail
+      email_status: E-mail Status
       enable: Habilitar
       enabled: Habilitada
       feed_url: URL de notificaciones
@@ -116,6 +118,10 @@ es:
       push_subscription_expires: Expiración de la suscripción PuSH
       redownload: Refrescar avatar
       remove_avatar: Eliminar el avatar
+      resend_confirmation:
+        already_confirmed: Este usuario ya está confirmado
+        send: Reenviar el correo electrónico de confirmación
+        success: "¡Correo electrónico de confirmación enviado con éxito"
       reset: Reiniciar
       reset_password: Reiniciar contraseña
       resubscribe: Re-suscribir
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index 3aa40f0b3..5255e0e38 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -61,6 +61,7 @@ fa:
       by_domain: دامین
       confirm: تأیید
       confirmed: تأیید شد
+      confirming: تأیید
       demote: تنزل‌دادن
       disable: غیرفعال
       disable_two_factor_authentication: غیرفعال‌سازی ورود دومرحله‌ای
@@ -69,6 +70,7 @@ fa:
       domain: دامین
       edit: ویرایش
       email: ایمیل
+      email_status: وضعیت ایمیل
       enable: فعال
       enabled: فعال
       feed_url: نشانی فید
@@ -106,6 +108,10 @@ fa:
       public: عمومی
       push_subscription_expires: عضویت از راه PuSH منقضی شد
       redownload: به‌روزرسانی تصویر نمایه
+      resend_confirmation:
+        already_confirmed: این کاربر قبلا تایید شده است
+        send: ایمیل تایید را دوباره بفرستید
+        success: ایمیل تایید با موفقیت ارسال شد
       reset: بازنشانی
       reset_password: بازنشانی رمز
       resubscribe: اشتراک دوباره
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index b313c8723..fca58cc0f 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -61,6 +61,7 @@ fi:
       by_domain: Verkko-osoite
       confirm: Vahvista
       confirmed: Vahvistettu
+      confirming: Vahvistavat
       demote: Alenna
       disable: Poista käytöstä
       disable_two_factor_authentication: Poista 2FA käytöstä
@@ -69,6 +70,7 @@ fi:
       domain: Verkko-osoite
       edit: Muokkaa
       email: Sähköposti
+      email_status: Sähköpostin tila
       enable: Ota käyttöön
       enabled: Käytössä
       feed_url: Syötteen URL
@@ -106,6 +108,10 @@ fi:
       public: Julkinen
       push_subscription_expires: PuSH-tilaus vanhenee
       redownload: Päivitä profiilikuva
+      resend_confirmation:
+        already_confirmed: Tämä käyttäjä on jo vahvistettu
+        send: Lähetä varmistusviesti uudelleen
+        success: Vahvistusviesti lähetettiin onnistuneesti
       reset: Palauta
       reset_password: Palauta salasana
       resubscribe: Tilaa uudelleen
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 3b543fdb7..e7142f3fd 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -70,6 +70,7 @@ fr:
         title: Modifier le courriel pour %{username}
       confirm: Confirmer
       confirmed: Confirmé
+      confirming: Confirmant
       demote: Rétrograder
       disable: Désactiver
       disable_two_factor_authentication: Désactiver l’authentification à deux facteurs
@@ -78,6 +79,7 @@ fr:
       domain: Domaine
       edit: Éditer
       email: Courriel
+      email_status: État de la messagerie
       enable: Activer
       enabled: Activé
       feed_url: URL du flux
@@ -116,6 +118,10 @@ fr:
       push_subscription_expires: Expiration de l’abonnement PuSH
       redownload: Rafraîchir les avatars
       remove_avatar: Supprimer l'avatar
+      resend_confirmation:
+        already_confirmed: Cet utilisateur est déjà confirmé
+        send: Renvoyer un courriel de confirmation
+        success: Email de confirmation envoyé avec succès !
       reset: Réinitialiser
       reset_password: Réinitialiser le mot de passe
       resubscribe: Se réabonner
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index eec1b4e1e..e00c4b433 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -70,6 +70,7 @@ gl:
         title: Cambiar o correo-e de %{username}
       confirm: Confirmar
       confirmed: Confirmado
+      confirming: Confirmar
       demote: Degradar
       disable: Deshabilitar
       disable_two_factor_authentication: Deshabilitar 2FA
@@ -78,6 +79,7 @@ gl:
       domain: Dominio
       edit: Editar
       email: E-mail
+      email_status: Estado del correo electrónico
       enable: Habilitar
       enabled: Habilitado
       feed_url: URL fonte
@@ -116,6 +118,10 @@ gl:
       push_subscription_expires: A suscrición PuSH caduca
       redownload: Actualizar avatar
       remove_avatar: Eliminar avatar
+      resend_confirmation:
+        already_confirmed: Este usuario ya está confirmado
+        send: Reenviar el correo electrónico de confirmación
+        success: "¡Correo electrónico de confirmación enviado con éxito!"
       reset: Restablecer
       reset_password: Restablecer contrasinal
       resubscribe: Voltar a suscribir
diff --git a/config/locales/he.yml b/config/locales/he.yml
index d66d9f034..c127db385 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -61,6 +61,7 @@ he:
       by_domain: שם מתחם
       confirm: אישור
       confirmed: אושר
+      confirming: המאשר
       demote: הורדה בדרגה
       disable: לחסום
       disable_two_factor_authentication: ביטול הזדהות דו-שלבית
@@ -69,6 +70,7 @@ he:
       domain: תחום
       edit: עריכה
       email: דוא"ל
+      email_status: סטטוס דוא"ל
       enable: לאפשר
       enabled: מאופשר
       feed_url: כתובת פיד
@@ -106,6 +108,10 @@ he:
       public: פומבי
       push_subscription_expires: הרשמה להודעות בדחיפה פגה
       redownload: לקריאה מחדש של האווטאר
+      resend_confirmation:
+        already_confirmed: משתמש זה כבר אושר
+        send: שלח מחדש דוא"ל אימות
+        success: הודעת האימייל נשלחה בהצלחה!
       reset: איפוס
       reset_password: אתחול סיסמא
       resubscribe: להרשם מחדש
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 422c05955..0cd0021c1 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -61,6 +61,7 @@ hu:
       by_domain: Domain
       confirm: Megerősítés
       confirmed: Megerősítve
+      confirming: Megerősítve
       demote: Lefokozás
       disable: Kikapcsolás
       disable_two_factor_authentication: Kétlépcsős azonosítás kikapcsolása
@@ -69,6 +70,7 @@ hu:
       domain: Domain
       edit: Szerkesztés
       email: E-mail
+      email_status: E-mail állapot
       enable: Engedélyezés
       enabled: Engedélyezve
       feed_url: Hírcsatorna URL
@@ -106,6 +108,10 @@ hu:
       public: Nyilvános
       push_subscription_expires: A PuSH feliratkozás elévül
       redownload: Profilkép frissítése
+      resend_confirmation:
+        already_confirmed: Ezt a felhasználót már megerősítették
+        send: Küldd újra a megerősítő email-t
+        success: A megerősítő e-mail sikeresen elküldve!
       reset: Visszaállítás
       reset_password: Jelszó visszaállítása
       resubscribe: Feliratkozás ismét
diff --git a/config/locales/id.yml b/config/locales/id.yml
index 0476e2848..4fb75f2b0 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -29,10 +29,12 @@ id:
       are_you_sure: Anda yakin?
       confirm: Konfirmasi
       confirmed: Dikonfirmasi
+      confirming: Mengkonfirmasi
       display_name: Nama
       domain: Domain
       edit: Ubah
       email: E-mail
+      email_status: Status Email
       feed_url: URL Feed
       followers: Pengikut
       follows: Mengikut
@@ -58,6 +60,10 @@ id:
       profile_url: URL profil
       public: Publik
       push_subscription_expires: Langganan PuSH telah kadaluarsa
+      resend_confirmation:
+        already_confirmed: Pengguna ini sudah dikonfirmasi
+        send: Kirim ulang email konfirmasi
+        success: Email konfirmasi berhasil dikirim!
       reset_password: Reset kata sandi
       salmon_url: URL Salmon
       show:
diff --git a/config/locales/it.yml b/config/locales/it.yml
index c1ac176c4..eafe6b2a1 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -66,6 +66,7 @@ it:
         title: Cambia email per %{username}
       confirm: Conferma
       confirmed: Confermato
+      confirming: Confermando
       demote: Declassa
       disable: Disabilita
       disable_two_factor_authentication: Disabilita 2FA
@@ -74,6 +75,7 @@ it:
       domain: Dominio
       edit: Modifica
       email: Email
+      email_status: Stato email
       enable: Abilita
       enabled: Abilitato
       feed_url: URL Feed
@@ -111,6 +113,10 @@ it:
       public: Pubblico
       redownload: Aggiorna avatar
       remove_avatar: Rimuovi avatar
+      resend_confirmation:
+        already_confirmed: Questo utente è già confermato
+        send: Reinvia email di conferma
+        success: Email di conferma inviata con successo!
       reset: Reimposta
       reset_password: Reimposta password
       resubscribe: Riscriversi
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index bc48613b9..c7025fc18 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -70,6 +70,7 @@ ja:
         title: "%{username} さんのメールアドレスを変更"
       confirm: 確認
       confirmed: 確認済み
+      confirming: 確認中
       demote: 降格
       disable: 無効化
       disable_two_factor_authentication: 二段階認証を無効にする
@@ -78,6 +79,7 @@ ja:
       domain: ドメイン
       edit: 編集
       email: メールアドレス
+      email_status: メールアドレスの状態
       enable: 有効化
       enabled: 有効
       feed_url: フィードURL
@@ -116,6 +118,10 @@ ja:
       push_subscription_expires: PuSH購読期限
       redownload: アバターの更新
       remove_avatar: アイコンを削除
+      resend_confirmation:
+        already_confirmed: メールアドレスは確認済みです。
+        send: 確認メールを再送
+        success: 確認メールを再送信しました!
       reset: リセット
       reset_password: パスワード再設定
       resubscribe: 再講読
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index bd6717d49..92e99ce50 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -70,6 +70,7 @@ ko:
         title: "%{username}의 이메일 주소 변경"
       confirm: 확인
       confirmed: 확인됨
+      confirming: 확인 중
       demote: 모더레이터 강등
       disable: 비활성화
       disable_two_factor_authentication: 2단계 인증을 비활성화
@@ -78,6 +79,7 @@ ko:
       domain: 도메인
       edit: 편집
       email: E-mail
+      email_status: 이메일 상태
       enable: 활성화
       enabled: 활성화된
       feed_url: 피드 URL
@@ -116,6 +118,10 @@ ko:
       push_subscription_expires: PuSH 구독 기간 만료
       redownload: 아바타 업데이트
       remove_avatar: 아바타 지우기
+      resend_confirmation:
+        already_confirmed: 이 사용자는 이미 확인되었습니다.
+        send: 다시 확인 이메일
+        success: 확인 이메일이 전송되었습니다.
       reset: 초기화
       reset_password: 비밀번호 초기화
       resubscribe: 다시 구독
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 00f21babd..6ca81b375 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -70,6 +70,7 @@ nl:
         title: E-mailadres veranderen voor %{username}
       confirm: Bevestigen
       confirmed: Bevestigd
+      confirming: Bevestiging
       demote: Degraderen
       disable: Uitschakelen
       disable_two_factor_authentication: 2FA uitschakelen
@@ -78,6 +79,7 @@ nl:
       domain: Domein
       edit: Bewerken
       email: E-mail
+      email_status: E-mail Status
       enable: Inschakelen
       enabled: Ingeschakeld
       feed_url: Feed-URL
@@ -116,6 +118,10 @@ nl:
       push_subscription_expires: PuSH-abonnement verloopt op
       redownload: Avatar vernieuwen
       remove_avatar: Avatar verwijderen
+      resend_confirmation:
+        already_confirmed: Deze gebruiker is al bevestigd
+        send: Verzend bevestigingsmail opnieuw
+        success: Bevestigingsmail succesvol verzonden!
       reset: Opnieuw
       reset_password: Wachtwoord opnieuw instellen
       resubscribe: Opnieuw abonneren
diff --git a/config/locales/no.yml b/config/locales/no.yml
index 6ce2c0f01..837042f85 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -61,6 +61,7 @@
       by_domain: Domene
       confirm: Bekreft
       confirmed: Bekreftet
+      confirming: Bekrefte
       demote: Degrader
       disable: Deaktiver
       disable_two_factor_authentication: Skru av 2FA
@@ -69,6 +70,7 @@
       domain: Domene
       edit: Redigér
       email: E-post
+      email_status: E-poststatus
       enable: Aktiver
       enabled: Aktivert
       feed_url: Feed-URL
@@ -106,6 +108,10 @@
       public: Offentlig
       push_subscription_expires: PuSH-abonnent utløper
       redownload: Oppdater avatar
+      resend_confirmation:
+        already_confirmed: Denne brukeren er allerede bekreftet
+        send: Send bekreftelses-epost på nytt
+        success: Bekreftelses e-post er vellykket sendt!
       reset: Tilbakestill
       reset_password: Nullstill passord
       resubscribe: Abonner på nytt
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index c11fe614b..e61f7ebd0 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -70,6 +70,7 @@ oc:
         title: Cambiar l’adreça a %{username}
       confirm: Confirmar
       confirmed: Confirmat
+      confirming: Confirmando
       demote: Retrogradar
       disable: Desactivar
       disable_two_factor_authentication: Desactivar 2FA
@@ -78,6 +79,7 @@ oc:
       domain: Domeni
       edit: Modificar
       email: Corrièl
+      email_status: Estado del correo electrónico
       enable: Activar
       enabled: Activat
       feed_url: Flux URL
@@ -116,6 +118,10 @@ oc:
       push_subscription_expires: Fin de l’abonament PuSH
       redownload: Actualizar los avatars
       remove_avatar: Supriir l’avatar
+      resend_confirmation:
+        already_confirmed: Este usuario ya está confirmado
+        send: Reenviar el correo electrónico de confirmación
+        success: "¡Correo electrónico de confirmación enviado con éxito!"
       reset: Reïnicializar
       reset_password: Reïnicializar lo senhal
       resubscribe: Se tornar abonar
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index bd38aa6f7..1fbe0d5c8 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -70,6 +70,7 @@ pl:
         title: Zmień adres e-mail dla %{username}
       confirm: Potwierdź
       confirmed: Potwierdzono
+      confirming: Potwierdzam
       demote: Degraduj
       disable: Dezaktywuj
       disable_two_factor_authentication: Wyłącz uwierzytelnianie dwuetapowe
@@ -78,6 +79,7 @@ pl:
       domain: Domena
       edit: Edytuj
       email: Adres e-mail
+      email_status: Status e-maila
       enable: Aktywuj
       enabled: Aktywowano
       feed_url: Adres kanału
@@ -116,6 +118,10 @@ pl:
       push_subscription_expires: Subskrypcja PuSH wygasa
       redownload: Odśwież awatar
       remove_avatar: Usun awatar
+      resend_confirmation:
+        already_confirmed: Ten użytkownik jest już potwierdzony
+        send: Wyślij ponownie email potwierdzający
+        success: E-mail z potwierdzeniem został wysłany!
       reset: Resetuj
       reset_password: Resetuj hasło
       resubscribe: Ponów subskrypcję
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 862833d87..37abeffd9 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -70,6 +70,7 @@ pt-BR:
         title: Mudar e-mail para %{username}
       confirm: Confirmar
       confirmed: Confirmado
+      confirming: Confirmando
       demote: Rebaixar
       disable: Desativar
       disable_two_factor_authentication: Desativar 2FA
@@ -78,6 +79,7 @@ pt-BR:
       domain: Domínio
       edit: Editar
       email: E-mail
+      email_status: Estado del correo electrónico
       enable: Ativar
       enabled: Ativado
       feed_url: URL do feed
@@ -116,6 +118,10 @@ pt-BR:
       push_subscription_expires: Inscrição PuSH expira
       redownload: Atualizar avatar
       remove_avatar: Remover avatar
+      resend_confirmation:
+        already_confirmed: Este usuario ya está confirmado
+        send: Reenviar el correo electrónico de confirmación
+        success: "¡Correo electrónico de confirmación enviado con éxito!"
       reset: Anular
       reset_password: Modificar senha
       resubscribe: Reinscrever-se
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index 62a7ef0ec..7c10124ff 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -61,6 +61,7 @@ pt:
       by_domain: Domínio
       confirm: Confirme
       confirmed: Confirmado
+      confirming: Confirmer
       demote: Rebaixar
       disable: Desativar
       disable_two_factor_authentication: Desativar 2FA
@@ -69,6 +70,7 @@ pt:
       domain: Domínio
       edit: Editar
       email: E-mail
+      email_status: État de la messagerie
       enable: Ativar
       enabled: Ativado
       feed_url: URL do Feed
@@ -106,6 +108,10 @@ pt:
       public: Público
       push_subscription_expires: A Inscrição PuSH expira
       redownload: Atualizar avatar
+      resend_confirmation:
+        already_confirmed: Cet utilisateur est déjà confirmé
+        send: Renvoyer un courriel de confirmation
+        success: Email de confirmation envoyé avec succès!
       reset: Restaurar
       reset_password: Reset palavra-passe
       resubscribe: Reinscrever
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 603e1f3ca..99825a765 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -61,6 +61,7 @@ ru:
       by_domain: Домен
       confirm: Подтвердить
       confirmed: Подтверждено
+      confirming: подтверждающий
       demote: Разжаловать
       disable: Отключить
       disable_two_factor_authentication: Отключить 2FA
@@ -69,6 +70,7 @@ ru:
       domain: Домен
       edit: Изменить
       email: E-mail
+      email_status: Статус электронной почты
       enable: Включить
       enabled: Включен
       feed_url: URL фида
@@ -106,6 +108,10 @@ ru:
       public: Публичный
       push_subscription_expires: Подписка PuSH истекает
       redownload: Обновить аватар
+      resend_confirmation:
+        already_confirmed: Этот пользователь уже подтвержден
+        send: Повторно отправить подтверждение по электронной почте
+        success: Письмо с подтверждением успешно отправлено!
       reset: Сбросить
       reset_password: Сбросить пароль
       resubscribe: Переподписаться
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 7fb097f03..ef756b474 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -70,6 +70,7 @@ sk:
         title: Zmeň email pre %{username}
       confirm: Potvrdiť
       confirmed: Potvrdený
+      confirming: Potvrdzujúci
       demote: Degradovať
       disable: Zablokovať
       disable_two_factor_authentication: Zakázať 2FA
@@ -78,6 +79,7 @@ sk:
       domain: Doména
       edit: Upraviť
       email: Email
+      email_status: Stav Email
       enable: Povoliť
       enabled: Povolený
       feed_url: URL časovej osi
@@ -116,6 +118,10 @@ sk:
       push_subscription_expires: PuSH odoberanie expiruje
       redownload: Obnoviť avatar
       remove_avatar: Odstrániť avatár
+      resend_confirmation:
+        already_confirmed: Tento používateľ už bol potvrdený
+        send: Znova odoslať potvrdzovací e-mail
+        success: Potvrdený e-mail bol úspešne odoslaný!
       reset: Reset
       reset_password: Obnoviť heslo
       resubscribe: Znovu odoberať
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index dba952917..0c7756c53 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -61,6 +61,7 @@ sr-Latn:
       by_domain: Domen
       confirm: Potvrdi
       confirmed: Potvrđeno
+      confirming: Potvrđujući
       demote: Ražaluj
       disable: Isključi
       disable_two_factor_authentication: Isključi 2FA
@@ -69,6 +70,7 @@ sr-Latn:
       domain: Domen
       edit: Izmeni
       email: E-pošta
+      email_status: Status e-pošte
       enable: Uključi
       enabled: Uključeno
       feed_url: Adresa dovoda
@@ -106,6 +108,10 @@ sr-Latn:
       public: Javno
       push_subscription_expires: PuSH subscription expires
       redownload: Osveži avatar
+      resend_confirmation:
+        already_confirmed: Ovaj korisnik je već potvrđen
+        send: Ponovo pošaljite e-poruku za potvrdu
+        success: E-mail potvrde je uspešno poslat!
       reset: Resetuj
       reset_password: Resetuj lozinku
       resubscribe: Ponovo se pretplati
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 74abf0323..1cb87ff30 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -61,6 +61,7 @@ sr:
       by_domain: Домен
       confirm: Потврди
       confirmed: Потврђено
+      confirming: Потврдување
       demote: Ражалуј
       disable: Искључи
       disable_two_factor_authentication: Искључи 2FA
@@ -69,6 +70,7 @@ sr:
       domain: Домен
       edit: Измени
       email: Е-пошта
+      email_status: Е-пошта статус
       enable: Укључи
       enabled: Укључено
       feed_url: Адреса довода
@@ -106,6 +108,10 @@ sr:
       public: Јавно
       push_subscription_expires: PuSH subscription expires
       redownload: Освежи аватар
+      resend_confirmation:
+        already_confirmed: Овој корисник е веќе потврден
+        send: Препрати го е-мајлот за потврда
+        success: Е-пошта за потврда успешно испратена!
       reset: Ресетуј
       reset_password: Ресетуј лозинку
       resubscribe: Поново се претплати
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index 9e0bb0856..1b0965655 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -70,6 +70,7 @@ sv:
         title: Byt E-postadress för %{username}
       confirm: Bekräfta
       confirmed: Bekräftad
+      confirming: Bekräftande
       demote: Degradera
       disable: inaktivera
       disable_two_factor_authentication: Inaktivera 2FA
@@ -78,6 +79,7 @@ sv:
       domain: Domän
       edit: Redigera
       email: E-post
+      email_status: E-poststatus
       enable: Aktivera
       enabled: Aktiverad
       feed_url: Flödes URL
@@ -116,6 +118,10 @@ sv:
       push_subscription_expires: PuSH-prenumerationen löper ut
       redownload: Uppdatera avatar
       remove_avatar: Ta bort avatar
+      resend_confirmation:
+        already_confirmed: Den här användaren är redan bekräftad
+        send: Skicka om e-postbekräftelse
+        success: Bekräftelsemeddelande skickas framgångsrikt!
       reset: Återställ
       reset_password: Återställ lösenord
       resubscribe: Starta en ny prenumeration
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 9d93115b0..6804dbd13 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -29,11 +29,13 @@ th:
       are_you_sure: แน่ใจนะ?
       confirm: ยืนยัน
       confirmed: ยึนยันแล้ว
+      confirming: ยืนยัน
       disable_two_factor_authentication: Disable 2FA
       display_name: ชื่อสำหรับดีสเพล
       domain: โดแมน
       edit: แก้ไข
       email: อีเมล์
+      email_status: สถานะอีเมล
       feed_url: Feed URL
       followers: ผู้ติดตาม
       follows: ติดตาม
@@ -59,6 +61,10 @@ th:
       profile_url: Profile URL
       public: สาธารณะ
       push_subscription_expires: PuSH subscription expires
+      resend_confirmation:
+        already_confirmed: ผู้ใช้รายนี้ได้รับการยืนยันแล้ว
+        send: ส่งอีเมลยืนยันอีกครั้ง
+        success: ยืนยันอีเมลเรียบร้อยแล้ว!
       reset_password: รีเซ็ตรหัสผ่าน
       salmon_url: Salmon URL
       show:
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 0d78216b6..8bafbface 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -29,10 +29,12 @@ tr:
       are_you_sure: Emin misiniz?
       confirm: Onayla
       confirmed: Onaylandı
+      confirming: Onaylama
       display_name: Görünen adınız
       domain: Sunucu
       edit: Düzenle
       email: E-posta
+      email_status: Email Durumu
       feed_url: Besleme linki
       followers: Takipçiler
       follows: Takip edilen
@@ -58,6 +60,10 @@ tr:
       profile_url: Profil linki
       public: Herkese açık
       push_subscription_expires: PuSH aboneliği dolumu
+      resend_confirmation:
+        already_confirmed: Bu kullanıcı zaten onaylandı
+        send: Doğrulama epostasını yeniden gönder
+        success: Onay e-postası başarıyla gönderildi!
       reset_password: Parolayı değiştir
       salmon_url: Salmon Linki
       show:
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 7ea491fd4..5eca9e6a5 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -61,6 +61,7 @@ zh-CN:
       by_domain: 域名
       confirm: 确认
       confirmed: 已确认
+      confirming: 确认
       demote: 降任
       disable: 停用
       disable_two_factor_authentication: 停用双重认证
@@ -69,6 +70,7 @@ zh-CN:
       domain: 域名
       edit: 编辑
       email: 电子邮件地址
+      email_status: 电子邮件状态
       enable: 启用
       enabled: 已启用
       feed_url: 订阅 URL
@@ -106,6 +108,10 @@ zh-CN:
       public: 公开页面
       push_subscription_expires: PuSH 订阅过期时间
       redownload: 刷新头像
+      resend_confirmation:
+        already_confirmed: 该用户已被确认
+        send: 重发确认邮件
+        success: 确认电子邮件成功发送!
       reset: 重置
       reset_password: 重置密码
       resubscribe: 重新订阅
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index 3f91b7191..c5d8c8696 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -70,6 +70,7 @@ zh-HK:
         title: 改變 %{username} 的電郵
       confirm: 確定
       confirmed: 已確定
+      confirming: 確定
       demote: 降任
       disable: 停用
       disable_two_factor_authentication: 停用雙重認證
@@ -78,6 +79,7 @@ zh-HK:
       domain: 域名
       edit: 編輯
       email: 電郵地址
+      email_status: 电子邮件状态
       enable: 啟用
       enabled: 已啟用
       feed_url: Feed URL
@@ -116,6 +118,10 @@ zh-HK:
       push_subscription_expires: PuSH 訂閱過期
       redownload: 更新頭像
       remove_avatar: 取消頭像
+      resend_confirmation:
+        already_confirmed: 该用户已被确认
+        send: 重发确认邮件
+        success: 确认电子邮件成功发送!
       reset: 重設
       reset_password: 重設密碼
       resubscribe: 重新訂閱
diff --git a/config/routes.rb b/config/routes.rb
index 90f6ac594..4c920cf74 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -155,8 +155,13 @@ Rails.application.routes.draw do
       resource :reset, only: [:create]
       resource :silence, only: [:create, :destroy]
       resource :suspension, only: [:create, :destroy]
-      resource :confirmation, only: [:create]
-      resources :statuses, only: [:index, :create]
+      resources :statuses, only: [:index, :create, :update, :destroy]
+
+      resource :confirmation, only: [:create] do
+        collection do
+          post :resend
+        end
+      end
 
       resource :role do
         member do
diff --git a/spec/controllers/admin/confirmations_controller_spec.rb b/spec/controllers/admin/confirmations_controller_spec.rb
index 7c8034964..eec2b2f5c 100644
--- a/spec/controllers/admin/confirmations_controller_spec.rb
+++ b/spec/controllers/admin/confirmations_controller_spec.rb
@@ -30,4 +30,35 @@ RSpec.describe Admin::ConfirmationsController, type: :controller do
       expect(response).to have_http_status(404)
     end
   end
+
+  describe 'POST #resernd' do
+    subject { post :resend, params: { account_id: account.id } }
+
+    let(:account) { Fabricate(:account) }
+    let!(:user) { Fabricate(:user, confirmed_at: confirmed_at, account: account) }
+
+    before do
+      allow(UserMailer).to receive(:confirmation_instructions) { double(:email, deliver_later: nil) }
+    end
+
+    context 'when email is not confirmed' do
+      let(:confirmed_at) { nil }
+
+      it 'resends confirmation mail' do
+        expect(subject).to redirect_to admin_accounts_path
+        expect(flash[:notice]).to eq I18n.t('admin.accounts.resend_confirmation.success')
+        expect(UserMailer).to have_received(:confirmation_instructions).once
+      end
+    end
+
+    context 'when email is confirmed' do
+      let(:confirmed_at) { Time.zone.now }
+
+      it 'does not resend confirmation mail' do
+        expect(subject).to redirect_to admin_accounts_path
+        expect(flash[:error]).to eq I18n.t('admin.accounts.resend_confirmation.already_confirmed')
+        expect(UserMailer).not_to have_received(:confirmation_instructions)
+      end
+    end
+  end
 end
-- 
cgit 


From 01dfd6dbc8905dfaa5ab81fb9b38e52079e5ed7f Mon Sep 17 00:00:00 2001
From: Surinna Curtis <ekiru.0@gmail.com>
Date: Tue, 8 May 2018 06:30:04 -0500
Subject: Take the first recognized actor_type. (#7410)

---
 app/services/activitypub/process_account_service.rb | 10 +++++++++-
 spec/services/resolve_account_service_spec.rb       |  1 +
 2 files changed, 10 insertions(+), 1 deletion(-)

(limited to 'spec')

diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb
index cc416b671..721c9c928 100644
--- a/app/services/activitypub/process_account_service.rb
+++ b/app/services/activitypub/process_account_service.rb
@@ -71,7 +71,7 @@ class ActivityPub::ProcessAccountService < BaseService
     @account.note                    = @json['summary'] || ''
     @account.locked                  = @json['manuallyApprovesFollowers'] || false
     @account.fields                  = property_values || {}
-    @account.actor_type              = @json['type']
+    @account.actor_type              = actor_type
   end
 
   def set_fetchable_attributes!
@@ -96,6 +96,14 @@ class ActivityPub::ProcessAccountService < BaseService
     ActivityPub::SynchronizeFeaturedCollectionWorker.perform_async(@account.id)
   end
 
+  def actor_type
+    if @json['type'].is_a?(Array)
+      @json['type'].find { |type| ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES.include?(type) }
+    else
+      @json['type']
+    end
+  end
+
   def image_url(key)
     value = first_of_value(@json[key])
 
diff --git a/spec/services/resolve_account_service_spec.rb b/spec/services/resolve_account_service_spec.rb
index f4c810f75..dd7561587 100644
--- a/spec/services/resolve_account_service_spec.rb
+++ b/spec/services/resolve_account_service_spec.rb
@@ -116,6 +116,7 @@ RSpec.describe ResolveAccountService, type: :service do
         expect(account.activitypub?).to eq true
         expect(account.domain).to eq 'ap.example.com'
         expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox'
+        expect(account.actor_type).to eq 'Person'
       end
     end
 
-- 
cgit 


From 35eff337d5482ac251e2f75031c5be2ab583e265 Mon Sep 17 00:00:00 2001
From: Shuhei Kitagawa <shuheiktgw@users.noreply.github.com>
Date: Wed, 9 May 2018 15:41:26 +0900
Subject: Add tests for admin/invites_controller (#7412)

---
 spec/controllers/admin/invites_controller_spec.rb | 43 +++++++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100644 spec/controllers/admin/invites_controller_spec.rb

(limited to 'spec')

diff --git a/spec/controllers/admin/invites_controller_spec.rb b/spec/controllers/admin/invites_controller_spec.rb
new file mode 100644
index 000000000..e7d995411
--- /dev/null
+++ b/spec/controllers/admin/invites_controller_spec.rb
@@ -0,0 +1,43 @@
+require 'rails_helper'
+
+describe Admin::InvitesController do
+  render_views
+
+  let(:user) { Fabricate(:user, admin: true) }
+
+  before do
+    sign_in user, scope: :user
+  end
+
+  describe 'GET #index' do
+    subject { get :index, params: { available: true } }
+
+    let!(:invite) { Fabricate(:invite) }
+
+    it 'renders index page' do
+      expect(subject).to render_template :index
+      expect(assigns(:invites)).to include invite
+    end
+  end
+
+  describe 'POST #create' do
+    subject { post :create, params: { invite: { max_uses: '10', expires_in: 1800 } } }
+
+    it 'succeeds to create a invite' do
+      expect{ subject }.to change { Invite.count }.by(1)
+      expect(subject).to redirect_to admin_invites_path
+      expect(Invite.last).to have_attributes(user_id: user.id, max_uses: 10)
+    end
+  end
+
+  describe 'DELETE #destroy' do
+    let!(:invite) { Fabricate(:invite, expires_at: nil) }
+
+    subject { delete :destroy, params: { id: invite.id } }
+
+    it 'expires invite' do
+      expect(subject).to redirect_to admin_invites_path
+      expect(invite.reload).to be_expired
+    end
+  end
+end
-- 
cgit 


From ce35d81db73367a016ad019aadefba0a5ecb0d2d Mon Sep 17 00:00:00 2001
From: Shuhei Kitagawa <shuheiktgw@users.noreply.github.com>
Date: Wed, 9 May 2018 15:41:46 +0900
Subject: Add tests for admin/roles_controller (#7421)

---
 spec/controllers/admin/roles_controller_spec.rb | 33 +++++++++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 spec/controllers/admin/roles_controller_spec.rb

(limited to 'spec')

diff --git a/spec/controllers/admin/roles_controller_spec.rb b/spec/controllers/admin/roles_controller_spec.rb
new file mode 100644
index 000000000..8e0de73cb
--- /dev/null
+++ b/spec/controllers/admin/roles_controller_spec.rb
@@ -0,0 +1,33 @@
+require 'rails_helper'
+
+describe Admin::RolesController do
+  render_views
+
+  let(:admin) { Fabricate(:user, admin: true) }
+
+  before do
+    sign_in admin, scope: :user
+  end
+
+  describe 'POST #promote' do
+    subject { post :promote, params: { account_id: user.account_id } }
+
+    let(:user) { Fabricate(:user, moderator: false, admin: false) }
+
+    it 'promotes user' do
+      expect(subject).to redirect_to admin_account_path(user.account_id)
+      expect(user.reload).to be_moderator
+    end
+  end
+
+  describe 'POST #demote' do
+    subject { post :demote, params: { account_id: user.account_id } }
+
+    let(:user) { Fabricate(:user, moderator: true, admin: false) }
+
+    it 'demotes user' do
+      expect(subject).to redirect_to admin_account_path(user.account_id)
+      expect(user.reload).not_to be_moderator
+    end
+  end
+end
-- 
cgit 


From ac788ad47e32a3cf84a46ac87f84f376185cdad4 Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi <ykzts@desire.sh>
Date: Wed, 9 May 2018 23:59:58 +0900
Subject: Disable simplecov on CircleCI (#7416)

* Disable simplecov on CircleCI

* Remove --format progress
---
 .circleci/config.yml |  1 +
 spec/spec_helper.rb  | 13 +++++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

(limited to 'spec')

diff --git a/.circleci/config.yml b/.circleci/config.yml
index fc9c7e22b..02b505457 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -11,6 +11,7 @@ aliases:
           RAILS_ENV: test
           PARALLEL_TEST_PROCESSORS: 4
           ALLOW_NOPAM: true
+          DISABLE_SIMPLECOV: true
     working_directory: ~/projects/mastodon/
 
   - &attach_workspace
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index a0466dd4b..0cd1f91d0 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,11 +1,12 @@
-require 'simplecov'
-
 GC.disable
 
-SimpleCov.start 'rails' do
-  add_group 'Services', 'app/services'
-  add_group 'Presenters', 'app/presenters'
-  add_group 'Validators', 'app/validators'
+if ENV['DISABLE_SIMPLECOV'] != 'true'
+  require 'simplecov'
+  SimpleCov.start 'rails' do
+    add_group 'Services', 'app/services'
+    add_group 'Presenters', 'app/presenters'
+    add_group 'Validators', 'app/validators'
+  end
 end
 
 gc_counter = -1
-- 
cgit