forked from treehouse/mastodon
Merge branch 'main' into glitch-soc/merge-upstream
Conflicts: - `app/views/admin/trends/links/index.html.haml`: Not really a conflict, upstream change textually too close to a glitch-soc change (removed `javascript_pack_tag` to accomodate for glitch-soc's theming system). Ported upstream changes. - `app/views/admin/trends/links/preview_card_providers/index.html.haml`: Not really a conflict, upstream change textually too close to a glitch-soc change (removed `javascript_pack_tag` to accomodate for glitch-soc's theming system). Ported upstream changes. - `app/views/admin/trends/statuses/index.html.haml`: Not really a conflict, upstream change textually too close to a glitch-soc change (removed `javascript_pack_tag` to accomodate for glitch-soc's theming system). Ported upstream changes. - `app/views/admin/trends/tags/index.html.haml`: Not really a conflict, upstream change textually too close to a glitch-soc change (removed `javascript_pack_tag` to accomodate for glitch-soc's theming system). Ported upstream changes.rebase/4.0.0rc2
commit
8743b1ea40
|
@ -10,9 +10,7 @@ class Api::V1::ReportsController < Api::BaseController
|
|||
@report = ReportService.new.call(
|
||||
current_account,
|
||||
reported_account,
|
||||
status_ids: reported_status_ids,
|
||||
comment: report_params[:comment],
|
||||
forward: report_params[:forward]
|
||||
report_params
|
||||
)
|
||||
|
||||
render json: @report, serializer: REST::ReportSerializer
|
||||
|
@ -20,14 +18,6 @@ class Api::V1::ReportsController < Api::BaseController
|
|||
|
||||
private
|
||||
|
||||
def reported_status_ids
|
||||
reported_account.statuses.with_discarded.find(status_ids).pluck(:id)
|
||||
end
|
||||
|
||||
def status_ids
|
||||
Array(report_params[:status_ids])
|
||||
end
|
||||
|
||||
def reported_account
|
||||
Account.find(report_params[:account_id])
|
||||
end
|
||||
|
|
|
@ -94,8 +94,9 @@ class Api::V1::StatusesController < Api::BaseController
|
|||
end
|
||||
|
||||
def set_thread
|
||||
@thread = status_params[:in_reply_to_id].blank? ? nil : Status.find(status_params[:in_reply_to_id])
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
@thread = Status.find(status_params[:in_reply_to_id]) if status_params[:in_reply_to_id].present?
|
||||
authorize(@thread, :show?) if @thread.present?
|
||||
rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError
|
||||
render json: { error: I18n.t('statuses.errors.in_reply_not_found') }, status: 404
|
||||
end
|
||||
|
||||
|
|
|
@ -904,6 +904,14 @@ a.name-tag,
|
|||
text-align: center;
|
||||
}
|
||||
|
||||
.applications-list__item {
|
||||
padding: 15px 0;
|
||||
background: $ui-base-color;
|
||||
border: 1px solid lighten($ui-base-color, 4%);
|
||||
border-radius: 4px;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.announcements-list {
|
||||
border: 1px solid lighten($ui-base-color, 4%);
|
||||
border-radius: 4px;
|
||||
|
|
|
@ -1069,6 +1069,7 @@ code {
|
|||
|
||||
&:last-child {
|
||||
border-bottom: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,10 +6,10 @@ class ReportService < BaseService
|
|||
def call(source_account, target_account, options = {})
|
||||
@source_account = source_account
|
||||
@target_account = target_account
|
||||
@status_ids = options.delete(:status_ids) || []
|
||||
@comment = options.delete(:comment) || ''
|
||||
@category = options.delete(:category) || 'other'
|
||||
@rule_ids = options.delete(:rule_ids)
|
||||
@status_ids = options.delete(:status_ids).presence || []
|
||||
@comment = options.delete(:comment).presence || ''
|
||||
@category = options.delete(:category).presence || 'other'
|
||||
@rule_ids = options.delete(:rule_ids).presence
|
||||
@options = options
|
||||
|
||||
raise ActiveRecord::RecordNotFound if @target_account.suspended?
|
||||
|
@ -26,7 +26,7 @@ class ReportService < BaseService
|
|||
def create_report!
|
||||
@report = @source_account.reports.create!(
|
||||
target_account: @target_account,
|
||||
status_ids: @status_ids,
|
||||
status_ids: reported_status_ids,
|
||||
comment: @comment,
|
||||
uri: @options[:uri],
|
||||
forwarded: forward?,
|
||||
|
@ -56,6 +56,10 @@ class ReportService < BaseService
|
|||
!@target_account.local? && ActiveModel::Type::Boolean.new.cast(@options[:forward])
|
||||
end
|
||||
|
||||
def reported_status_ids
|
||||
@target_account.statuses.with_discarded.find(Array(@status_ids)).pluck(:id)
|
||||
end
|
||||
|
||||
def payload
|
||||
Oj.dump(serialize_payload(@report, ActivityPub::FlagSerializer, account: some_local_account))
|
||||
end
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
- content_for :page_title do
|
||||
= t('admin.trends.links.title')
|
||||
|
||||
%p= t('admin.trends.links.description_html')
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
= form_tag admin_trends_links_path, method: 'GET', class: 'simple_form' do
|
||||
- Trends::PreviewCardFilter::KEYS.each do |key|
|
||||
= hidden_field_tag key, params[key] if params[key].present?
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
- content_for :page_title do
|
||||
= t('admin.trends.preview_card_providers.title')
|
||||
|
||||
%p= t('admin.trends.preview_card_providers.description_html')
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
.filters
|
||||
.filter-subset
|
||||
%strong= t('admin.tags.review')
|
||||
|
@ -14,7 +18,6 @@
|
|||
= fa_icon 'chevron-left fw'
|
||||
= t('admin.trends.links.title')
|
||||
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
= form_for(@form, url: batch_admin_trends_links_preview_card_providers_path) do |f|
|
||||
|
|
|
@ -22,6 +22,9 @@
|
|||
- if status.language.present?
|
||||
•
|
||||
= standard_locale_name(status.language)
|
||||
- if status.trendable? && !status.account.discoverable?
|
||||
•
|
||||
= t('admin.trends.statuses.not_discoverable')
|
||||
- if status.trendable? && (rank = Trends.statuses.rank(status.id))
|
||||
•
|
||||
%abbr{ title: t('admin.trends.tags.current_score', score: Trends.statuses.score(status.id)) }= t('admin.trends.tags.trending_rank', rank: rank + 1)
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
- content_for :page_title do
|
||||
= t('admin.trends.statuses.title')
|
||||
|
||||
%p= t('admin.trends.statuses.description_html')
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
= form_tag admin_trends_statuses_path, method: 'GET', class: 'simple_form' do
|
||||
- Trends::StatusFilter::KEYS.each do |key|
|
||||
= hidden_field_tag key, params[key] if params[key].present?
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
- content_for :page_title do
|
||||
= t('admin.trends.tags.title')
|
||||
|
||||
%p= t('admin.trends.tags.description_html')
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
.filters
|
||||
.filter-subset
|
||||
%strong= t('admin.tags.review')
|
||||
|
|
|
@ -5,9 +5,9 @@
|
|||
|
||||
%hr.spacer/
|
||||
|
||||
.announcements-list
|
||||
.applications-list
|
||||
- @applications.each do |application|
|
||||
.announcements-list__item
|
||||
.applications-list__item
|
||||
- if application.website.present?
|
||||
= link_to application.name, application.website, target: '_blank', rel: 'noopener noreferrer', class: 'announcements-list__item__title'
|
||||
- else
|
||||
|
|
|
@ -777,6 +777,7 @@ en:
|
|||
links:
|
||||
allow: Allow link
|
||||
allow_provider: Allow publisher
|
||||
description_html: These are links that are currently being shared a lot by accounts that your server sees posts from. It can help your users find out what's going on in the world. No links are displayed publicly until you approve the publisher. You can also allow or reject individual links.
|
||||
disallow: Disallow link
|
||||
disallow_provider: Disallow publisher
|
||||
shared_by_over_week:
|
||||
|
@ -788,14 +789,17 @@ en:
|
|||
pending_review: Pending review
|
||||
preview_card_providers:
|
||||
allowed: Links from this publisher can trend
|
||||
description_html: These are domains from which links are often shared on your server. Links will not trend publicly unless the domain of the link is approved. Your approval (or rejection) extends to subdomains.
|
||||
rejected: Links from this publisher won't trend
|
||||
title: Publishers
|
||||
rejected: Rejected
|
||||
statuses:
|
||||
allow: Allow post
|
||||
allow_account: Allow author
|
||||
description_html: These are posts that your server knows about that are currently being shared and favourited a lot at the moment. It can help your new and returning users to find more people to follow. No posts are displayed publicly until you approve the author, and the author allows their account to be suggested to others. You can also allow or reject individual posts.
|
||||
disallow: Disallow post
|
||||
disallow_account: Disallow author
|
||||
not_discoverable: Author has not opted-in to being discoverable
|
||||
shared_by:
|
||||
one: Shared or favourited one time
|
||||
other: Shared and favourited %{friendly_count} times
|
||||
|
@ -808,6 +812,7 @@ en:
|
|||
tag_servers_dimension: Top servers
|
||||
tag_servers_measure: different servers
|
||||
tag_uses_measure: total uses
|
||||
description_html: These are hashtags that are currently appearing in a lot of posts that your server sees. It can help your users find out what people are talking the most about at the moment. No hashtags are displayed publicly until you approve them.
|
||||
listable: Can be suggested
|
||||
not_listable: Won't be suggested
|
||||
not_trendable: Won't appear under trends
|
||||
|
|
|
@ -13,22 +13,64 @@ RSpec.describe Api::V1::ReportsController, type: :controller do
|
|||
end
|
||||
|
||||
describe 'POST #create' do
|
||||
let(:scopes) { 'write:reports' }
|
||||
let!(:status) { Fabricate(:status) }
|
||||
let!(:admin) { Fabricate(:user, admin: true) }
|
||||
|
||||
let(:scopes) { 'write:reports' }
|
||||
let(:status) { Fabricate(:status) }
|
||||
let(:target_account) { status.account }
|
||||
let(:category) { nil }
|
||||
let(:forward) { nil }
|
||||
let(:rule_ids){ nil }
|
||||
|
||||
before do
|
||||
allow(AdminMailer).to receive(:new_report).and_return(double('email', deliver_later: nil))
|
||||
post :create, params: { status_ids: [status.id], account_id: status.account.id, comment: 'reasons' }
|
||||
post :create, params: { status_ids: [status.id], account_id: target_account.id, comment: 'reasons', category: category, rule_ids: rule_ids, forward: forward }
|
||||
end
|
||||
|
||||
it 'returns http success' do
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'creates a report' do
|
||||
expect(status.reload.account.targeted_reports).not_to be_empty
|
||||
expect(response).to have_http_status(200)
|
||||
expect(target_account.targeted_reports).to_not be_empty
|
||||
end
|
||||
|
||||
it 'saves comment' do
|
||||
expect(target_account.targeted_reports.first.comment).to eq 'reasons'
|
||||
end
|
||||
|
||||
it 'sends e-mails to admins' do
|
||||
expect(AdminMailer).to have_received(:new_report).with(admin.account, Report)
|
||||
end
|
||||
|
||||
context 'when a status does not belong to the reported account' do
|
||||
let(:target_account) { Fabricate(:account) }
|
||||
|
||||
it 'returns http not found' do
|
||||
expect(response).to have_http_status(404)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when a category is chosen' do
|
||||
let(:category) { 'spam' }
|
||||
|
||||
it 'saves category' do
|
||||
expect(target_account.targeted_reports.first.spam?).to be true
|
||||
end
|
||||
end
|
||||
|
||||
context 'when violated rules are chosen' do
|
||||
let(:rule) { Fabricate(:rule) }
|
||||
let(:category) { 'violation' }
|
||||
let(:rule_ids) { [rule.id] }
|
||||
|
||||
it 'saves category' do
|
||||
expect(target_account.targeted_reports.first.violation?).to be true
|
||||
end
|
||||
|
||||
it 'saves rule_ids' do
|
||||
expect(target_account.targeted_reports.first.rule_ids).to match_array([rule.id])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
Fabricator(:rule) do
|
||||
priority ""
|
||||
deleted_at "2021-02-21 05:51:09"
|
||||
text "MyText"
|
||||
priority 0
|
||||
deleted_at nil
|
||||
text { Faker::Lorem.paragraph }
|
||||
end
|
Loading…
Reference in New Issue