mirror of
https://git.kescher.at/CatCatNya/catstodon.git
synced 2024-11-25 16:41:36 +01:00
Fix RSpec/ContextWording cop (#24739)
This commit is contained in:
parent
cf18cc2891
commit
710745e16b
105 changed files with 559 additions and 668 deletions
|
@ -328,115 +328,6 @@ RSpec/AnyInstance:
|
||||||
- 'spec/workers/activitypub/delivery_worker_spec.rb'
|
- 'spec/workers/activitypub/delivery_worker_spec.rb'
|
||||||
- 'spec/workers/web/push_notification_worker_spec.rb'
|
- 'spec/workers/web/push_notification_worker_spec.rb'
|
||||||
|
|
||||||
# Configuration parameters: Prefixes, AllowedPatterns.
|
|
||||||
# Prefixes: when, with, without
|
|
||||||
RSpec/ContextWording:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/config/initializers/rack_attack_spec.rb'
|
|
||||||
- 'spec/controllers/accounts_controller_spec.rb'
|
|
||||||
- 'spec/controllers/activitypub/collections_controller_spec.rb'
|
|
||||||
- 'spec/controllers/activitypub/inboxes_controller_spec.rb'
|
|
||||||
- 'spec/controllers/admin/domain_blocks_controller_spec.rb'
|
|
||||||
- 'spec/controllers/admin/reports/actions_controller_spec.rb'
|
|
||||||
- 'spec/controllers/admin/statuses_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v1/accounts/relationships_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v1/accounts_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v1/admin/domain_blocks_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v1/emails/confirmations_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v1/instances/activity_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v1/instances/peers_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v1/media_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v2/filters_controller_spec.rb'
|
|
||||||
- 'spec/controllers/application_controller_spec.rb'
|
|
||||||
- 'spec/controllers/auth/registrations_controller_spec.rb'
|
|
||||||
- 'spec/controllers/auth/sessions_controller_spec.rb'
|
|
||||||
- 'spec/controllers/concerns/cache_concern_spec.rb'
|
|
||||||
- 'spec/controllers/concerns/challengable_concern_spec.rb'
|
|
||||||
- 'spec/controllers/concerns/localized_spec.rb'
|
|
||||||
- 'spec/controllers/concerns/rate_limit_headers_spec.rb'
|
|
||||||
- 'spec/controllers/instance_actors_controller_spec.rb'
|
|
||||||
- 'spec/controllers/settings/applications_controller_spec.rb'
|
|
||||||
- 'spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb'
|
|
||||||
- 'spec/controllers/statuses_controller_spec.rb'
|
|
||||||
- 'spec/helpers/admin/account_moderation_notes_helper_spec.rb'
|
|
||||||
- 'spec/helpers/jsonld_helper_spec.rb'
|
|
||||||
- 'spec/helpers/routing_helper_spec.rb'
|
|
||||||
- 'spec/lib/activitypub/activity/accept_spec.rb'
|
|
||||||
- 'spec/lib/activitypub/activity/announce_spec.rb'
|
|
||||||
- 'spec/lib/activitypub/activity/create_spec.rb'
|
|
||||||
- 'spec/lib/activitypub/activity/follow_spec.rb'
|
|
||||||
- 'spec/lib/activitypub/activity/reject_spec.rb'
|
|
||||||
- 'spec/lib/emoji_formatter_spec.rb'
|
|
||||||
- 'spec/lib/entity_cache_spec.rb'
|
|
||||||
- 'spec/lib/feed_manager_spec.rb'
|
|
||||||
- 'spec/lib/html_aware_formatter_spec.rb'
|
|
||||||
- 'spec/lib/link_details_extractor_spec.rb'
|
|
||||||
- 'spec/lib/ostatus/tag_manager_spec.rb'
|
|
||||||
- 'spec/lib/scope_transformer_spec.rb'
|
|
||||||
- 'spec/lib/status_cache_hydrator_spec.rb'
|
|
||||||
- 'spec/lib/status_reach_finder_spec.rb'
|
|
||||||
- 'spec/lib/text_formatter_spec.rb'
|
|
||||||
- 'spec/models/account/field_spec.rb'
|
|
||||||
- 'spec/models/account_spec.rb'
|
|
||||||
- 'spec/models/admin/account_action_spec.rb'
|
|
||||||
- 'spec/models/concerns/account_interactions_spec.rb'
|
|
||||||
- 'spec/models/concerns/remotable_spec.rb'
|
|
||||||
- 'spec/models/custom_emoji_filter_spec.rb'
|
|
||||||
- 'spec/models/custom_emoji_spec.rb'
|
|
||||||
- 'spec/models/email_domain_block_spec.rb'
|
|
||||||
- 'spec/models/media_attachment_spec.rb'
|
|
||||||
- 'spec/models/notification_spec.rb'
|
|
||||||
- 'spec/models/remote_follow_spec.rb'
|
|
||||||
- 'spec/models/report_spec.rb'
|
|
||||||
- 'spec/models/session_activation_spec.rb'
|
|
||||||
- 'spec/models/setting_spec.rb'
|
|
||||||
- 'spec/models/status_spec.rb'
|
|
||||||
- 'spec/models/web/push_subscription_spec.rb'
|
|
||||||
- 'spec/policies/account_moderation_note_policy_spec.rb'
|
|
||||||
- 'spec/policies/account_policy_spec.rb'
|
|
||||||
- 'spec/policies/backup_policy_spec.rb'
|
|
||||||
- 'spec/policies/custom_emoji_policy_spec.rb'
|
|
||||||
- 'spec/policies/domain_block_policy_spec.rb'
|
|
||||||
- 'spec/policies/email_domain_block_policy_spec.rb'
|
|
||||||
- 'spec/policies/instance_policy_spec.rb'
|
|
||||||
- 'spec/policies/invite_policy_spec.rb'
|
|
||||||
- 'spec/policies/relay_policy_spec.rb'
|
|
||||||
- 'spec/policies/report_note_policy_spec.rb'
|
|
||||||
- 'spec/policies/report_policy_spec.rb'
|
|
||||||
- 'spec/policies/settings_policy_spec.rb'
|
|
||||||
- 'spec/policies/tag_policy_spec.rb'
|
|
||||||
- 'spec/policies/user_policy_spec.rb'
|
|
||||||
- 'spec/presenters/account_relationships_presenter_spec.rb'
|
|
||||||
- 'spec/presenters/status_relationships_presenter_spec.rb'
|
|
||||||
- 'spec/services/account_search_service_spec.rb'
|
|
||||||
- 'spec/services/account_statuses_cleanup_service_spec.rb'
|
|
||||||
- 'spec/services/activitypub/fetch_remote_status_service_spec.rb'
|
|
||||||
- 'spec/services/activitypub/process_account_service_spec.rb'
|
|
||||||
- 'spec/services/activitypub/process_status_update_service_spec.rb'
|
|
||||||
- 'spec/services/fetch_link_card_service_spec.rb'
|
|
||||||
- 'spec/services/fetch_oembed_service_spec.rb'
|
|
||||||
- 'spec/services/fetch_remote_status_service_spec.rb'
|
|
||||||
- 'spec/services/follow_service_spec.rb'
|
|
||||||
- 'spec/services/import_service_spec.rb'
|
|
||||||
- 'spec/services/notify_service_spec.rb'
|
|
||||||
- 'spec/services/process_mentions_service_spec.rb'
|
|
||||||
- 'spec/services/reblog_service_spec.rb'
|
|
||||||
- 'spec/services/report_service_spec.rb'
|
|
||||||
- 'spec/services/resolve_account_service_spec.rb'
|
|
||||||
- 'spec/services/resolve_url_service_spec.rb'
|
|
||||||
- 'spec/services/search_service_spec.rb'
|
|
||||||
- 'spec/services/unallow_domain_service_spec.rb'
|
|
||||||
- 'spec/services/verify_link_service_spec.rb'
|
|
||||||
- 'spec/validators/disallowed_hashtags_validator_spec.rb'
|
|
||||||
- 'spec/validators/email_mx_validator_spec.rb'
|
|
||||||
- 'spec/validators/follow_limit_validator_spec.rb'
|
|
||||||
- 'spec/validators/poll_validator_spec.rb'
|
|
||||||
- 'spec/validators/status_pin_validator_spec.rb'
|
|
||||||
- 'spec/validators/unreserved_username_validator_spec.rb'
|
|
||||||
- 'spec/validators/url_validator_spec.rb'
|
|
||||||
- 'spec/workers/move_worker_spec.rb'
|
|
||||||
- 'spec/workers/scheduler/accounts_statuses_cleanup_scheduler_spec.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
# Configuration parameters: SkipBlocks, EnforcedStyle.
|
# Configuration parameters: SkipBlocks, EnforcedStyle.
|
||||||
# SupportedStyles: described_class, explicit
|
# SupportedStyles: described_class, explicit
|
||||||
|
|
|
@ -46,36 +46,36 @@ describe Rack::Attack, type: :request do
|
||||||
let(:remote_ip) { '1.2.3.5' }
|
let(:remote_ip) { '1.2.3.5' }
|
||||||
|
|
||||||
describe 'throttle excessive sign-up requests by IP address' do
|
describe 'throttle excessive sign-up requests by IP address' do
|
||||||
context 'through the website' do
|
context 'when accessed through the website' do
|
||||||
let(:limit) { 25 }
|
let(:limit) { 25 }
|
||||||
let(:period) { 5.minutes }
|
let(:period) { 5.minutes }
|
||||||
let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } }
|
let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } }
|
||||||
|
|
||||||
context 'for exact path' do
|
context 'with exact path' do
|
||||||
let(:path) { '/auth' }
|
let(:path) { '/auth' }
|
||||||
|
|
||||||
it_behaves_like 'throttled endpoint'
|
it_behaves_like 'throttled endpoint'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for path with format' do
|
context 'with path with format' do
|
||||||
let(:path) { '/auth.html' }
|
let(:path) { '/auth.html' }
|
||||||
|
|
||||||
it_behaves_like 'throttled endpoint'
|
it_behaves_like 'throttled endpoint'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'through the API' do
|
context 'when accessed through the API' do
|
||||||
let(:limit) { 5 }
|
let(:limit) { 5 }
|
||||||
let(:period) { 30.minutes }
|
let(:period) { 30.minutes }
|
||||||
let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } }
|
let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } }
|
||||||
|
|
||||||
context 'for exact path' do
|
context 'with exact path' do
|
||||||
let(:path) { '/api/v1/accounts' }
|
let(:path) { '/api/v1/accounts' }
|
||||||
|
|
||||||
it_behaves_like 'throttled endpoint'
|
it_behaves_like 'throttled endpoint'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for path with format' do
|
context 'with path with format' do
|
||||||
let(:path) { '/api/v1/accounts.json' }
|
let(:path) { '/api/v1/accounts.json' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
@ -91,13 +91,13 @@ describe Rack::Attack, type: :request do
|
||||||
let(:period) { 5.minutes }
|
let(:period) { 5.minutes }
|
||||||
let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } }
|
let(:request) { -> { post path, headers: { 'REMOTE_ADDR' => remote_ip } } }
|
||||||
|
|
||||||
context 'for exact path' do
|
context 'with exact path' do
|
||||||
let(:path) { '/auth/sign_in' }
|
let(:path) { '/auth/sign_in' }
|
||||||
|
|
||||||
it_behaves_like 'throttled endpoint'
|
it_behaves_like 'throttled endpoint'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for path with format' do
|
context 'with path with format' do
|
||||||
let(:path) { '/auth/sign_in.html' }
|
let(:path) { '/auth/sign_in.html' }
|
||||||
|
|
||||||
it_behaves_like 'throttled endpoint'
|
it_behaves_like 'throttled endpoint'
|
||||||
|
|
|
@ -57,7 +57,7 @@ RSpec.describe AccountsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it_behaves_like 'preliminary checks'
|
it_behaves_like 'preliminary checks'
|
||||||
|
@ -140,7 +140,7 @@ RSpec.describe AccountsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:authorized_fetch_mode) { false }
|
let(:authorized_fetch_mode) { false }
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
|
@ -193,7 +193,7 @@ RSpec.describe AccountsController, type: :controller do
|
||||||
expect(json).to include(:id, :type, :preferredUsername, :inbox, :publicKey, :name, :summary)
|
expect(json).to include(:id, :type, :preferredUsername, :inbox, :publicKey, :name, :summary)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'in authorized fetch mode' do
|
context 'with authorized fetch mode' do
|
||||||
let(:authorized_fetch_mode) { true }
|
let(:authorized_fetch_mode) { true }
|
||||||
|
|
||||||
it 'returns http unauthorized' do
|
it 'returns http unauthorized' do
|
||||||
|
@ -251,7 +251,7 @@ RSpec.describe AccountsController, type: :controller do
|
||||||
expect(json).to include(:id, :type, :preferredUsername, :inbox, :publicKey, :name, :summary)
|
expect(json).to include(:id, :type, :preferredUsername, :inbox, :publicKey, :name, :summary)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'in authorized fetch mode' do
|
context 'with authorized fetch mode' do
|
||||||
let(:authorized_fetch_mode) { true }
|
let(:authorized_fetch_mode) { true }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -278,7 +278,7 @@ RSpec.describe AccountsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as RSS' do
|
context 'with RSS' do
|
||||||
let(:format) { 'rss' }
|
let(:format) { 'rss' }
|
||||||
|
|
||||||
it_behaves_like 'preliminary checks'
|
it_behaves_like 'preliminary checks'
|
||||||
|
|
|
@ -119,7 +119,7 @@ RSpec.describe ActivityPub::CollectionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'in authorized fetch mode' do
|
context 'with authorized fetch mode' do
|
||||||
before do
|
before do
|
||||||
allow(controller).to receive(:authorized_fetch_mode?).and_return(true)
|
allow(controller).to receive(:authorized_fetch_mode?).and_return(true)
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,7 +21,7 @@ RSpec.describe ActivityPub::InboxesController, type: :controller do
|
||||||
expect(response).to have_http_status(202)
|
expect(response).to have_http_status(202)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for a specific account' do
|
context 'with a specific account' do
|
||||||
subject(:response) { post :create, params: { account_username: account.username }, body: '{}' }
|
subject(:response) { post :create, params: { account_username: account.username }, body: '{}' }
|
||||||
|
|
||||||
let(:account) { Fabricate(:account) }
|
let(:account) { Fabricate(:account) }
|
||||||
|
|
|
@ -83,7 +83,7 @@ RSpec.describe Admin::DomainBlocksController, type: :controller do
|
||||||
BlockDomainService.new.call(domain_block)
|
BlockDomainService.new.call(domain_block)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'downgrading a domain suspension to silence' do
|
context 'when downgrading a domain suspension to silence' do
|
||||||
let(:original_severity) { 'suspend' }
|
let(:original_severity) { 'suspend' }
|
||||||
let(:new_severity) { 'silence' }
|
let(:new_severity) { 'silence' }
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ RSpec.describe Admin::DomainBlocksController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'upgrading a domain silence to suspend' do
|
context 'when upgrading a domain silence to suspend' do
|
||||||
let(:original_severity) { 'silence' }
|
let(:original_severity) { 'silence' }
|
||||||
let(:new_severity) { 'suspend' }
|
let(:new_severity) { 'suspend' }
|
||||||
|
|
||||||
|
|
|
@ -146,13 +146,13 @@ describe Admin::Reports::ActionsController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'action as submit button' do
|
context 'with Action as submit button' do
|
||||||
subject { post :create, params: common_params.merge({ action => '' }) }
|
subject { post :create, params: common_params.merge({ action => '' }) }
|
||||||
|
|
||||||
it_behaves_like 'all action types'
|
it_behaves_like 'all action types'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'action as submit button' do
|
context 'with Action as submit button' do
|
||||||
subject { post :create, params: common_params.merge({ moderation_action: action }) }
|
subject { post :create, params: common_params.merge({ moderation_action: action }) }
|
||||||
|
|
||||||
it_behaves_like 'all action types'
|
it_behaves_like 'all action types'
|
||||||
|
|
|
@ -30,7 +30,7 @@ describe Admin::StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'filtering by media' do
|
context 'when filtering by media' do
|
||||||
before do
|
before do
|
||||||
get :index, params: { account_id: account.id, media: '1' }
|
get :index, params: { account_id: account.id, media: '1' }
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,7 +21,7 @@ describe Api::V1::Accounts::RelationshipsController do
|
||||||
lewis.follow!(user.account)
|
lewis.follow!(user.account)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'provided only one ID' do
|
context 'when provided only one ID' do
|
||||||
before do
|
before do
|
||||||
get :index, params: { id: simon.id }
|
get :index, params: { id: simon.id }
|
||||||
end
|
end
|
||||||
|
@ -39,7 +39,7 @@ describe Api::V1::Accounts::RelationshipsController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'provided multiple IDs' do
|
context 'when provided multiple IDs' do
|
||||||
before do
|
before do
|
||||||
get :index, params: { id: [simon.id, lewis.id] }
|
get :index, params: { id: [simon.id, lewis.id] }
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,7 +30,7 @@ RSpec.describe Api::V1::AccountsController, type: :controller do
|
||||||
post :create, params: { username: 'test', password: '12345678', email: 'hello@world.tld', agreement: agreement }
|
post :create, params: { username: 'test', password: '12345678', email: 'hello@world.tld', agreement: agreement }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given truthy agreement' do
|
context 'when given truthy agreement' do
|
||||||
let(:agreement) { 'true' }
|
let(:agreement) { 'true' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -48,7 +48,7 @@ RSpec.describe Api::V1::AccountsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given no agreement' do
|
context 'when given no agreement' do
|
||||||
it 'returns http unprocessable entity' do
|
it 'returns http unprocessable entity' do
|
||||||
expect(response).to have_http_status(422)
|
expect(response).to have_http_status(422)
|
||||||
end
|
end
|
||||||
|
@ -121,7 +121,7 @@ RSpec.describe Api::V1::AccountsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'modifying follow options' do
|
context 'when modifying follow options' do
|
||||||
let(:locked) { false }
|
let(:locked) { false }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
|
@ -84,7 +84,7 @@ RSpec.describe Api::V1::Admin::DomainBlocksController, type: :controller do
|
||||||
BlockDomainService.new.call(domain_block)
|
BlockDomainService.new.call(domain_block)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'downgrading a domain suspension to silence' do
|
context 'when downgrading a domain suspension to silence' do
|
||||||
let(:original_severity) { 'suspend' }
|
let(:original_severity) { 'suspend' }
|
||||||
let(:new_severity) { 'silence' }
|
let(:new_severity) { 'silence' }
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ RSpec.describe Api::V1::Admin::DomainBlocksController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'upgrading a domain silence to suspend' do
|
context 'when upgrading a domain silence to suspend' do
|
||||||
let(:original_severity) { 'silence' }
|
let(:original_severity) { 'silence' }
|
||||||
let(:new_severity) { 'suspend' }
|
let(:new_severity) { 'suspend' }
|
||||||
|
|
||||||
|
|
|
@ -15,14 +15,14 @@ RSpec.describe Api::V1::Emails::ConfirmationsController, type: :controller do
|
||||||
allow(controller).to receive(:doorkeeper_token) { token }
|
allow(controller).to receive(:doorkeeper_token) { token }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'from a random app' do
|
context 'when from a random app' do
|
||||||
it 'returns http forbidden' do
|
it 'returns http forbidden' do
|
||||||
post :create
|
post :create
|
||||||
expect(response).to have_http_status(403)
|
expect(response).to have_http_status(403)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'from an app that created the account' do
|
context 'when from an app that created the account' do
|
||||||
before do
|
before do
|
||||||
user.update(created_by_application: token.application)
|
user.update(created_by_application: token.application)
|
||||||
end
|
end
|
||||||
|
@ -35,7 +35,7 @@ RSpec.describe Api::V1::Emails::ConfirmationsController, type: :controller do
|
||||||
expect(response).to have_http_status(403)
|
expect(response).to have_http_status(403)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'but user changed e-mail and has not confirmed it' do
|
context 'with user changed e-mail and has not confirmed it' do
|
||||||
before do
|
before do
|
||||||
user.update(email: 'foo@bar.com')
|
user.update(email: 'foo@bar.com')
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,7 +9,7 @@ RSpec.describe Api::V1::Instances::ActivityController, type: :controller do
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!Setting.activity_api_enabled' do
|
context 'with !Setting.activity_api_enabled' do
|
||||||
it 'returns 404' do
|
it 'returns 404' do
|
||||||
Setting.activity_api_enabled = false
|
Setting.activity_api_enabled = false
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ RSpec.describe Api::V1::Instances::PeersController, type: :controller do
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!Setting.peers_api_enabled' do
|
context 'with !Setting.peers_api_enabled' do
|
||||||
it 'returns 404' do
|
it 'returns 404' do
|
||||||
Setting.peers_api_enabled = false
|
Setting.peers_api_enabled = false
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ RSpec.describe Api::V1::MediaController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'image/jpeg' do
|
context 'with image/jpeg' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { file: fixture_file_upload('attachment.jpg', 'image/jpeg') }
|
post :create, params: { file: fixture_file_upload('attachment.jpg', 'image/jpeg') }
|
||||||
end
|
end
|
||||||
|
@ -59,7 +59,7 @@ RSpec.describe Api::V1::MediaController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'image/gif' do
|
context 'with image/gif' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { file: fixture_file_upload('attachment.gif', 'image/gif') }
|
post :create, params: { file: fixture_file_upload('attachment.gif', 'image/gif') }
|
||||||
end
|
end
|
||||||
|
@ -81,7 +81,7 @@ RSpec.describe Api::V1::MediaController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'video/webm' do
|
context 'with video/webm' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { file: fixture_file_upload('attachment.webm', 'video/webm') }
|
post :create, params: { file: fixture_file_upload('attachment.webm', 'video/webm') }
|
||||||
end
|
end
|
||||||
|
|
|
@ -66,7 +66,7 @@ RSpec.describe Api::V2::FiltersController, type: :controller do
|
||||||
let!(:filter) { Fabricate(:custom_filter, account: user.account) }
|
let!(:filter) { Fabricate(:custom_filter, account: user.account) }
|
||||||
let!(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) }
|
let!(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) }
|
||||||
|
|
||||||
context 'updating filter parameters' do
|
context 'when updating filter parameters' do
|
||||||
before do
|
before do
|
||||||
put :update, params: { id: filter.id, title: 'updated', context: %w(home public) }
|
put :update, params: { id: filter.id, title: 'updated', context: %w(home public) }
|
||||||
end
|
end
|
||||||
|
@ -84,7 +84,7 @@ RSpec.describe Api::V2::FiltersController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'updating keywords in bulk' do
|
context 'when updating keywords in bulk' do
|
||||||
before do
|
before do
|
||||||
allow(redis).to receive_messages(publish: nil)
|
allow(redis).to receive_messages(publish: nil)
|
||||||
put :update, params: { id: filter.id, keywords_attributes: [{ id: keyword.id, keyword: 'updated' }] }
|
put :update, params: { id: filter.id, keywords_attributes: [{ id: keyword.id, keyword: 'updated' }] }
|
||||||
|
|
|
@ -32,7 +32,7 @@ describe ApplicationController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'forgery' do
|
context 'with a forgery' do
|
||||||
subject do
|
subject do
|
||||||
ActionController::Base.allow_forgery_protection = true
|
ActionController::Base.allow_forgery_protection = true
|
||||||
routes.draw { post 'success' => 'anonymous#success' }
|
routes.draw { post 'success' => 'anonymous#success' }
|
||||||
|
@ -105,7 +105,7 @@ describe ApplicationController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'ActionController::RoutingError' do
|
context 'with ActionController::RoutingError' do
|
||||||
subject do
|
subject do
|
||||||
routes.draw { get 'routing_error' => 'anonymous#routing_error' }
|
routes.draw { get 'routing_error' => 'anonymous#routing_error' }
|
||||||
get 'routing_error'
|
get 'routing_error'
|
||||||
|
@ -114,7 +114,7 @@ describe ApplicationController, type: :controller do
|
||||||
include_examples 'respond_with_error', 404
|
include_examples 'respond_with_error', 404
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'ActiveRecord::RecordNotFound' do
|
context 'with ActiveRecord::RecordNotFound' do
|
||||||
subject do
|
subject do
|
||||||
routes.draw { get 'record_not_found' => 'anonymous#record_not_found' }
|
routes.draw { get 'record_not_found' => 'anonymous#record_not_found' }
|
||||||
get 'record_not_found'
|
get 'record_not_found'
|
||||||
|
@ -123,7 +123,7 @@ describe ApplicationController, type: :controller do
|
||||||
include_examples 'respond_with_error', 404
|
include_examples 'respond_with_error', 404
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'ActionController::InvalidAuthenticityToken' do
|
context 'with ActionController::InvalidAuthenticityToken' do
|
||||||
subject do
|
subject do
|
||||||
routes.draw { get 'invalid_authenticity_token' => 'anonymous#invalid_authenticity_token' }
|
routes.draw { get 'invalid_authenticity_token' => 'anonymous#invalid_authenticity_token' }
|
||||||
get 'invalid_authenticity_token'
|
get 'invalid_authenticity_token'
|
||||||
|
@ -252,7 +252,7 @@ describe ApplicationController, type: :controller do
|
||||||
expect(subject.new.cache_collection(raw, Object)).to eq raw
|
expect(subject.new.cache_collection(raw, Object)).to eq raw
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Status' do
|
context 'with a Status' do
|
||||||
include_examples 'cacheable', :status, Status
|
include_examples 'cacheable', :status, Status
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -157,7 +157,7 @@ RSpec.describe Auth::RegistrationsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'approval-based registrations without invite' do
|
context 'with Approval-based registrations without invite' do
|
||||||
subject do
|
subject do
|
||||||
Setting.registrations_mode = 'approved'
|
Setting.registrations_mode = 'approved'
|
||||||
request.headers['Accept-Language'] = accept_language
|
request.headers['Accept-Language'] = accept_language
|
||||||
|
@ -184,7 +184,7 @@ RSpec.describe Auth::RegistrationsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'approval-based registrations with expired invite' do
|
context 'with Approval-based registrations with expired invite' do
|
||||||
subject do
|
subject do
|
||||||
Setting.registrations_mode = 'approved'
|
Setting.registrations_mode = 'approved'
|
||||||
request.headers['Accept-Language'] = accept_language
|
request.headers['Accept-Language'] = accept_language
|
||||||
|
@ -212,7 +212,7 @@ RSpec.describe Auth::RegistrationsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'approval-based registrations with valid invite and required invite text' do
|
context 'with Approval-based registrations with valid invite and required invite text' do
|
||||||
subject do
|
subject do
|
||||||
inviter = Fabricate(:user, confirmed_at: 2.days.ago)
|
inviter = Fabricate(:user, confirmed_at: 2.days.ago)
|
||||||
Setting.registrations_mode = 'approved'
|
Setting.registrations_mode = 'approved'
|
||||||
|
|
|
@ -51,8 +51,8 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'POST #create' do
|
describe 'POST #create' do
|
||||||
context 'using PAM authentication', if: ENV['PAM_ENABLED'] == 'true' do
|
context 'when using PAM authentication', if: ENV['PAM_ENABLED'] == 'true' do
|
||||||
context 'using a valid password' do
|
context 'when using a valid password' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { user: { email: 'pam_user1', password: '123456' } }
|
post :create, params: { user: { email: 'pam_user1', password: '123456' } }
|
||||||
end
|
end
|
||||||
|
@ -66,7 +66,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using an invalid password' do
|
context 'when using an invalid password' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { user: { email: 'pam_user1', password: 'WRONGPW' } }
|
post :create, params: { user: { email: 'pam_user1', password: 'WRONGPW' } }
|
||||||
end
|
end
|
||||||
|
@ -80,7 +80,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using a valid email and existing user' do
|
context 'when using a valid email and existing user' do
|
||||||
let!(:user) do
|
let!(:user) do
|
||||||
account = Fabricate.build(:account, username: 'pam_user1', user: nil)
|
account = Fabricate.build(:account, username: 'pam_user1', user: nil)
|
||||||
account.save!(validate: false)
|
account.save!(validate: false)
|
||||||
|
@ -102,10 +102,10 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using password authentication' do
|
context 'when using password authentication' do
|
||||||
let(:user) { Fabricate(:user, email: 'foo@bar.com', password: 'abcdefgh') }
|
let(:user) { Fabricate(:user, email: 'foo@bar.com', password: 'abcdefgh') }
|
||||||
|
|
||||||
context 'using a valid password' do
|
context 'when using a valid password' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { user: { email: user.email, password: user.password } }
|
post :create, params: { user: { email: user.email, password: user.password } }
|
||||||
end
|
end
|
||||||
|
@ -119,7 +119,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using a valid password on a previously-used account with a new IP address' do
|
context 'when using a valid password on a previously-used account with a new IP address' do
|
||||||
let(:previous_ip) { '1.2.3.4' }
|
let(:previous_ip) { '1.2.3.4' }
|
||||||
let(:current_ip) { '4.3.2.1' }
|
let(:current_ip) { '4.3.2.1' }
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using email with uppercase letters' do
|
context 'when using email with uppercase letters' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { user: { email: user.email.upcase, password: user.password } }
|
post :create, params: { user: { email: user.email.upcase, password: user.password } }
|
||||||
end
|
end
|
||||||
|
@ -159,7 +159,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using an invalid password' do
|
context 'when using an invalid password' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { user: { email: user.email, password: 'wrongpw' } }
|
post :create, params: { user: { email: user.email, password: 'wrongpw' } }
|
||||||
end
|
end
|
||||||
|
@ -173,7 +173,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using an unconfirmed password' do
|
context 'when using an unconfirmed password' do
|
||||||
before do
|
before do
|
||||||
request.headers['Accept-Language'] = accept_language
|
request.headers['Accept-Language'] = accept_language
|
||||||
post :create, params: { user: { email: unconfirmed_user.email, password: unconfirmed_user.password } }
|
post :create, params: { user: { email: unconfirmed_user.email, password: unconfirmed_user.password } }
|
||||||
|
@ -187,14 +187,14 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "logging in from the user's page" do
|
context "when logging in from the user's page" do
|
||||||
before do
|
before do
|
||||||
allow(controller).to receive(:single_user_mode?).and_return(single_user_mode)
|
allow(controller).to receive(:single_user_mode?).and_return(single_user_mode)
|
||||||
allow(controller).to receive(:stored_location_for).with(:user).and_return("/@#{user.account.username}")
|
allow(controller).to receive(:stored_location_for).with(:user).and_return("/@#{user.account.username}")
|
||||||
post :create, params: { user: { email: user.email, password: user.password } }
|
post :create, params: { user: { email: user.email, password: user.password } }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'in single user mode' do
|
context 'with single user mode' do
|
||||||
let(:single_user_mode) { true }
|
let(:single_user_mode) { true }
|
||||||
|
|
||||||
it 'redirects to home' do
|
it 'redirects to home' do
|
||||||
|
@ -202,7 +202,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'in non-single user mode' do
|
context 'with non-single user mode' do
|
||||||
let(:single_user_mode) { false }
|
let(:single_user_mode) { false }
|
||||||
|
|
||||||
it "redirects back to the user's page" do
|
it "redirects back to the user's page" do
|
||||||
|
@ -212,7 +212,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using two-factor authentication' do
|
context 'when using two-factor authentication' do
|
||||||
context 'with OTP enabled as second factor' do
|
context 'with OTP enabled as second factor' do
|
||||||
let!(:user) do
|
let!(:user) do
|
||||||
Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32))
|
Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32))
|
||||||
|
@ -224,7 +224,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
return codes
|
return codes
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using email and password' do
|
context 'when using email and password' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { user: { email: user.email, password: user.password } }
|
post :create, params: { user: { email: user.email, password: user.password } }
|
||||||
end
|
end
|
||||||
|
@ -235,7 +235,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using email and password after an unfinished log-in attempt to a 2FA-protected account' do
|
context 'when using email and password after an unfinished log-in attempt to a 2FA-protected account' do
|
||||||
let!(:other_user) do
|
let!(:other_user) do
|
||||||
Fabricate(:user, email: 'z@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32))
|
Fabricate(:user, email: 'z@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32))
|
||||||
end
|
end
|
||||||
|
@ -251,7 +251,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using upcase email and password' do
|
context 'when using upcase email and password' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { user: { email: user.email.upcase, password: user.password } }
|
post :create, params: { user: { email: user.email.upcase, password: user.password } }
|
||||||
end
|
end
|
||||||
|
@ -262,7 +262,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using a valid OTP' do
|
context 'when using a valid OTP' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
post :create, params: { user: { otp_attempt: user.current_otp } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
||||||
end
|
end
|
||||||
|
@ -291,7 +291,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using a valid recovery code' do
|
context 'when using a valid recovery code' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { user: { otp_attempt: recovery_codes.first } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
post :create, params: { user: { otp_attempt: recovery_codes.first } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
||||||
end
|
end
|
||||||
|
@ -305,7 +305,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using an invalid OTP' do
|
context 'when using an invalid OTP' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { user: { otp_attempt: 'wrongotp' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
post :create, params: { user: { otp_attempt: 'wrongotp' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s }
|
||||||
end
|
end
|
||||||
|
@ -353,7 +353,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
|
|
||||||
let(:fake_credential) { fake_client.get(challenge: challenge, sign_count: sign_count) }
|
let(:fake_credential) { fake_client.get(challenge: challenge, sign_count: sign_count) }
|
||||||
|
|
||||||
context 'using email and password' do
|
context 'when using email and password' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { user: { email: user.email, password: user.password } }
|
post :create, params: { user: { email: user.email, password: user.password } }
|
||||||
end
|
end
|
||||||
|
@ -364,7 +364,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using upcase email and password' do
|
context 'when using upcase email and password' do
|
||||||
before do
|
before do
|
||||||
post :create, params: { user: { email: user.email.upcase, password: user.password } }
|
post :create, params: { user: { email: user.email.upcase, password: user.password } }
|
||||||
end
|
end
|
||||||
|
@ -375,7 +375,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using a valid webauthn credential' do
|
context 'when using a valid webauthn credential' do
|
||||||
before do
|
before do
|
||||||
@controller.session[:webauthn_challenge] = challenge
|
@controller.session[:webauthn_challenge] = challenge
|
||||||
|
|
||||||
|
|
|
@ -23,14 +23,14 @@ RSpec.describe CacheConcern, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#cache_collection' do
|
describe '#cache_collection' do
|
||||||
context 'given an empty array' do
|
context 'when given an empty array' do
|
||||||
it 'returns an empty array' do
|
it 'returns an empty array' do
|
||||||
get :empty_array
|
get :empty_array
|
||||||
expect(response.body).to eq '0'
|
expect(response.body).to eq '0'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given an empty relation' do
|
context 'when given an empty relation' do
|
||||||
it 'returns an empty array' do
|
it 'returns an empty array' do
|
||||||
get :empty_relation
|
get :empty_relation
|
||||||
expect(response.body).to eq '0'
|
expect(response.body).to eq '0'
|
||||||
|
|
|
@ -31,7 +31,7 @@ RSpec.describe ChallengableConcern, type: :controller do
|
||||||
sign_in user
|
sign_in user
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for GET requests' do
|
context 'with GET requests' do
|
||||||
before { get :foo }
|
before { get :foo }
|
||||||
|
|
||||||
it 'does not ask for password' do
|
it 'does not ask for password' do
|
||||||
|
@ -39,7 +39,7 @@ RSpec.describe ChallengableConcern, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for POST requests' do
|
context 'with POST requests' do
|
||||||
before { post :bar }
|
before { post :bar }
|
||||||
|
|
||||||
it 'does not ask for password' do
|
it 'does not ask for password' do
|
||||||
|
@ -56,7 +56,7 @@ RSpec.describe ChallengableConcern, type: :controller do
|
||||||
sign_in user
|
sign_in user
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for GET requests' do
|
context 'with GET requests' do
|
||||||
before { get :foo, session: { challenge_passed_at: Time.now.utc } }
|
before { get :foo, session: { challenge_passed_at: Time.now.utc } }
|
||||||
|
|
||||||
it 'does not ask for password' do
|
it 'does not ask for password' do
|
||||||
|
@ -64,7 +64,7 @@ RSpec.describe ChallengableConcern, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for POST requests' do
|
context 'with POST requests' do
|
||||||
before { post :bar, session: { challenge_passed_at: Time.now.utc } }
|
before { post :bar, session: { challenge_passed_at: Time.now.utc } }
|
||||||
|
|
||||||
it 'does not ask for password' do
|
it 'does not ask for password' do
|
||||||
|
@ -81,7 +81,7 @@ RSpec.describe ChallengableConcern, type: :controller do
|
||||||
sign_in user
|
sign_in user
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for GET requests' do
|
context 'with GET requests' do
|
||||||
before { get :foo }
|
before { get :foo }
|
||||||
|
|
||||||
it 'renders challenge' do
|
it 'renders challenge' do
|
||||||
|
@ -91,7 +91,7 @@ RSpec.describe ChallengableConcern, type: :controller do
|
||||||
# See Auth::ChallengesControllerSpec
|
# See Auth::ChallengesControllerSpec
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for POST requests' do
|
context 'with POST requests' do
|
||||||
before { post :bar }
|
before { post :bar }
|
||||||
|
|
||||||
it 'renders challenge' do
|
it 'renders challenge' do
|
||||||
|
|
|
@ -41,7 +41,7 @@ describe ApplicationController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'user with valid locale has signed in' do
|
context 'with a user with valid locale has signed in' do
|
||||||
it "sets user's locale" do
|
it "sets user's locale" do
|
||||||
user = Fabricate(:user, locale: :ca)
|
user = Fabricate(:user, locale: :ca)
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ describe ApplicationController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'user with invalid locale has signed in' do
|
context 'with a user with invalid locale has signed in' do
|
||||||
before do
|
before do
|
||||||
user = Fabricate.build(:user, locale: :invalid)
|
user = Fabricate.build(:user, locale: :invalid)
|
||||||
user.save!(validate: false)
|
user.save!(validate: false)
|
||||||
|
@ -62,7 +62,7 @@ describe ApplicationController, type: :controller do
|
||||||
include_examples 'default locale'
|
include_examples 'default locale'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'user has not signed in' do
|
context 'with a user who has not signed in' do
|
||||||
include_examples 'default locale'
|
include_examples 'default locale'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,7 +16,7 @@ describe ApplicationController do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'rate limiting' do
|
describe 'rate limiting' do
|
||||||
context 'throttling is off' do
|
context 'when throttling is off' do
|
||||||
before do
|
before do
|
||||||
request.env['rack.attack.throttle_data'] = nil
|
request.env['rack.attack.throttle_data'] = nil
|
||||||
end
|
end
|
||||||
|
@ -30,7 +30,7 @@ describe ApplicationController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'throttling is on' do
|
context 'when throttling is on' do
|
||||||
let(:start_time) { DateTime.new(2017, 1, 1, 12, 0, 0).utc }
|
let(:start_time) { DateTime.new(2017, 1, 1, 12, 0, 0).utc }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
|
@ -4,7 +4,7 @@ require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe InstanceActorsController, type: :controller do
|
RSpec.describe InstanceActorsController, type: :controller do
|
||||||
describe 'GET #show' do
|
describe 'GET #show' do
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
shared_examples 'shared behavior' do
|
shared_examples 'shared behavior' do
|
||||||
|
|
|
@ -50,7 +50,7 @@ describe Settings::ApplicationsController do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'POST #create' do
|
describe 'POST #create' do
|
||||||
context 'success (passed scopes as a String)' do
|
context 'when success (passed scopes as a String)' do
|
||||||
def call_create
|
def call_create
|
||||||
post :create, params: {
|
post :create, params: {
|
||||||
doorkeeper_application: {
|
doorkeeper_application: {
|
||||||
|
@ -72,7 +72,7 @@ describe Settings::ApplicationsController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'success (passed scopes as an Array)' do
|
context 'when success (passed scopes as an Array)' do
|
||||||
def call_create
|
def call_create
|
||||||
post :create, params: {
|
post :create, params: {
|
||||||
doorkeeper_application: {
|
doorkeeper_application: {
|
||||||
|
@ -94,7 +94,7 @@ describe Settings::ApplicationsController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'failure' do
|
context 'with failure request' do
|
||||||
before do
|
before do
|
||||||
post :create, params: {
|
post :create, params: {
|
||||||
doorkeeper_application: {
|
doorkeeper_application: {
|
||||||
|
@ -117,7 +117,7 @@ describe Settings::ApplicationsController do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'PATCH #update' do
|
describe 'PATCH #update' do
|
||||||
context 'success' do
|
context 'when success' do
|
||||||
let(:opts) do
|
let(:opts) do
|
||||||
{
|
{
|
||||||
website: 'https://foo.bar/',
|
website: 'https://foo.bar/',
|
||||||
|
@ -142,7 +142,7 @@ describe Settings::ApplicationsController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'failure' do
|
context 'with failure request' do
|
||||||
before do
|
before do
|
||||||
patch :update, params: {
|
patch :update, params: {
|
||||||
id: app.id,
|
id: app.id,
|
||||||
|
|
|
@ -275,7 +275,7 @@ describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when user have not enabled webauthn' do
|
context 'when user have not enabled webauthn' do
|
||||||
context 'creation succeeds' do
|
context 'when creation succeeds' do
|
||||||
it 'creates a webauthn credential' do
|
it 'creates a webauthn credential' do
|
||||||
@controller.session[:webauthn_challenge] = challenge
|
@controller.session[:webauthn_challenge] = challenge
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -97,7 +97,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -132,7 +132,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
@ -140,7 +140,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
@ -156,7 +156,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
@ -164,7 +164,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
@ -196,7 +196,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -221,7 +221,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -260,7 +260,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -285,7 +285,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -320,7 +320,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
@ -328,7 +328,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
@ -347,7 +347,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -372,7 +372,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -407,7 +407,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
@ -415,7 +415,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
@ -460,7 +460,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -485,7 +485,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -522,7 +522,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -547,7 +547,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -582,7 +582,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
@ -590,7 +590,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
@ -609,7 +609,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -634,7 +634,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success' do
|
||||||
|
@ -669,7 +669,7 @@ describe StatusesController do
|
||||||
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
get :show, params: { account_username: status.account.username, id: status.id, format: format }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as JSON' do
|
context 'with JSON' do
|
||||||
let(:format) { 'json' }
|
let(:format) { 'json' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
@ -677,7 +677,7 @@ describe StatusesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as HTML' do
|
context 'with HTML' do
|
||||||
let(:format) { 'html' }
|
let(:format) { 'html' }
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found' do
|
||||||
|
|
|
@ -6,7 +6,7 @@ RSpec.describe Admin::AccountModerationNotesHelper, type: :helper do
|
||||||
include AccountsHelper
|
include AccountsHelper
|
||||||
|
|
||||||
describe '#admin_account_link_to' do
|
describe '#admin_account_link_to' do
|
||||||
context 'account is nil' do
|
context 'when Account is nil' do
|
||||||
let(:account) { nil }
|
let(:account) { nil }
|
||||||
|
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
|
@ -30,7 +30,7 @@ RSpec.describe Admin::AccountModerationNotesHelper, type: :helper do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#admin_account_inline_link_to' do
|
describe '#admin_account_inline_link_to' do
|
||||||
context 'account is nil' do
|
context 'when Account is nil' do
|
||||||
let(:account) { nil }
|
let(:account) { nil }
|
||||||
|
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
|
|
|
@ -22,14 +22,14 @@ describe JsonLdHelper do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#first_of_value' do
|
describe '#first_of_value' do
|
||||||
context 'value.is_a?(Array)' do
|
context 'when value.is_a?(Array)' do
|
||||||
it 'returns value.first' do
|
it 'returns value.first' do
|
||||||
value = ['a']
|
value = ['a']
|
||||||
expect(helper.first_of_value(value)).to be 'a'
|
expect(helper.first_of_value(value)).to be 'a'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!value.is_a?(Array)' do
|
context 'with !value.is_a?(Array)' do
|
||||||
it 'returns value' do
|
it 'returns value' do
|
||||||
value = 'a'
|
value = 'a'
|
||||||
expect(helper.first_of_value(value)).to be 'a'
|
expect(helper.first_of_value(value)).to be 'a'
|
||||||
|
@ -38,14 +38,14 @@ describe JsonLdHelper do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#supported_context?' do
|
describe '#supported_context?' do
|
||||||
context "!json.nil? && equals_or_includes?(json['@context'], ActivityPub::TagManager::CONTEXT)" do
|
context 'when json is present and in an activitypub tagmanager context' do
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
json = { '@context' => ActivityPub::TagManager::CONTEXT }.as_json
|
json = { '@context' => ActivityPub::TagManager::CONTEXT }.as_json
|
||||||
expect(helper.supported_context?(json)).to be true
|
expect(helper.supported_context?(json)).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'else' do
|
context 'when not in activitypub tagmanager context' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
json = nil
|
json = nil
|
||||||
expect(helper.supported_context?(json)).to be false
|
expect(helper.supported_context?(json)).to be false
|
||||||
|
@ -90,7 +90,7 @@ describe JsonLdHelper do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'compaction and forwarding' do
|
context 'with compaction and forwarding' do
|
||||||
let(:json) do
|
let(:json) do
|
||||||
{
|
{
|
||||||
'@context' => [
|
'@context' => [
|
||||||
|
|
|
@ -24,7 +24,7 @@ RSpec.describe RoutingHelper, type: :helper do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Do not use S3' do
|
context 'when not using S3' do
|
||||||
before do
|
before do
|
||||||
Rails.configuration.x.use_s3 = false
|
Rails.configuration.x.use_s3 = false
|
||||||
end
|
end
|
||||||
|
@ -32,7 +32,7 @@ RSpec.describe RoutingHelper, type: :helper do
|
||||||
it_behaves_like 'returns full path URL'
|
it_behaves_like 'returns full path URL'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Use S3' do
|
context 'when using S3' do
|
||||||
before do
|
before do
|
||||||
Rails.configuration.x.use_s3 = true
|
Rails.configuration.x.use_s3 = true
|
||||||
end
|
end
|
||||||
|
|
|
@ -43,7 +43,7 @@ RSpec.describe ActivityPub::Activity::Accept do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a relay' do
|
context 'when given a relay' do
|
||||||
subject { described_class.new(json, sender) }
|
subject { described_class.new(json, sender) }
|
||||||
|
|
||||||
let!(:relay) { Fabricate(:relay, state: :pending, follow_activity_id: 'https://abc-123/456') }
|
let!(:relay) { Fabricate(:relay, state: :pending, follow_activity_id: 'https://abc-123/456') }
|
||||||
|
|
|
@ -39,7 +39,7 @@ RSpec.describe ActivityPub::Activity::Announce do
|
||||||
subject.perform
|
subject.perform
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'a known status' do
|
context 'with known status' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
ActivityPub::TagManager.instance.uri_for(status)
|
ActivityPub::TagManager.instance.uri_for(status)
|
||||||
end
|
end
|
||||||
|
@ -49,7 +49,7 @@ RSpec.describe ActivityPub::Activity::Announce do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'an unknown status' do
|
context 'with unknown status' do
|
||||||
let(:object_json) { 'https://example.com/actor/hello-world' }
|
let(:object_json) { 'https://example.com/actor/hello-world' }
|
||||||
|
|
||||||
it 'creates a reblog by sender of status' do
|
it 'creates a reblog by sender of status' do
|
||||||
|
@ -60,7 +60,7 @@ RSpec.describe ActivityPub::Activity::Announce do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'self-boost of a previously unknown status with correct attributedTo' do
|
context 'when self-boost of a previously unknown status with correct attributedTo' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: 'https://example.com/actor#bar',
|
id: 'https://example.com/actor#bar',
|
||||||
|
@ -76,7 +76,7 @@ RSpec.describe ActivityPub::Activity::Announce do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'self-boost of a previously unknown status with correct attributedTo, inlined Collection in audience' do
|
context 'when self-boost of a previously unknown status with correct attributedTo, inlined Collection in audience' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: 'https://example.com/actor#bar',
|
id: 'https://example.com/actor#bar',
|
||||||
|
@ -123,7 +123,7 @@ RSpec.describe ActivityPub::Activity::Announce do
|
||||||
stub_request(:get, 'https://example.com/actor/hello-world').to_return(body: Oj.dump(unknown_object_json))
|
stub_request(:get, 'https://example.com/actor/hello-world').to_return(body: Oj.dump(unknown_object_json))
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'and the relay is enabled' do
|
context 'when the relay is enabled' do
|
||||||
before do
|
before do
|
||||||
relay.update(state: :accepted)
|
relay.update(state: :accepted)
|
||||||
subject.perform
|
subject.perform
|
||||||
|
@ -135,7 +135,7 @@ RSpec.describe ActivityPub::Activity::Announce do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'and the relay is disabled' do
|
context 'when the relay is disabled' do
|
||||||
before do
|
before do
|
||||||
subject.perform
|
subject.perform
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,7 +31,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
subject.perform
|
subject.perform
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'object has been edited' do
|
context 'when object has been edited' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
||||||
|
@ -57,7 +57,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'object has update date equal to creation date' do
|
context 'when object has update date equal to creation date' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
||||||
|
@ -83,7 +83,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'unknown object type' do
|
context 'with an unknown object type' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
||||||
|
@ -97,7 +97,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'standalone' do
|
context 'with a standalone' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
||||||
|
@ -121,7 +121,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'public with explicit public address' do
|
context 'when public with explicit public address' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
||||||
|
@ -139,7 +139,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'public with as:Public' do
|
context 'when public with as:Public' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
||||||
|
@ -157,7 +157,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'public with Public' do
|
context 'when public with Public' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
||||||
|
@ -175,7 +175,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'unlisted with explicit public address' do
|
context 'when unlisted with explicit public address' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
||||||
|
@ -193,7 +193,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'unlisted with as:Public' do
|
context 'when unlisted with as:Public' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
||||||
|
@ -211,7 +211,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'unlisted with Public' do
|
context 'when unlisted with Public' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
||||||
|
@ -229,7 +229,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'private' do
|
context 'when private' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
||||||
|
@ -247,7 +247,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'private with inlined Collection in audience' do
|
context 'when private with inlined Collection in audience' do
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
{
|
{
|
||||||
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
|
||||||
|
@ -269,7 +269,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'limited' do
|
context 'when limited' do
|
||||||
let(:recipient) { Fabricate(:account) }
|
let(:recipient) { Fabricate(:account) }
|
||||||
|
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
|
@ -294,7 +294,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'direct' do
|
context 'when direct' do
|
||||||
let(:recipient) { Fabricate(:account) }
|
let(:recipient) { Fabricate(:account) }
|
||||||
|
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
|
@ -318,7 +318,7 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'as a reply' do
|
context 'with a reply' do
|
||||||
let(:original_status) { Fabricate(:status) }
|
let(:original_status) { Fabricate(:status) }
|
||||||
|
|
||||||
let(:object_json) do
|
let(:object_json) do
|
||||||
|
|
|
@ -20,7 +20,7 @@ RSpec.describe ActivityPub::Activity::Follow do
|
||||||
subject { described_class.new(json, sender) }
|
subject { described_class.new(json, sender) }
|
||||||
|
|
||||||
context 'with no prior follow' do
|
context 'with no prior follow' do
|
||||||
context 'unlocked account' do
|
context 'with an unlocked account' do
|
||||||
before do
|
before do
|
||||||
subject.perform
|
subject.perform
|
||||||
end
|
end
|
||||||
|
@ -35,7 +35,7 @@ RSpec.describe ActivityPub::Activity::Follow do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'silenced account following an unlocked account' do
|
context 'when silenced account following an unlocked account' do
|
||||||
before do
|
before do
|
||||||
sender.touch(:silenced_at)
|
sender.touch(:silenced_at)
|
||||||
subject.perform
|
subject.perform
|
||||||
|
@ -51,7 +51,7 @@ RSpec.describe ActivityPub::Activity::Follow do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'unlocked account muting the sender' do
|
context 'with an unlocked account muting the sender' do
|
||||||
before do
|
before do
|
||||||
recipient.mute!(sender)
|
recipient.mute!(sender)
|
||||||
subject.perform
|
subject.perform
|
||||||
|
@ -67,7 +67,7 @@ RSpec.describe ActivityPub::Activity::Follow do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'locked account' do
|
context 'when locked account' do
|
||||||
before do
|
before do
|
||||||
recipient.update(locked: true)
|
recipient.update(locked: true)
|
||||||
subject.perform
|
subject.perform
|
||||||
|
@ -89,7 +89,7 @@ RSpec.describe ActivityPub::Activity::Follow do
|
||||||
sender.active_relationships.create!(target_account: recipient, uri: 'bar')
|
sender.active_relationships.create!(target_account: recipient, uri: 'bar')
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'unlocked account' do
|
context 'with an unlocked account' do
|
||||||
before do
|
before do
|
||||||
subject.perform
|
subject.perform
|
||||||
end
|
end
|
||||||
|
@ -103,7 +103,7 @@ RSpec.describe ActivityPub::Activity::Follow do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'silenced account following an unlocked account' do
|
context 'when silenced account following an unlocked account' do
|
||||||
before do
|
before do
|
||||||
sender.touch(:silenced_at)
|
sender.touch(:silenced_at)
|
||||||
subject.perform
|
subject.perform
|
||||||
|
@ -118,7 +118,7 @@ RSpec.describe ActivityPub::Activity::Follow do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'unlocked account muting the sender' do
|
context 'with an unlocked account muting the sender' do
|
||||||
before do
|
before do
|
||||||
recipient.mute!(sender)
|
recipient.mute!(sender)
|
||||||
subject.perform
|
subject.perform
|
||||||
|
@ -133,7 +133,7 @@ RSpec.describe ActivityPub::Activity::Follow do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'locked account' do
|
context 'when locked account' do
|
||||||
before do
|
before do
|
||||||
recipient.update(locked: true)
|
recipient.update(locked: true)
|
||||||
subject.perform
|
subject.perform
|
||||||
|
@ -154,7 +154,7 @@ RSpec.describe ActivityPub::Activity::Follow do
|
||||||
sender.follow_requests.create!(target_account: recipient, uri: 'bar')
|
sender.follow_requests.create!(target_account: recipient, uri: 'bar')
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'silenced account following an unlocked account' do
|
context 'when silenced account following an unlocked account' do
|
||||||
before do
|
before do
|
||||||
sender.touch(:silenced_at)
|
sender.touch(:silenced_at)
|
||||||
subject.perform
|
subject.perform
|
||||||
|
@ -170,7 +170,7 @@ RSpec.describe ActivityPub::Activity::Follow do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'locked account' do
|
context 'when locked account' do
|
||||||
before do
|
before do
|
||||||
recipient.update(locked: true)
|
recipient.update(locked: true)
|
||||||
subject.perform
|
subject.perform
|
||||||
|
|
|
@ -27,7 +27,7 @@ RSpec.describe ActivityPub::Activity::Reject do
|
||||||
describe '#perform' do
|
describe '#perform' do
|
||||||
subject { described_class.new(json, sender) }
|
subject { described_class.new(json, sender) }
|
||||||
|
|
||||||
context 'rejecting a pending follow request by target' do
|
context 'when rejecting a pending follow request by target' do
|
||||||
before do
|
before do
|
||||||
Fabricate(:follow_request, account: recipient, target_account: sender)
|
Fabricate(:follow_request, account: recipient, target_account: sender)
|
||||||
subject.perform
|
subject.perform
|
||||||
|
@ -42,7 +42,7 @@ RSpec.describe ActivityPub::Activity::Reject do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'rejecting a pending follow request by uri' do
|
context 'when rejecting a pending follow request by uri' do
|
||||||
before do
|
before do
|
||||||
Fabricate(:follow_request, account: recipient, target_account: sender, uri: 'bar')
|
Fabricate(:follow_request, account: recipient, target_account: sender, uri: 'bar')
|
||||||
subject.perform
|
subject.perform
|
||||||
|
@ -57,7 +57,7 @@ RSpec.describe ActivityPub::Activity::Reject do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'rejecting a pending follow request by uri only' do
|
context 'when rejecting a pending follow request by uri only' do
|
||||||
let(:object_json) { 'bar' }
|
let(:object_json) { 'bar' }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
@ -74,7 +74,7 @@ RSpec.describe ActivityPub::Activity::Reject do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'rejecting an existing follow relationship by target' do
|
context 'when rejecting an existing follow relationship by target' do
|
||||||
before do
|
before do
|
||||||
Fabricate(:follow, account: recipient, target_account: sender)
|
Fabricate(:follow, account: recipient, target_account: sender)
|
||||||
subject.perform
|
subject.perform
|
||||||
|
@ -89,7 +89,7 @@ RSpec.describe ActivityPub::Activity::Reject do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'rejecting an existing follow relationship by uri' do
|
context 'when rejecting an existing follow relationship by uri' do
|
||||||
before do
|
before do
|
||||||
Fabricate(:follow, account: recipient, target_account: sender, uri: 'bar')
|
Fabricate(:follow, account: recipient, target_account: sender, uri: 'bar')
|
||||||
subject.perform
|
subject.perform
|
||||||
|
@ -104,7 +104,7 @@ RSpec.describe ActivityPub::Activity::Reject do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'rejecting an existing follow relationship by uri only' do
|
context 'when rejecting an existing follow relationship by uri only' do
|
||||||
let(:object_json) { 'bar' }
|
let(:object_json) { 'bar' }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
@ -122,7 +122,7 @@ RSpec.describe ActivityPub::Activity::Reject do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a relay' do
|
context 'when given a relay' do
|
||||||
subject { described_class.new(json, sender) }
|
subject { described_class.new(json, sender) }
|
||||||
|
|
||||||
let!(:relay) { Fabricate(:relay, state: :pending, follow_activity_id: 'https://abc-123/456') }
|
let!(:relay) { Fabricate(:relay, state: :pending, follow_activity_id: 'https://abc-123/456') }
|
||||||
|
|
|
@ -14,7 +14,7 @@ RSpec.describe EmojiFormatter do
|
||||||
|
|
||||||
let(:emojis) { [emoji] }
|
let(:emojis) { [emoji] }
|
||||||
|
|
||||||
context 'given text that is not marked as html-safe' do
|
context 'when given text that is not marked as html-safe' do
|
||||||
let(:text) { 'Foo' }
|
let(:text) { 'Foo' }
|
||||||
|
|
||||||
it 'raises an argument error' do
|
it 'raises an argument error' do
|
||||||
|
@ -22,7 +22,7 @@ RSpec.describe EmojiFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text with an emoji shortcode at the start' do
|
context 'when given text with an emoji shortcode at the start' do
|
||||||
let(:text) { preformat_text(':coolcat: Beep boop') }
|
let(:text) { preformat_text(':coolcat: Beep boop') }
|
||||||
|
|
||||||
it 'converts the shortcode to an image tag' do
|
it 'converts the shortcode to an image tag' do
|
||||||
|
@ -30,7 +30,7 @@ RSpec.describe EmojiFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text with an emoji shortcode in the middle' do
|
context 'when given text with an emoji shortcode in the middle' do
|
||||||
let(:text) { preformat_text('Beep :coolcat: boop') }
|
let(:text) { preformat_text('Beep :coolcat: boop') }
|
||||||
|
|
||||||
it 'converts the shortcode to an image tag' do
|
it 'converts the shortcode to an image tag' do
|
||||||
|
@ -38,7 +38,7 @@ RSpec.describe EmojiFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text with concatenated emoji shortcodes' do
|
context 'when given text with concatenated emoji shortcodes' do
|
||||||
let(:text) { preformat_text(':coolcat::coolcat:') }
|
let(:text) { preformat_text(':coolcat::coolcat:') }
|
||||||
|
|
||||||
it 'does not touch the shortcodes' do
|
it 'does not touch the shortcodes' do
|
||||||
|
@ -46,7 +46,7 @@ RSpec.describe EmojiFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text with an emoji shortcode at the end' do
|
context 'when given text with an emoji shortcode at the end' do
|
||||||
let(:text) { preformat_text('Beep boop :coolcat:') }
|
let(:text) { preformat_text('Beep boop :coolcat:') }
|
||||||
|
|
||||||
it 'converts the shortcode to an image tag' do
|
it 'converts the shortcode to an image tag' do
|
||||||
|
|
|
@ -9,7 +9,7 @@ RSpec.describe EntityCache do
|
||||||
describe '#emoji' do
|
describe '#emoji' do
|
||||||
subject { EntityCache.instance.emoji(shortcodes, domain) }
|
subject { EntityCache.instance.emoji(shortcodes, domain) }
|
||||||
|
|
||||||
context 'called with an empty list of shortcodes' do
|
context 'when called with an empty list of shortcodes' do
|
||||||
let(:shortcodes) { [] }
|
let(:shortcodes) { [] }
|
||||||
let(:domain) { 'example.org' }
|
let(:domain) { 'example.org' }
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ RSpec.describe FeedManager do
|
||||||
let(:bob) { Fabricate(:account, username: 'bob', domain: 'example.com') }
|
let(:bob) { Fabricate(:account, username: 'bob', domain: 'example.com') }
|
||||||
let(:jeff) { Fabricate(:account, username: 'jeff') }
|
let(:jeff) { Fabricate(:account, username: 'jeff') }
|
||||||
|
|
||||||
context 'for home feed' do
|
context 'with home feed' do
|
||||||
it 'returns false for followee\'s status' do
|
it 'returns false for followee\'s status' do
|
||||||
status = Fabricate(:status, text: 'Hello world', account: alice)
|
status = Fabricate(:status, text: 'Hello world', account: alice)
|
||||||
bob.follow!(alice)
|
bob.follow!(alice)
|
||||||
|
@ -155,7 +155,7 @@ RSpec.describe FeedManager do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for mentions feed' do
|
context 'with mentions feed' do
|
||||||
it 'returns true for status that mentions blocked account' do
|
it 'returns true for status that mentions blocked account' do
|
||||||
bob.block!(jeff)
|
bob.block!(jeff)
|
||||||
status = PostStatusService.new.call(alice, text: 'Hey @jeff')
|
status = PostStatusService.new.call(alice, text: 'Hey @jeff')
|
||||||
|
@ -196,7 +196,7 @@ RSpec.describe FeedManager do
|
||||||
expect(redis.zcard("feed:home:#{account.id}")).to eq FeedManager::MAX_ITEMS
|
expect(redis.zcard("feed:home:#{account.id}")).to eq FeedManager::MAX_ITEMS
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'reblogs' do
|
context 'with reblogs' do
|
||||||
it 'saves reblogs of unseen statuses' do
|
it 'saves reblogs of unseen statuses' do
|
||||||
account = Fabricate(:account)
|
account = Fabricate(:account)
|
||||||
reblogged = Fabricate(:status)
|
reblogged = Fabricate(:status)
|
||||||
|
|
|
@ -18,7 +18,7 @@ RSpec.describe HtmlAwareFormatter do
|
||||||
context 'when remote' do
|
context 'when remote' do
|
||||||
let(:local) { false }
|
let(:local) { false }
|
||||||
|
|
||||||
context 'given plain text' do
|
context 'when given plain text' do
|
||||||
let(:text) { 'Beep boop' }
|
let(:text) { 'Beep boop' }
|
||||||
|
|
||||||
it 'keeps the plain text' do
|
it 'keeps the plain text' do
|
||||||
|
@ -26,7 +26,7 @@ RSpec.describe HtmlAwareFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text containing script tags' do
|
context 'when given text containing script tags' do
|
||||||
let(:text) { '<script>alert("Hello")</script>' }
|
let(:text) { '<script>alert("Hello")</script>' }
|
||||||
|
|
||||||
it 'strips the scripts' do
|
it 'strips the scripts' do
|
||||||
|
@ -34,7 +34,7 @@ RSpec.describe HtmlAwareFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text containing malicious classes' do
|
context 'when given text containing malicious classes' do
|
||||||
let(:text) { '<span class="mention status__content__spoiler-link">Show more</span>' }
|
let(:text) { '<span class="mention status__content__spoiler-link">Show more</span>' }
|
||||||
|
|
||||||
it 'strips the malicious classes' do
|
it 'strips the malicious classes' do
|
||||||
|
|
|
@ -40,7 +40,7 @@ RSpec.describe LinkDetailsExtractor do
|
||||||
context 'when structured data is present' do
|
context 'when structured data is present' do
|
||||||
let(:original_url) { 'https://example.com/page.html' }
|
let(:original_url) { 'https://example.com/page.html' }
|
||||||
|
|
||||||
context 'and is wrapped in CDATA tags' do
|
context 'when is wrapped in CDATA tags' do
|
||||||
let(:html) { <<~HTML }
|
let(:html) { <<~HTML }
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
|
@ -79,7 +79,7 @@ RSpec.describe LinkDetailsExtractor do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'but the first tag is invalid JSON' do
|
context 'with the first tag is invalid JSON' do
|
||||||
let(:html) { <<~HTML }
|
let(:html) { <<~HTML }
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
|
|
|
@ -40,7 +40,7 @@ describe OStatus::TagManager do
|
||||||
describe '#uri_for' do
|
describe '#uri_for' do
|
||||||
subject { OStatus::TagManager.instance.uri_for(target) }
|
subject { OStatus::TagManager.instance.uri_for(target) }
|
||||||
|
|
||||||
context 'comment object' do
|
context 'with comment object' do
|
||||||
let(:target) { Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reply: true) }
|
let(:target) { Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reply: true) }
|
||||||
|
|
||||||
it 'returns the unique tag for status' do
|
it 'returns the unique tag for status' do
|
||||||
|
@ -49,7 +49,7 @@ describe OStatus::TagManager do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'note object' do
|
context 'with note object' do
|
||||||
let(:target) { Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reply: false, thread: nil) }
|
let(:target) { Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reply: false, thread: nil) }
|
||||||
|
|
||||||
it 'returns the unique tag for status' do
|
it 'returns the unique tag for status' do
|
||||||
|
@ -58,7 +58,7 @@ describe OStatus::TagManager do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'person object' do
|
context 'when person object' do
|
||||||
let(:target) { Fabricate(:account, username: 'alice') }
|
let(:target) { Fabricate(:account, username: 'alice') }
|
||||||
|
|
||||||
it 'returns the URL for account' do
|
it 'returns the URL for account' do
|
||||||
|
|
|
@ -20,67 +20,67 @@ describe ScopeTransformer do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for scope "read"' do
|
context 'with scope "read"' do
|
||||||
let(:input) { 'read' }
|
let(:input) { 'read' }
|
||||||
|
|
||||||
it_behaves_like 'a scope', nil, 'all', 'read'
|
it_behaves_like 'a scope', nil, 'all', 'read'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for scope "write"' do
|
context 'with scope "write"' do
|
||||||
let(:input) { 'write' }
|
let(:input) { 'write' }
|
||||||
|
|
||||||
it_behaves_like 'a scope', nil, 'all', 'write'
|
it_behaves_like 'a scope', nil, 'all', 'write'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for scope "follow"' do
|
context 'with scope "follow"' do
|
||||||
let(:input) { 'follow' }
|
let(:input) { 'follow' }
|
||||||
|
|
||||||
it_behaves_like 'a scope', nil, 'follow', 'read/write'
|
it_behaves_like 'a scope', nil, 'follow', 'read/write'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for scope "crypto"' do
|
context 'with scope "crypto"' do
|
||||||
let(:input) { 'crypto' }
|
let(:input) { 'crypto' }
|
||||||
|
|
||||||
it_behaves_like 'a scope', nil, 'crypto', 'read/write'
|
it_behaves_like 'a scope', nil, 'crypto', 'read/write'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for scope "push"' do
|
context 'with scope "push"' do
|
||||||
let(:input) { 'push' }
|
let(:input) { 'push' }
|
||||||
|
|
||||||
it_behaves_like 'a scope', nil, 'push', 'read/write'
|
it_behaves_like 'a scope', nil, 'push', 'read/write'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for scope "admin:read"' do
|
context 'with scope "admin:read"' do
|
||||||
let(:input) { 'admin:read' }
|
let(:input) { 'admin:read' }
|
||||||
|
|
||||||
it_behaves_like 'a scope', 'admin', 'all', 'read'
|
it_behaves_like 'a scope', 'admin', 'all', 'read'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for scope "admin:write"' do
|
context 'with scope "admin:write"' do
|
||||||
let(:input) { 'admin:write' }
|
let(:input) { 'admin:write' }
|
||||||
|
|
||||||
it_behaves_like 'a scope', 'admin', 'all', 'write'
|
it_behaves_like 'a scope', 'admin', 'all', 'write'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for scope "admin:read:accounts"' do
|
context 'with scope "admin:read:accounts"' do
|
||||||
let(:input) { 'admin:read:accounts' }
|
let(:input) { 'admin:read:accounts' }
|
||||||
|
|
||||||
it_behaves_like 'a scope', 'admin', 'accounts', 'read'
|
it_behaves_like 'a scope', 'admin', 'accounts', 'read'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for scope "admin:write:accounts"' do
|
context 'with scope "admin:write:accounts"' do
|
||||||
let(:input) { 'admin:write:accounts' }
|
let(:input) { 'admin:write:accounts' }
|
||||||
|
|
||||||
it_behaves_like 'a scope', 'admin', 'accounts', 'write'
|
it_behaves_like 'a scope', 'admin', 'accounts', 'write'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for scope "read:accounts"' do
|
context 'with scope "read:accounts"' do
|
||||||
let(:input) { 'read:accounts' }
|
let(:input) { 'read:accounts' }
|
||||||
|
|
||||||
it_behaves_like 'a scope', nil, 'accounts', 'read'
|
it_behaves_like 'a scope', nil, 'accounts', 'read'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for scope "write:accounts"' do
|
context 'with scope "write:accounts"' do
|
||||||
let(:input) { 'write:accounts' }
|
let(:input) { 'write:accounts' }
|
||||||
|
|
||||||
it_behaves_like 'a scope', nil, 'accounts', 'write'
|
it_behaves_like 'a scope', nil, 'accounts', 'write'
|
||||||
|
|
|
@ -44,7 +44,7 @@ describe StatusCacheHydrator do
|
||||||
let(:reblog) { Fabricate(:status) }
|
let(:reblog) { Fabricate(:status) }
|
||||||
let(:status) { Fabricate(:status, reblog: reblog) }
|
let(:status) { Fabricate(:status, reblog: reblog) }
|
||||||
|
|
||||||
context 'that has been favourited' do
|
context 'when it has been favourited' do
|
||||||
before do
|
before do
|
||||||
FavouriteService.new.call(account, reblog)
|
FavouriteService.new.call(account, reblog)
|
||||||
end
|
end
|
||||||
|
@ -54,7 +54,7 @@ describe StatusCacheHydrator do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'that has been reblogged' do
|
context 'when it has been reblogged' do
|
||||||
before do
|
before do
|
||||||
ReblogService.new.call(account, reblog)
|
ReblogService.new.call(account, reblog)
|
||||||
end
|
end
|
||||||
|
@ -64,7 +64,7 @@ describe StatusCacheHydrator do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'that has been pinned' do
|
context 'when it has been pinned' do
|
||||||
let(:reblog) { Fabricate(:status, account: account) }
|
let(:reblog) { Fabricate(:status, account: account) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
@ -76,7 +76,7 @@ describe StatusCacheHydrator do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'that has been followed tags' do
|
context 'when it has been followed tags' do
|
||||||
let(:followed_tag) { Fabricate(:tag) }
|
let(:followed_tag) { Fabricate(:tag) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
@ -90,7 +90,7 @@ describe StatusCacheHydrator do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'that has a poll authored by the user' do
|
context 'when it has a poll authored by the user' do
|
||||||
let(:poll) { Fabricate(:poll, account: account) }
|
let(:poll) { Fabricate(:poll, account: account) }
|
||||||
let(:reblog) { Fabricate(:status, poll: poll, account: account) }
|
let(:reblog) { Fabricate(:status, poll: poll, account: account) }
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ describe StatusCacheHydrator do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'that has been voted in' do
|
context 'when it has been voted in' do
|
||||||
let(:poll) { Fabricate(:poll, options: %w(Yellow Blue)) }
|
let(:poll) { Fabricate(:poll, options: %w(Yellow Blue)) }
|
||||||
let(:reblog) { Fabricate(:status, poll: poll) }
|
let(:reblog) { Fabricate(:status, poll: poll) }
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ describe StatusCacheHydrator do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'that matches account filters' do
|
context 'when it matches account filters' do
|
||||||
let(:reblog) { Fabricate(:status, text: 'this toot is about that banned word') }
|
let(:reblog) { Fabricate(:status, text: 'this toot is about that banned word') }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
|
@ -4,7 +4,7 @@ require 'rails_helper'
|
||||||
|
|
||||||
describe StatusReachFinder do
|
describe StatusReachFinder do
|
||||||
describe '#inboxes' do
|
describe '#inboxes' do
|
||||||
context 'for a local status' do
|
context 'with a local status' do
|
||||||
subject { described_class.new(status) }
|
subject { described_class.new(status) }
|
||||||
|
|
||||||
let(:parent_status) { nil }
|
let(:parent_status) { nil }
|
||||||
|
|
|
@ -8,7 +8,7 @@ RSpec.describe TextFormatter do
|
||||||
|
|
||||||
let(:preloaded_accounts) { nil }
|
let(:preloaded_accounts) { nil }
|
||||||
|
|
||||||
context 'given text containing plain text' do
|
context 'when given text containing plain text' do
|
||||||
let(:text) { 'text' }
|
let(:text) { 'text' }
|
||||||
|
|
||||||
it 'paragraphizes the text' do
|
it 'paragraphizes the text' do
|
||||||
|
@ -16,7 +16,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text containing line feeds' do
|
context 'when given text containing line feeds' do
|
||||||
let(:text) { "line\nfeed" }
|
let(:text) { "line\nfeed" }
|
||||||
|
|
||||||
it 'removes line feeds' do
|
it 'removes line feeds' do
|
||||||
|
@ -24,7 +24,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text containing linkable mentions' do
|
context 'when given text containing linkable mentions' do
|
||||||
let(:preloaded_accounts) { [Fabricate(:account, username: 'alice')] }
|
let(:preloaded_accounts) { [Fabricate(:account, username: 'alice')] }
|
||||||
let(:text) { '@alice' }
|
let(:text) { '@alice' }
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text containing unlinkable mentions' do
|
context 'when given text containing unlinkable mentions' do
|
||||||
let(:preloaded_accounts) { [] }
|
let(:preloaded_accounts) { [] }
|
||||||
let(:text) { '@alice' }
|
let(:text) { '@alice' }
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a stand-alone medium URL' do
|
context 'when given a stand-alone medium URL' do
|
||||||
let(:text) { 'https://hackernoon.com/the-power-to-build-communities-a-response-to-mark-zuckerberg-3f2cac9148a4' }
|
let(:text) { 'https://hackernoon.com/the-power-to-build-communities-a-response-to-mark-zuckerberg-3f2cac9148a4' }
|
||||||
|
|
||||||
it 'matches the full URL' do
|
it 'matches the full URL' do
|
||||||
|
@ -50,7 +50,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a stand-alone google URL' do
|
context 'when given a stand-alone google URL' do
|
||||||
let(:text) { 'http://google.com' }
|
let(:text) { 'http://google.com' }
|
||||||
|
|
||||||
it 'matches the full URL' do
|
it 'matches the full URL' do
|
||||||
|
@ -58,7 +58,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a stand-alone URL with a newer TLD' do
|
context 'when given a stand-alone URL with a newer TLD' do
|
||||||
let(:text) { 'http://example.gay' }
|
let(:text) { 'http://example.gay' }
|
||||||
|
|
||||||
it 'matches the full URL' do
|
it 'matches the full URL' do
|
||||||
|
@ -66,7 +66,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a stand-alone IDN URL' do
|
context 'when given a stand-alone IDN URL' do
|
||||||
let(:text) { 'https://nic.みんな/' }
|
let(:text) { 'https://nic.みんな/' }
|
||||||
|
|
||||||
it 'matches the full URL' do
|
it 'matches the full URL' do
|
||||||
|
@ -78,7 +78,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL with a trailing period' do
|
context 'when given a URL with a trailing period' do
|
||||||
let(:text) { 'http://www.mcmansionhell.com/post/156408871451/50-states-of-mcmansion-hell-scottsdale-arizona. ' }
|
let(:text) { 'http://www.mcmansionhell.com/post/156408871451/50-states-of-mcmansion-hell-scottsdale-arizona. ' }
|
||||||
|
|
||||||
it 'matches the full URL but not the period' do
|
it 'matches the full URL but not the period' do
|
||||||
|
@ -86,7 +86,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL enclosed with parentheses' do
|
context 'when given a URL enclosed with parentheses' do
|
||||||
let(:text) { '(http://google.com/)' }
|
let(:text) { '(http://google.com/)' }
|
||||||
|
|
||||||
it 'matches the full URL but not the parentheses' do
|
it 'matches the full URL but not the parentheses' do
|
||||||
|
@ -94,7 +94,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL with a trailing exclamation point' do
|
context 'when given a URL with a trailing exclamation point' do
|
||||||
let(:text) { 'http://www.google.com!' }
|
let(:text) { 'http://www.google.com!' }
|
||||||
|
|
||||||
it 'matches the full URL but not the exclamation point' do
|
it 'matches the full URL but not the exclamation point' do
|
||||||
|
@ -102,7 +102,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL with a trailing single quote' do
|
context 'when given a URL with a trailing single quote' do
|
||||||
let(:text) { "http://www.google.com'" }
|
let(:text) { "http://www.google.com'" }
|
||||||
|
|
||||||
it 'matches the full URL but not the single quote' do
|
it 'matches the full URL but not the single quote' do
|
||||||
|
@ -110,7 +110,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL with a trailing angle bracket' do
|
context 'when given a URL with a trailing angle bracket' do
|
||||||
let(:text) { 'http://www.google.com>' }
|
let(:text) { 'http://www.google.com>' }
|
||||||
|
|
||||||
it 'matches the full URL but not the angle bracket' do
|
it 'matches the full URL but not the angle bracket' do
|
||||||
|
@ -118,7 +118,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL with a query string' do
|
context 'when given a URL with a query string' do
|
||||||
context 'with escaped unicode character' do
|
context 'with escaped unicode character' do
|
||||||
let(:text) { 'https://www.ruby-toolbox.com/search?utf8=%E2%9C%93&q=autolink' }
|
let(:text) { 'https://www.ruby-toolbox.com/search?utf8=%E2%9C%93&q=autolink' }
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL with parentheses in it' do
|
context 'when given a URL with parentheses in it' do
|
||||||
let(:text) { 'https://en.wikipedia.org/wiki/Diaspora_(software)' }
|
let(:text) { 'https://en.wikipedia.org/wiki/Diaspora_(software)' }
|
||||||
|
|
||||||
it 'matches the full URL' do
|
it 'matches the full URL' do
|
||||||
|
@ -160,7 +160,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL in quotation marks' do
|
context 'when given a URL in quotation marks' do
|
||||||
let(:text) { '"https://example.com/"' }
|
let(:text) { '"https://example.com/"' }
|
||||||
|
|
||||||
it 'does not match the quotation marks' do
|
it 'does not match the quotation marks' do
|
||||||
|
@ -168,7 +168,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL in angle brackets' do
|
context 'when given a URL in angle brackets' do
|
||||||
let(:text) { '<https://example.com/>' }
|
let(:text) { '<https://example.com/>' }
|
||||||
|
|
||||||
it 'does not match the angle brackets' do
|
it 'does not match the angle brackets' do
|
||||||
|
@ -176,7 +176,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL with Japanese path string' do
|
context 'when given a URL with Japanese path string' do
|
||||||
let(:text) { 'https://ja.wikipedia.org/wiki/日本' }
|
let(:text) { 'https://ja.wikipedia.org/wiki/日本' }
|
||||||
|
|
||||||
it 'matches the full URL' do
|
it 'matches the full URL' do
|
||||||
|
@ -184,7 +184,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL with Korean path string' do
|
context 'when given a URL with Korean path string' do
|
||||||
let(:text) { 'https://ko.wikipedia.org/wiki/대한민국' }
|
let(:text) { 'https://ko.wikipedia.org/wiki/대한민국' }
|
||||||
|
|
||||||
it 'matches the full URL' do
|
it 'matches the full URL' do
|
||||||
|
@ -192,7 +192,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL with a full-width space' do
|
context 'when given a URL with a full-width space' do
|
||||||
let(:text) { 'https://example.com/ abc123' }
|
let(:text) { 'https://example.com/ abc123' }
|
||||||
|
|
||||||
it 'does not match the full-width space' do
|
it 'does not match the full-width space' do
|
||||||
|
@ -200,7 +200,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL in Japanese quotation marks' do
|
context 'when given a URL in Japanese quotation marks' do
|
||||||
let(:text) { '「[https://example.org/」' }
|
let(:text) { '「[https://example.org/」' }
|
||||||
|
|
||||||
it 'does not match the quotation marks' do
|
it 'does not match the quotation marks' do
|
||||||
|
@ -208,7 +208,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL with Simplified Chinese path string' do
|
context 'when given a URL with Simplified Chinese path string' do
|
||||||
let(:text) { 'https://baike.baidu.com/item/中华人民共和国' }
|
let(:text) { 'https://baike.baidu.com/item/中华人民共和国' }
|
||||||
|
|
||||||
it 'matches the full URL' do
|
it 'matches the full URL' do
|
||||||
|
@ -216,7 +216,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL with Traditional Chinese path string' do
|
context 'when given a URL with Traditional Chinese path string' do
|
||||||
let(:text) { 'https://zh.wikipedia.org/wiki/臺灣' }
|
let(:text) { 'https://zh.wikipedia.org/wiki/臺灣' }
|
||||||
|
|
||||||
it 'matches the full URL' do
|
it 'matches the full URL' do
|
||||||
|
@ -224,7 +224,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL containing unsafe code (XSS attack, visible part)' do
|
context 'when given a URL containing unsafe code (XSS attack, visible part)' do
|
||||||
let(:text) { 'http://example.com/b<del>b</del>' }
|
let(:text) { 'http://example.com/b<del>b</del>' }
|
||||||
|
|
||||||
it 'does not include the HTML in the URL' do
|
it 'does not include the HTML in the URL' do
|
||||||
|
@ -236,7 +236,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a URL containing unsafe code (XSS attack, invisible part)' do
|
context 'when given a URL containing unsafe code (XSS attack, invisible part)' do
|
||||||
let(:text) { 'http://example.com/blahblahblahblah/a<script>alert("Hello")</script>' }
|
let(:text) { 'http://example.com/blahblahblahblah/a<script>alert("Hello")</script>' }
|
||||||
|
|
||||||
it 'does not include the HTML in the URL' do
|
it 'does not include the HTML in the URL' do
|
||||||
|
@ -248,7 +248,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text containing HTML code (script tag)' do
|
context 'when given text containing HTML code (script tag)' do
|
||||||
let(:text) { '<script>alert("Hello")</script>' }
|
let(:text) { '<script>alert("Hello")</script>' }
|
||||||
|
|
||||||
it 'escapes the HTML' do
|
it 'escapes the HTML' do
|
||||||
|
@ -256,7 +256,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text containing HTML (XSS attack)' do
|
context 'when given text containing HTML (XSS attack)' do
|
||||||
let(:text) { %q{<img src="javascript:alert('XSS');">} }
|
let(:text) { %q{<img src="javascript:alert('XSS');">} }
|
||||||
|
|
||||||
it 'escapes the HTML' do
|
it 'escapes the HTML' do
|
||||||
|
@ -264,7 +264,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given an invalid URL' do
|
context 'when given an invalid URL' do
|
||||||
let(:text) { 'http://www\.google\.com' }
|
let(:text) { 'http://www\.google\.com' }
|
||||||
|
|
||||||
it 'outputs the raw URL' do
|
it 'outputs the raw URL' do
|
||||||
|
@ -272,7 +272,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text containing a hashtag' do
|
context 'when given text containing a hashtag' do
|
||||||
let(:text) { '#hashtag' }
|
let(:text) { '#hashtag' }
|
||||||
|
|
||||||
it 'creates a hashtag link' do
|
it 'creates a hashtag link' do
|
||||||
|
@ -280,7 +280,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text containing a hashtag with Unicode chars' do
|
context 'when given text containing a hashtag with Unicode chars' do
|
||||||
let(:text) { '#hashtagタグ' }
|
let(:text) { '#hashtagタグ' }
|
||||||
|
|
||||||
it 'creates a hashtag link' do
|
it 'creates a hashtag link' do
|
||||||
|
@ -288,7 +288,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text with a stand-alone xmpp: URI' do
|
context 'when given text with a stand-alone xmpp: URI' do
|
||||||
let(:text) { 'xmpp:user@instance.com' }
|
let(:text) { 'xmpp:user@instance.com' }
|
||||||
|
|
||||||
it 'matches the full URI' do
|
it 'matches the full URI' do
|
||||||
|
@ -296,7 +296,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text with an xmpp: URI with a query-string' do
|
context 'when given text with an xmpp: URI with a query-string' do
|
||||||
let(:text) { 'please join xmpp:muc@instance.com?join right now' }
|
let(:text) { 'please join xmpp:muc@instance.com?join right now' }
|
||||||
|
|
||||||
it 'matches the full URI' do
|
it 'matches the full URI' do
|
||||||
|
@ -304,7 +304,7 @@ RSpec.describe TextFormatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given text containing a magnet: URI' do
|
context 'when given text containing a magnet: URI' do
|
||||||
let(:text) { 'wikipedia gives this example of a magnet uri: magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a' }
|
let(:text) { 'wikipedia gives this example of a magnet uri: magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a' }
|
||||||
|
|
||||||
it 'matches the full URI' do
|
it 'matches the full URI' do
|
||||||
|
|
|
@ -49,10 +49,10 @@ RSpec.describe Account::Field, type: :model do
|
||||||
|
|
||||||
let(:account) { double('Account', local?: local) }
|
let(:account) { double('Account', local?: local) }
|
||||||
|
|
||||||
context 'for local accounts' do
|
context 'with local accounts' do
|
||||||
let(:local) { true }
|
let(:local) { true }
|
||||||
|
|
||||||
context 'for a URL with misleading authentication' do
|
context 'with a URL with misleading authentication' do
|
||||||
let(:value) { 'https://spacex.com @h.43z.one' }
|
let(:value) { 'https://spacex.com @h.43z.one' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -60,7 +60,7 @@ RSpec.describe Account::Field, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for a URL' do
|
context 'with a URL' do
|
||||||
let(:value) { 'https://example.com' }
|
let(:value) { 'https://example.com' }
|
||||||
|
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
|
@ -68,7 +68,7 @@ RSpec.describe Account::Field, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for an IDN URL' do
|
context 'with an IDN URL' do
|
||||||
let(:value) { 'https://twitter.com∕dougallj∕status∕1590357240443437057.ê.cc/twitter.html' }
|
let(:value) { 'https://twitter.com∕dougallj∕status∕1590357240443437057.ê.cc/twitter.html' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -76,7 +76,7 @@ RSpec.describe Account::Field, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for a URL with a non-normalized path' do
|
context 'with a URL with a non-normalized path' do
|
||||||
let(:value) { 'https://github.com/octocatxxxxxxxx/../mastodon' }
|
let(:value) { 'https://github.com/octocatxxxxxxxx/../mastodon' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -84,7 +84,7 @@ RSpec.describe Account::Field, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for text that is not a URL' do
|
context 'with text that is not a URL' do
|
||||||
let(:value) { 'Hello world' }
|
let(:value) { 'Hello world' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -92,7 +92,7 @@ RSpec.describe Account::Field, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for text that contains a URL' do
|
context 'with text that contains a URL' do
|
||||||
let(:value) { 'Hello https://example.com world' }
|
let(:value) { 'Hello https://example.com world' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -100,7 +100,7 @@ RSpec.describe Account::Field, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for text which is blank' do
|
context 'with text which is blank' do
|
||||||
let(:value) { '' }
|
let(:value) { '' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -109,10 +109,10 @@ RSpec.describe Account::Field, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for remote accounts' do
|
context 'with remote accounts' do
|
||||||
let(:local) { false }
|
let(:local) { false }
|
||||||
|
|
||||||
context 'for a link' do
|
context 'with a link' do
|
||||||
let(:value) { '<a href="https://www.patreon.com/mastodon" target="_blank" rel="nofollow noopener noreferrer me"><span class="invisible">https://www.</span><span class="">patreon.com/mastodon</span><span class="invisible"></span></a>' }
|
let(:value) { '<a href="https://www.patreon.com/mastodon" target="_blank" rel="nofollow noopener noreferrer me"><span class="invisible">https://www.</span><span class="">patreon.com/mastodon</span><span class="invisible"></span></a>' }
|
||||||
|
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
|
@ -120,7 +120,7 @@ RSpec.describe Account::Field, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for a link with misleading authentication' do
|
context 'with a link with misleading authentication' do
|
||||||
let(:value) { '<a href="https://google.com @h.43z.one" target="_blank" rel="nofollow noopener noreferrer me"><span class="invisible">https://</span><span class="">google.com</span><span class="invisible"> @h.43z.one</span></a>' }
|
let(:value) { '<a href="https://google.com @h.43z.one" target="_blank" rel="nofollow noopener noreferrer me"><span class="invisible">https://</span><span class="">google.com</span><span class="invisible"> @h.43z.one</span></a>' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -128,7 +128,7 @@ RSpec.describe Account::Field, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for HTML that has more than just a link' do
|
context 'with HTML that has more than just a link' do
|
||||||
let(:value) { '<a href="https://google.com" target="_blank" rel="nofollow noopener noreferrer me"><span class="invisible">https://</span><span class="">google.com</span><span class="invisible"></span></a> @h.43z.one' }
|
let(:value) { '<a href="https://google.com" target="_blank" rel="nofollow noopener noreferrer me"><span class="invisible">https://</span><span class="">google.com</span><span class="invisible"></span></a> @h.43z.one' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -136,7 +136,7 @@ RSpec.describe Account::Field, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for a link with different visible text' do
|
context 'with a link with different visible text' do
|
||||||
let(:value) { '<a href="https://google.com/bar">https://example.com/foo</a>' }
|
let(:value) { '<a href="https://google.com/bar">https://example.com/foo</a>' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -144,7 +144,7 @@ RSpec.describe Account::Field, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for text that is a URL but is not linked' do
|
context 'with text that is a URL but is not linked' do
|
||||||
let(:value) { 'https://example.com/foo' }
|
let(:value) { 'https://example.com/foo' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -152,7 +152,7 @@ RSpec.describe Account::Field, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for text which is blank' do
|
context 'with text which is blank' do
|
||||||
let(:value) { '' }
|
let(:value) { '' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
|
|
@ -171,7 +171,7 @@ RSpec.describe Account, type: :model do
|
||||||
describe '#possibly_stale?' do
|
describe '#possibly_stale?' do
|
||||||
let(:account) { Fabricate(:account, last_webfingered_at: last_webfingered_at) }
|
let(:account) { Fabricate(:account, last_webfingered_at: last_webfingered_at) }
|
||||||
|
|
||||||
context 'last_webfingered_at is nil' do
|
context 'when last_webfingered_at is nil' do
|
||||||
let(:last_webfingered_at) { nil }
|
let(:last_webfingered_at) { nil }
|
||||||
|
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
|
@ -179,7 +179,7 @@ RSpec.describe Account, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'last_webfingered_at is more than 24 hours before' do
|
context 'when last_webfingered_at is more than 24 hours before' do
|
||||||
let(:last_webfingered_at) { 25.hours.ago }
|
let(:last_webfingered_at) { 25.hours.ago }
|
||||||
|
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
|
@ -187,7 +187,7 @@ RSpec.describe Account, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'last_webfingered_at is less than 24 hours before' do
|
context 'when last_webfingered_at is less than 24 hours before' do
|
||||||
let(:last_webfingered_at) { 23.hours.ago }
|
let(:last_webfingered_at) { 23.hours.ago }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -200,7 +200,7 @@ RSpec.describe Account, type: :model do
|
||||||
let(:account) { Fabricate(:account, domain: domain) }
|
let(:account) { Fabricate(:account, domain: domain) }
|
||||||
let(:acct) { account.acct }
|
let(:acct) { account.acct }
|
||||||
|
|
||||||
context 'domain is nil' do
|
context 'when domain is nil' do
|
||||||
let(:domain) { nil }
|
let(:domain) { nil }
|
||||||
|
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
|
@ -213,7 +213,7 @@ RSpec.describe Account, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'domain is present' do
|
context 'when domain is present' do
|
||||||
let(:domain) { 'example.com' }
|
let(:domain) { 'example.com' }
|
||||||
|
|
||||||
it 'calls ResolveAccountService#call' do
|
it 'calls ResolveAccountService#call' do
|
||||||
|
|
|
@ -20,7 +20,7 @@ RSpec.describe Admin::AccountAction, type: :model do
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'type is "disable"' do
|
context 'when type is "disable"' do
|
||||||
let(:type) { 'disable' }
|
let(:type) { 'disable' }
|
||||||
|
|
||||||
it 'disable user' do
|
it 'disable user' do
|
||||||
|
@ -29,7 +29,7 @@ RSpec.describe Admin::AccountAction, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'type is "silence"' do
|
context 'when type is "silence"' do
|
||||||
let(:type) { 'silence' }
|
let(:type) { 'silence' }
|
||||||
|
|
||||||
it 'silences account' do
|
it 'silences account' do
|
||||||
|
@ -38,7 +38,7 @@ RSpec.describe Admin::AccountAction, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'type is "suspend"' do
|
context 'when type is "suspend"' do
|
||||||
let(:type) { 'suspend' }
|
let(:type) { 'suspend' }
|
||||||
|
|
||||||
it 'suspends account' do
|
it 'suspends account' do
|
||||||
|
@ -75,7 +75,7 @@ RSpec.describe Admin::AccountAction, type: :model do
|
||||||
describe '#report' do
|
describe '#report' do
|
||||||
subject { account_action.report }
|
subject { account_action.report }
|
||||||
|
|
||||||
context 'report_id.present?' do
|
context 'with report_id.present?' do
|
||||||
before do
|
before do
|
||||||
account_action.report_id = Fabricate(:report).id
|
account_action.report_id = Fabricate(:report).id
|
||||||
end
|
end
|
||||||
|
@ -85,7 +85,7 @@ RSpec.describe Admin::AccountAction, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!report_id.present?' do
|
context 'with !report_id.present?' do
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
expect(subject).to be_nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
@ -95,7 +95,7 @@ RSpec.describe Admin::AccountAction, type: :model do
|
||||||
describe '#with_report?' do
|
describe '#with_report?' do
|
||||||
subject { account_action.with_report? }
|
subject { account_action.with_report? }
|
||||||
|
|
||||||
context '!report.nil?' do
|
context 'with !report.nil?' do
|
||||||
before do
|
before do
|
||||||
account_action.report_id = Fabricate(:report).id
|
account_action.report_id = Fabricate(:report).id
|
||||||
end
|
end
|
||||||
|
@ -105,7 +105,7 @@ RSpec.describe Admin::AccountAction, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!(!report.nil?)' do
|
context 'with !(!report.nil?)' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
expect(subject).to be false
|
expect(subject).to be false
|
||||||
end
|
end
|
||||||
|
@ -115,7 +115,7 @@ RSpec.describe Admin::AccountAction, type: :model do
|
||||||
describe '.types_for_account' do
|
describe '.types_for_account' do
|
||||||
subject { described_class.types_for_account(account) }
|
subject { described_class.types_for_account(account) }
|
||||||
|
|
||||||
context 'account.local?' do
|
context 'when Account.local?' do
|
||||||
let(:account) { Fabricate(:account, domain: nil) }
|
let(:account) { Fabricate(:account, domain: nil) }
|
||||||
|
|
||||||
it 'returns ["none", "disable", "sensitive", "silence", "suspend"]' do
|
it 'returns ["none", "disable", "sensitive", "silence", "suspend"]' do
|
||||||
|
@ -123,7 +123,7 @@ RSpec.describe Admin::AccountAction, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!account.local?' do
|
context 'with !account.local?' do
|
||||||
let(:account) { Fabricate(:account, domain: 'hoge.com') }
|
let(:account) { Fabricate(:account, domain: 'hoge.com') }
|
||||||
|
|
||||||
it 'returns ["sensitive", "silence", "suspend"]' do
|
it 'returns ["sensitive", "silence", "suspend"]' do
|
||||||
|
|
|
@ -13,14 +13,14 @@ describe AccountInteractions do
|
||||||
describe '.following_map' do
|
describe '.following_map' do
|
||||||
subject { Account.following_map(target_account_ids, account_id) }
|
subject { Account.following_map(target_account_ids, account_id) }
|
||||||
|
|
||||||
context 'account with Follow' do
|
context 'when Account with Follow' do
|
||||||
it 'returns { target_account_id => true }' do
|
it 'returns { target_account_id => true }' do
|
||||||
Fabricate(:follow, account: account, target_account: target_account)
|
Fabricate(:follow, account: account, target_account: target_account)
|
||||||
expect(subject).to eq(target_account_id => { reblogs: true, notify: false, languages: nil })
|
expect(subject).to eq(target_account_id => { reblogs: true, notify: false, languages: nil })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'account without Follow' do
|
context 'when Account without Follow' do
|
||||||
it 'returns {}' do
|
it 'returns {}' do
|
||||||
expect(subject).to eq({})
|
expect(subject).to eq({})
|
||||||
end
|
end
|
||||||
|
@ -30,14 +30,14 @@ describe AccountInteractions do
|
||||||
describe '.followed_by_map' do
|
describe '.followed_by_map' do
|
||||||
subject { Account.followed_by_map(target_account_ids, account_id) }
|
subject { Account.followed_by_map(target_account_ids, account_id) }
|
||||||
|
|
||||||
context 'account with Follow' do
|
context 'when Account with Follow' do
|
||||||
it 'returns { target_account_id => true }' do
|
it 'returns { target_account_id => true }' do
|
||||||
Fabricate(:follow, account: target_account, target_account: account)
|
Fabricate(:follow, account: target_account, target_account: account)
|
||||||
expect(subject).to eq(target_account_id => true)
|
expect(subject).to eq(target_account_id => true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'account without Follow' do
|
context 'when Account without Follow' do
|
||||||
it 'returns {}' do
|
it 'returns {}' do
|
||||||
expect(subject).to eq({})
|
expect(subject).to eq({})
|
||||||
end
|
end
|
||||||
|
@ -47,14 +47,14 @@ describe AccountInteractions do
|
||||||
describe '.blocking_map' do
|
describe '.blocking_map' do
|
||||||
subject { Account.blocking_map(target_account_ids, account_id) }
|
subject { Account.blocking_map(target_account_ids, account_id) }
|
||||||
|
|
||||||
context 'account with Block' do
|
context 'when Account with Block' do
|
||||||
it 'returns { target_account_id => true }' do
|
it 'returns { target_account_id => true }' do
|
||||||
Fabricate(:block, account: account, target_account: target_account)
|
Fabricate(:block, account: account, target_account: target_account)
|
||||||
expect(subject).to eq(target_account_id => true)
|
expect(subject).to eq(target_account_id => true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'account without Block' do
|
context 'when Account without Block' do
|
||||||
it 'returns {}' do
|
it 'returns {}' do
|
||||||
expect(subject).to eq({})
|
expect(subject).to eq({})
|
||||||
end
|
end
|
||||||
|
@ -64,12 +64,12 @@ describe AccountInteractions do
|
||||||
describe '.muting_map' do
|
describe '.muting_map' do
|
||||||
subject { Account.muting_map(target_account_ids, account_id) }
|
subject { Account.muting_map(target_account_ids, account_id) }
|
||||||
|
|
||||||
context 'account with Mute' do
|
context 'when Account with Mute' do
|
||||||
before do
|
before do
|
||||||
Fabricate(:mute, target_account: target_account, account: account, hide_notifications: hide)
|
Fabricate(:mute, target_account: target_account, account: account, hide_notifications: hide)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'if Mute#hide_notifications?' do
|
context 'when Mute#hide_notifications?' do
|
||||||
let(:hide) { true }
|
let(:hide) { true }
|
||||||
|
|
||||||
it 'returns { target_account_id => { notifications: true } }' do
|
it 'returns { target_account_id => { notifications: true } }' do
|
||||||
|
@ -77,7 +77,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'unless Mute#hide_notifications?' do
|
context 'when not Mute#hide_notifications?' do
|
||||||
let(:hide) { false }
|
let(:hide) { false }
|
||||||
|
|
||||||
it 'returns { target_account_id => { notifications: false } }' do
|
it 'returns { target_account_id => { notifications: false } }' do
|
||||||
|
@ -86,7 +86,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'account without Mute' do
|
context 'when Account without Mute' do
|
||||||
it 'returns {}' do
|
it 'returns {}' do
|
||||||
expect(subject).to eq({})
|
expect(subject).to eq({})
|
||||||
end
|
end
|
||||||
|
@ -112,8 +112,8 @@ describe AccountInteractions do
|
||||||
describe '#mute!' do
|
describe '#mute!' do
|
||||||
subject { account.mute!(target_account, notifications: arg_notifications) }
|
subject { account.mute!(target_account, notifications: arg_notifications) }
|
||||||
|
|
||||||
context 'Mute does not exist yet' do
|
context 'when Mute does not exist yet' do
|
||||||
context 'arg :notifications is nil' do
|
context 'when arg :notifications is nil' do
|
||||||
let(:arg_notifications) { nil }
|
let(:arg_notifications) { nil }
|
||||||
|
|
||||||
it 'creates Mute, and returns Mute' do
|
it 'creates Mute, and returns Mute' do
|
||||||
|
@ -123,7 +123,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'arg :notifications is false' do
|
context 'when arg :notifications is false' do
|
||||||
let(:arg_notifications) { false }
|
let(:arg_notifications) { false }
|
||||||
|
|
||||||
it 'creates Mute, and returns Mute' do
|
it 'creates Mute, and returns Mute' do
|
||||||
|
@ -133,7 +133,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'arg :notifications is true' do
|
context 'when arg :notifications is true' do
|
||||||
let(:arg_notifications) { true }
|
let(:arg_notifications) { true }
|
||||||
|
|
||||||
it 'creates Mute, and returns Mute' do
|
it 'creates Mute, and returns Mute' do
|
||||||
|
@ -144,7 +144,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Mute already exists' do
|
context 'when Mute already exists' do
|
||||||
before do
|
before do
|
||||||
account.mute_relationships << mute
|
account.mute_relationships << mute
|
||||||
end
|
end
|
||||||
|
@ -156,10 +156,10 @@ describe AccountInteractions do
|
||||||
hide_notifications: hide_notifications)
|
hide_notifications: hide_notifications)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'mute.hide_notifications is true' do
|
context 'when mute.hide_notifications is true' do
|
||||||
let(:hide_notifications) { true }
|
let(:hide_notifications) { true }
|
||||||
|
|
||||||
context 'arg :notifications is nil' do
|
context 'when arg :notifications is nil' do
|
||||||
let(:arg_notifications) { nil }
|
let(:arg_notifications) { nil }
|
||||||
|
|
||||||
it 'returns Mute without updating mute.hide_notifications' do
|
it 'returns Mute without updating mute.hide_notifications' do
|
||||||
|
@ -169,7 +169,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'arg :notifications is false' do
|
context 'when arg :notifications is false' do
|
||||||
let(:arg_notifications) { false }
|
let(:arg_notifications) { false }
|
||||||
|
|
||||||
it 'returns Mute, and updates mute.hide_notifications false' do
|
it 'returns Mute, and updates mute.hide_notifications false' do
|
||||||
|
@ -179,7 +179,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'arg :notifications is true' do
|
context 'when arg :notifications is true' do
|
||||||
let(:arg_notifications) { true }
|
let(:arg_notifications) { true }
|
||||||
|
|
||||||
it 'returns Mute without updating mute.hide_notifications' do
|
it 'returns Mute without updating mute.hide_notifications' do
|
||||||
|
@ -190,10 +190,10 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'mute.hide_notifications is false' do
|
context 'when mute.hide_notifications is false' do
|
||||||
let(:hide_notifications) { false }
|
let(:hide_notifications) { false }
|
||||||
|
|
||||||
context 'arg :notifications is nil' do
|
context 'when arg :notifications is nil' do
|
||||||
let(:arg_notifications) { nil }
|
let(:arg_notifications) { nil }
|
||||||
|
|
||||||
it 'returns Mute, and updates mute.hide_notifications true' do
|
it 'returns Mute, and updates mute.hide_notifications true' do
|
||||||
|
@ -203,7 +203,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'arg :notifications is false' do
|
context 'when arg :notifications is false' do
|
||||||
let(:arg_notifications) { false }
|
let(:arg_notifications) { false }
|
||||||
|
|
||||||
it 'returns Mute without updating mute.hide_notifications' do
|
it 'returns Mute without updating mute.hide_notifications' do
|
||||||
|
@ -213,7 +213,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'arg :notifications is true' do
|
context 'when arg :notifications is true' do
|
||||||
let(:arg_notifications) { true }
|
let(:arg_notifications) { true }
|
||||||
|
|
||||||
it 'returns Mute, and updates mute.hide_notifications true' do
|
it 'returns Mute, and updates mute.hide_notifications true' do
|
||||||
|
@ -253,7 +253,7 @@ describe AccountInteractions do
|
||||||
describe '#unfollow!' do
|
describe '#unfollow!' do
|
||||||
subject { account.unfollow!(target_account) }
|
subject { account.unfollow!(target_account) }
|
||||||
|
|
||||||
context 'following target_account' do
|
context 'when following target_account' do
|
||||||
it 'returns destroyed Follow' do
|
it 'returns destroyed Follow' do
|
||||||
account.active_relationships.create(target_account: target_account)
|
account.active_relationships.create(target_account: target_account)
|
||||||
expect(subject).to be_a Follow
|
expect(subject).to be_a Follow
|
||||||
|
@ -261,7 +261,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not following target_account' do
|
context 'when not following target_account' do
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
expect(subject).to be_nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
@ -271,7 +271,7 @@ describe AccountInteractions do
|
||||||
describe '#unblock!' do
|
describe '#unblock!' do
|
||||||
subject { account.unblock!(target_account) }
|
subject { account.unblock!(target_account) }
|
||||||
|
|
||||||
context 'blocking target_account' do
|
context 'when blocking target_account' do
|
||||||
it 'returns destroyed Block' do
|
it 'returns destroyed Block' do
|
||||||
account.block_relationships.create(target_account: target_account)
|
account.block_relationships.create(target_account: target_account)
|
||||||
expect(subject).to be_a Block
|
expect(subject).to be_a Block
|
||||||
|
@ -279,7 +279,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not blocking target_account' do
|
context 'when not blocking target_account' do
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
expect(subject).to be_nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
@ -289,7 +289,7 @@ describe AccountInteractions do
|
||||||
describe '#unmute!' do
|
describe '#unmute!' do
|
||||||
subject { account.unmute!(target_account) }
|
subject { account.unmute!(target_account) }
|
||||||
|
|
||||||
context 'muting target_account' do
|
context 'when muting target_account' do
|
||||||
it 'returns destroyed Mute' do
|
it 'returns destroyed Mute' do
|
||||||
account.mute_relationships.create(target_account: target_account)
|
account.mute_relationships.create(target_account: target_account)
|
||||||
expect(subject).to be_a Mute
|
expect(subject).to be_a Mute
|
||||||
|
@ -297,7 +297,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not muting target_account' do
|
context 'when not muting target_account' do
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
expect(subject).to be_nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
@ -309,7 +309,7 @@ describe AccountInteractions do
|
||||||
|
|
||||||
let(:conversation) { Fabricate(:conversation) }
|
let(:conversation) { Fabricate(:conversation) }
|
||||||
|
|
||||||
context 'muting the conversation' do
|
context 'when muting the conversation' do
|
||||||
it 'returns destroyed ConversationMute' do
|
it 'returns destroyed ConversationMute' do
|
||||||
account.conversation_mutes.create(conversation: conversation)
|
account.conversation_mutes.create(conversation: conversation)
|
||||||
expect(subject).to be_a ConversationMute
|
expect(subject).to be_a ConversationMute
|
||||||
|
@ -317,7 +317,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not muting the conversation' do
|
context 'when not muting the conversation' do
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
expect(subject).to be_nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
@ -329,7 +329,7 @@ describe AccountInteractions do
|
||||||
|
|
||||||
let(:domain) { 'example.com' }
|
let(:domain) { 'example.com' }
|
||||||
|
|
||||||
context 'blocking the domain' do
|
context 'when blocking the domain' do
|
||||||
it 'returns destroyed AccountDomainBlock' do
|
it 'returns destroyed AccountDomainBlock' do
|
||||||
account_domain_block = Fabricate(:account_domain_block, domain: domain)
|
account_domain_block = Fabricate(:account_domain_block, domain: domain)
|
||||||
account.domain_blocks << account_domain_block
|
account.domain_blocks << account_domain_block
|
||||||
|
@ -338,7 +338,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'unblocking the domain' do
|
context 'when unblocking the domain' do
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
expect(subject).to be_nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
@ -348,14 +348,14 @@ describe AccountInteractions do
|
||||||
describe '#following?' do
|
describe '#following?' do
|
||||||
subject { account.following?(target_account) }
|
subject { account.following?(target_account) }
|
||||||
|
|
||||||
context 'following target_account' do
|
context 'when following target_account' do
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
account.active_relationships.create(target_account: target_account)
|
account.active_relationships.create(target_account: target_account)
|
||||||
expect(subject).to be true
|
expect(subject).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not following target_account' do
|
context 'when not following target_account' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
expect(subject).to be false
|
expect(subject).to be false
|
||||||
end
|
end
|
||||||
|
@ -365,14 +365,14 @@ describe AccountInteractions do
|
||||||
describe '#followed_by?' do
|
describe '#followed_by?' do
|
||||||
subject { account.followed_by?(target_account) }
|
subject { account.followed_by?(target_account) }
|
||||||
|
|
||||||
context 'followed by target_account' do
|
context 'when followed by target_account' do
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
account.passive_relationships.create(account: target_account)
|
account.passive_relationships.create(account: target_account)
|
||||||
expect(subject).to be true
|
expect(subject).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not followed by target_account' do
|
context 'when not followed by target_account' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
expect(subject).to be false
|
expect(subject).to be false
|
||||||
end
|
end
|
||||||
|
@ -382,14 +382,14 @@ describe AccountInteractions do
|
||||||
describe '#blocking?' do
|
describe '#blocking?' do
|
||||||
subject { account.blocking?(target_account) }
|
subject { account.blocking?(target_account) }
|
||||||
|
|
||||||
context 'blocking target_account' do
|
context 'when blocking target_account' do
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
account.block_relationships.create(target_account: target_account)
|
account.block_relationships.create(target_account: target_account)
|
||||||
expect(subject).to be true
|
expect(subject).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not blocking target_account' do
|
context 'when not blocking target_account' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
expect(subject).to be false
|
expect(subject).to be false
|
||||||
end
|
end
|
||||||
|
@ -401,7 +401,7 @@ describe AccountInteractions do
|
||||||
|
|
||||||
let(:domain) { 'example.com' }
|
let(:domain) { 'example.com' }
|
||||||
|
|
||||||
context 'blocking the domain' do
|
context 'when blocking the domain' do
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
account_domain_block = Fabricate(:account_domain_block, domain: domain)
|
account_domain_block = Fabricate(:account_domain_block, domain: domain)
|
||||||
account.domain_blocks << account_domain_block
|
account.domain_blocks << account_domain_block
|
||||||
|
@ -409,7 +409,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not blocking the domain' do
|
context 'when not blocking the domain' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
expect(subject).to be false
|
expect(subject).to be false
|
||||||
end
|
end
|
||||||
|
@ -419,7 +419,7 @@ describe AccountInteractions do
|
||||||
describe '#muting?' do
|
describe '#muting?' do
|
||||||
subject { account.muting?(target_account) }
|
subject { account.muting?(target_account) }
|
||||||
|
|
||||||
context 'muting target_account' do
|
context 'when muting target_account' do
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
mute = Fabricate(:mute, account: account, target_account: target_account)
|
mute = Fabricate(:mute, account: account, target_account: target_account)
|
||||||
account.mute_relationships << mute
|
account.mute_relationships << mute
|
||||||
|
@ -427,7 +427,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not muting target_account' do
|
context 'when not muting target_account' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
expect(subject).to be false
|
expect(subject).to be false
|
||||||
end
|
end
|
||||||
|
@ -439,14 +439,14 @@ describe AccountInteractions do
|
||||||
|
|
||||||
let(:conversation) { Fabricate(:conversation) }
|
let(:conversation) { Fabricate(:conversation) }
|
||||||
|
|
||||||
context 'muting the conversation' do
|
context 'when muting the conversation' do
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
account.conversation_mutes.create(conversation: conversation)
|
account.conversation_mutes.create(conversation: conversation)
|
||||||
expect(subject).to be true
|
expect(subject).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not muting the conversation' do
|
context 'when not muting the conversation' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
expect(subject).to be false
|
expect(subject).to be false
|
||||||
end
|
end
|
||||||
|
@ -461,7 +461,7 @@ describe AccountInteractions do
|
||||||
account.mute_relationships << mute
|
account.mute_relationships << mute
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'muting notifications of target_account' do
|
context 'when muting notifications of target_account' do
|
||||||
let(:hide) { true }
|
let(:hide) { true }
|
||||||
|
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
|
@ -469,7 +469,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not muting notifications of target_account' do
|
context 'when not muting notifications of target_account' do
|
||||||
let(:hide) { false }
|
let(:hide) { false }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -481,14 +481,14 @@ describe AccountInteractions do
|
||||||
describe '#requested?' do
|
describe '#requested?' do
|
||||||
subject { account.requested?(target_account) }
|
subject { account.requested?(target_account) }
|
||||||
|
|
||||||
context 'requested by target_account' do
|
context 'with requested by target_account' do
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
Fabricate(:follow_request, account: account, target_account: target_account)
|
Fabricate(:follow_request, account: account, target_account: target_account)
|
||||||
expect(subject).to be true
|
expect(subject).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not requested by target_account' do
|
context 'when not requested by target_account' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
expect(subject).to be false
|
expect(subject).to be false
|
||||||
end
|
end
|
||||||
|
@ -500,7 +500,7 @@ describe AccountInteractions do
|
||||||
|
|
||||||
let(:status) { Fabricate(:status, account: account, favourites: favourites) }
|
let(:status) { Fabricate(:status, account: account, favourites: favourites) }
|
||||||
|
|
||||||
context 'favorited' do
|
context 'when favorited' do
|
||||||
let(:favourites) { [Fabricate(:favourite, account: account)] }
|
let(:favourites) { [Fabricate(:favourite, account: account)] }
|
||||||
|
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
|
@ -508,7 +508,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not favorited' do
|
context 'when not favorited' do
|
||||||
let(:favourites) { [] }
|
let(:favourites) { [] }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -522,7 +522,7 @@ describe AccountInteractions do
|
||||||
|
|
||||||
let(:status) { Fabricate(:status, account: account, reblogs: reblogs) }
|
let(:status) { Fabricate(:status, account: account, reblogs: reblogs) }
|
||||||
|
|
||||||
context 'reblogged' do
|
context 'with reblogged' do
|
||||||
let(:reblogs) { [Fabricate(:status, account: account)] }
|
let(:reblogs) { [Fabricate(:status, account: account)] }
|
||||||
|
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
|
@ -530,7 +530,7 @@ describe AccountInteractions do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not reblogged' do
|
context 'when not reblogged' do
|
||||||
let(:reblogs) { [] }
|
let(:reblogs) { [] }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -544,14 +544,14 @@ describe AccountInteractions do
|
||||||
|
|
||||||
let(:status) { Fabricate(:status, account: account) }
|
let(:status) { Fabricate(:status, account: account) }
|
||||||
|
|
||||||
context 'pinned' do
|
context 'when pinned' do
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
Fabricate(:status_pin, account: account, status: status)
|
Fabricate(:status_pin, account: account, status: status)
|
||||||
expect(subject).to be true
|
expect(subject).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not pinned' do
|
context 'when not pinned' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
expect(subject).to be false
|
expect(subject).to be false
|
||||||
end
|
end
|
||||||
|
|
|
@ -156,7 +156,7 @@ RSpec.describe Remotable do
|
||||||
context 'when the response is successful' do
|
context 'when the response is successful' do
|
||||||
let(:code) { 200 }
|
let(:code) { 200 }
|
||||||
|
|
||||||
context 'and contains Content-Disposition header' do
|
context 'when contains Content-Disposition header' do
|
||||||
let(:file) { 'filename="foo.txt"' }
|
let(:file) { 'filename="foo.txt"' }
|
||||||
let(:headers) { { 'content-disposition' => file } }
|
let(:headers) { { 'content-disposition' => file } }
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ RSpec.describe CustomEmojiFilter do
|
||||||
let!(:custom_emoji_1) { Fabricate(:custom_emoji, domain: 'b') }
|
let!(:custom_emoji_1) { Fabricate(:custom_emoji, domain: 'b') }
|
||||||
let!(:custom_emoji_2) { Fabricate(:custom_emoji, domain: nil, shortcode: 'hoge') }
|
let!(:custom_emoji_2) { Fabricate(:custom_emoji, domain: nil, shortcode: 'hoge') }
|
||||||
|
|
||||||
context 'params have values' do
|
context 'when params have values' do
|
||||||
context 'local' do
|
context 'when local' do
|
||||||
let(:params) { { local: true } }
|
let(:params) { { local: true } }
|
||||||
|
|
||||||
it 'returns ActiveRecord::Relation' do
|
it 'returns ActiveRecord::Relation' do
|
||||||
|
@ -20,7 +20,7 @@ RSpec.describe CustomEmojiFilter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'remote' do
|
context 'when remote' do
|
||||||
let(:params) { { remote: true } }
|
let(:params) { { remote: true } }
|
||||||
|
|
||||||
it 'returns ActiveRecord::Relation' do
|
it 'returns ActiveRecord::Relation' do
|
||||||
|
@ -29,7 +29,7 @@ RSpec.describe CustomEmojiFilter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'by_domain' do
|
context 'with by_domain' do
|
||||||
let(:params) { { by_domain: 'a' } }
|
let(:params) { { by_domain: 'a' } }
|
||||||
|
|
||||||
it 'returns ActiveRecord::Relation' do
|
it 'returns ActiveRecord::Relation' do
|
||||||
|
@ -38,7 +38,7 @@ RSpec.describe CustomEmojiFilter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'shortcode' do
|
context 'when shortcode' do
|
||||||
let(:params) { { shortcode: 'hoge' } }
|
let(:params) { { shortcode: 'hoge' } }
|
||||||
|
|
||||||
it 'returns ActiveRecord::Relation' do
|
it 'returns ActiveRecord::Relation' do
|
||||||
|
@ -47,7 +47,7 @@ RSpec.describe CustomEmojiFilter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'else' do
|
context 'when some other case' do
|
||||||
let(:params) { { else: 'else' } }
|
let(:params) { { else: 'else' } }
|
||||||
|
|
||||||
it 'raises Mastodon::InvalidParameterError' do
|
it 'raises Mastodon::InvalidParameterError' do
|
||||||
|
@ -58,7 +58,7 @@ RSpec.describe CustomEmojiFilter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'params without value' do
|
context 'when params without value' do
|
||||||
let(:params) { { hoge: nil } }
|
let(:params) { { hoge: nil } }
|
||||||
|
|
||||||
it 'returns ActiveRecord::Relation' do
|
it 'returns ActiveRecord::Relation' do
|
||||||
|
|
|
@ -8,7 +8,7 @@ RSpec.describe CustomEmoji, type: :model do
|
||||||
|
|
||||||
let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: shortcode) }
|
let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: shortcode) }
|
||||||
|
|
||||||
context 'shortcode is exact' do
|
context 'when shortcode is exact' do
|
||||||
let(:shortcode) { 'blobpats' }
|
let(:shortcode) { 'blobpats' }
|
||||||
let(:search_term) { 'blobpats' }
|
let(:search_term) { 'blobpats' }
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ RSpec.describe CustomEmoji, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'shortcode is partial' do
|
context 'when shortcode is partial' do
|
||||||
let(:shortcode) { 'blobpats' }
|
let(:shortcode) { 'blobpats' }
|
||||||
let(:search_term) { 'blob' }
|
let(:search_term) { 'blob' }
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ RSpec.describe CustomEmoji, type: :model do
|
||||||
|
|
||||||
let(:custom_emoji) { Fabricate(:custom_emoji, domain: domain) }
|
let(:custom_emoji) { Fabricate(:custom_emoji, domain: domain) }
|
||||||
|
|
||||||
context 'domain is nil' do
|
context 'when domain is nil' do
|
||||||
let(:domain) { nil }
|
let(:domain) { nil }
|
||||||
|
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
|
@ -40,7 +40,7 @@ RSpec.describe CustomEmoji, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'domain is present' do
|
context 'when domain is present' do
|
||||||
let(:domain) { 'example.com' }
|
let(:domain) { 'example.com' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
|
|
@ -6,7 +6,7 @@ RSpec.describe EmailDomainBlock, type: :model do
|
||||||
describe 'block?' do
|
describe 'block?' do
|
||||||
let(:input) { nil }
|
let(:input) { nil }
|
||||||
|
|
||||||
context 'given an e-mail address' do
|
context 'when given an e-mail address' do
|
||||||
let(:input) { "foo@#{domain}" }
|
let(:input) { "foo@#{domain}" }
|
||||||
|
|
||||||
context do
|
context do
|
||||||
|
@ -33,7 +33,7 @@ RSpec.describe EmailDomainBlock, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given an array of domains' do
|
context 'when given an array of domains' do
|
||||||
let(:input) { %w(foo.com mail.foo.com) }
|
let(:input) { %w(foo.com mail.foo.com) }
|
||||||
|
|
||||||
it 'returns true if the domain is blocked' do
|
it 'returns true if the domain is blocked' do
|
||||||
|
|
|
@ -8,7 +8,7 @@ RSpec.describe MediaAttachment, type: :model do
|
||||||
|
|
||||||
let(:media_attachment) { Fabricate(:media_attachment, remote_url: remote_url) }
|
let(:media_attachment) { Fabricate(:media_attachment, remote_url: remote_url) }
|
||||||
|
|
||||||
context 'remote_url is blank' do
|
context 'when remote_url is blank' do
|
||||||
let(:remote_url) { '' }
|
let(:remote_url) { '' }
|
||||||
|
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
|
@ -16,7 +16,7 @@ RSpec.describe MediaAttachment, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'remote_url is present' do
|
context 'when remote_url is present' do
|
||||||
let(:remote_url) { 'remote_url' }
|
let(:remote_url) { 'remote_url' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -30,10 +30,10 @@ RSpec.describe MediaAttachment, type: :model do
|
||||||
|
|
||||||
let(:media_attachment) { Fabricate(:media_attachment, remote_url: remote_url, file: file) }
|
let(:media_attachment) { Fabricate(:media_attachment, remote_url: remote_url, file: file) }
|
||||||
|
|
||||||
context 'file is blank' do
|
context 'when file is blank' do
|
||||||
let(:file) { nil }
|
let(:file) { nil }
|
||||||
|
|
||||||
context 'remote_url is present' do
|
context 'when remote_url is present' do
|
||||||
let(:remote_url) { 'remote_url' }
|
let(:remote_url) { 'remote_url' }
|
||||||
|
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
|
@ -42,10 +42,10 @@ RSpec.describe MediaAttachment, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'file is present' do
|
context 'when file is present' do
|
||||||
let(:file) { attachment_fixture('avatar.gif') }
|
let(:file) { attachment_fixture('avatar.gif') }
|
||||||
|
|
||||||
context 'remote_url is blank' do
|
context 'when remote_url is blank' do
|
||||||
let(:remote_url) { '' }
|
let(:remote_url) { '' }
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
|
@ -53,7 +53,7 @@ RSpec.describe MediaAttachment, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'remote_url is present' do
|
context 'when remote_url is present' do
|
||||||
let(:remote_url) { 'remote_url' }
|
let(:remote_url) { 'remote_url' }
|
||||||
|
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
|
|
|
@ -10,7 +10,7 @@ RSpec.describe Notification, type: :model do
|
||||||
let(:favourite) { Fabricate(:favourite, status: status) }
|
let(:favourite) { Fabricate(:favourite, status: status) }
|
||||||
let(:mention) { Fabricate(:mention, status: status) }
|
let(:mention) { Fabricate(:mention, status: status) }
|
||||||
|
|
||||||
context 'activity is reblog' do
|
context 'when Activity is reblog' do
|
||||||
let(:activity) { reblog }
|
let(:activity) { reblog }
|
||||||
|
|
||||||
it 'returns status' do
|
it 'returns status' do
|
||||||
|
@ -18,7 +18,7 @@ RSpec.describe Notification, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'activity is favourite' do
|
context 'when Activity is favourite' do
|
||||||
let(:type) { :favourite }
|
let(:type) { :favourite }
|
||||||
let(:activity) { favourite }
|
let(:activity) { favourite }
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ RSpec.describe Notification, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'activity is mention' do
|
context 'when Activity is mention' do
|
||||||
let(:activity) { mention }
|
let(:activity) { mention }
|
||||||
|
|
||||||
it 'returns status' do
|
it 'returns status' do
|
||||||
|
@ -66,7 +66,7 @@ RSpec.describe Notification, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'notifications are empty' do
|
context 'when notifications are empty' do
|
||||||
let(:notifications) { [] }
|
let(:notifications) { [] }
|
||||||
|
|
||||||
it 'returns []' do
|
it 'returns []' do
|
||||||
|
@ -74,7 +74,7 @@ RSpec.describe Notification, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'notifications are present' do
|
context 'when notifications are present' do
|
||||||
before do
|
before do
|
||||||
notifications.each(&:reload)
|
notifications.each(&:reload)
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,7 +13,7 @@ RSpec.describe RemoteFollow do
|
||||||
describe '.initialize' do
|
describe '.initialize' do
|
||||||
subject { remote_follow.acct }
|
subject { remote_follow.acct }
|
||||||
|
|
||||||
context 'attrs with acct' do
|
context 'when attrs with acct' do
|
||||||
let(:attrs) { { acct: 'gargron@quitter.no' } }
|
let(:attrs) { { acct: 'gargron@quitter.no' } }
|
||||||
|
|
||||||
it 'returns acct' do
|
it 'returns acct' do
|
||||||
|
@ -21,7 +21,7 @@ RSpec.describe RemoteFollow do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'attrs without acct' do
|
context 'when attrs without acct' do
|
||||||
let(:attrs) { {} }
|
let(:attrs) { {} }
|
||||||
|
|
||||||
it do
|
it do
|
||||||
|
@ -33,7 +33,7 @@ RSpec.describe RemoteFollow do
|
||||||
describe '#valid?' do
|
describe '#valid?' do
|
||||||
subject { remote_follow.valid? }
|
subject { remote_follow.valid? }
|
||||||
|
|
||||||
context 'attrs with acct' do
|
context 'when attrs with acct' do
|
||||||
let(:attrs) { { acct: 'gargron@quitter.no' } }
|
let(:attrs) { { acct: 'gargron@quitter.no' } }
|
||||||
|
|
||||||
it do
|
it do
|
||||||
|
@ -41,7 +41,7 @@ RSpec.describe RemoteFollow do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'attrs without acct' do
|
context 'when attrs without acct' do
|
||||||
let(:attrs) { {} }
|
let(:attrs) { {} }
|
||||||
|
|
||||||
it do
|
it do
|
||||||
|
|
|
@ -89,13 +89,13 @@ describe Report do
|
||||||
|
|
||||||
let(:report) { Fabricate(:report, action_taken_at: action_taken) }
|
let(:report) { Fabricate(:report, action_taken_at: action_taken) }
|
||||||
|
|
||||||
context 'if action is taken' do
|
context 'when action is taken' do
|
||||||
let(:action_taken) { Time.now.utc }
|
let(:action_taken) { Time.now.utc }
|
||||||
|
|
||||||
it { is_expected.to be false }
|
it { is_expected.to be false }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'if action not is taken' do
|
context 'when action not is taken' do
|
||||||
let(:action_taken) { nil }
|
let(:action_taken) { nil }
|
||||||
|
|
||||||
it { is_expected.to be true }
|
it { is_expected.to be true }
|
||||||
|
|
|
@ -40,7 +40,7 @@ RSpec.describe SessionActivation, type: :model do
|
||||||
describe '.active?' do
|
describe '.active?' do
|
||||||
subject { described_class.active?(id) }
|
subject { described_class.active?(id) }
|
||||||
|
|
||||||
context 'id is absent' do
|
context 'when id is absent' do
|
||||||
let(:id) { nil }
|
let(:id) { nil }
|
||||||
|
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
|
@ -48,17 +48,17 @@ RSpec.describe SessionActivation, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'id is present' do
|
context 'when id is present' do
|
||||||
let(:id) { '1' }
|
let(:id) { '1' }
|
||||||
let!(:session_activation) { Fabricate(:session_activation, session_id: id) }
|
let!(:session_activation) { Fabricate(:session_activation, session_id: id) }
|
||||||
|
|
||||||
context 'id exists as session_id' do
|
context 'when id exists as session_id' do
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
expect(subject).to be true
|
expect(subject).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'id does not exist as session_id' do
|
context 'when id does not exist as session_id' do
|
||||||
before do
|
before do
|
||||||
session_activation.update!(session_id: '2')
|
session_activation.update!(session_id: '2')
|
||||||
end
|
end
|
||||||
|
@ -85,7 +85,7 @@ RSpec.describe SessionActivation, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '.deactivate' do
|
describe '.deactivate' do
|
||||||
context 'id is absent' do
|
context 'when id is absent' do
|
||||||
let(:id) { nil }
|
let(:id) { nil }
|
||||||
|
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
|
@ -93,7 +93,7 @@ RSpec.describe SessionActivation, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'id exists' do
|
context 'when id exists' do
|
||||||
let(:id) { '1' }
|
let(:id) { '1' }
|
||||||
|
|
||||||
it 'calls where.destroy_all' do
|
it 'calls where.destroy_all' do
|
||||||
|
|
|
@ -19,7 +19,7 @@ RSpec.describe Setting, type: :model do
|
||||||
|
|
||||||
let(:key) { 'key' }
|
let(:key) { 'key' }
|
||||||
|
|
||||||
context 'rails_initialized? is falsey' do
|
context 'when rails_initialized? is falsey' do
|
||||||
let(:rails_initialized) { false }
|
let(:rails_initialized) { false }
|
||||||
|
|
||||||
it 'calls RailsSettings::Base#[]' do
|
it 'calls RailsSettings::Base#[]' do
|
||||||
|
@ -28,7 +28,7 @@ RSpec.describe Setting, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'rails_initialized? is truthy' do
|
context 'when rails_initialized? is truthy' do
|
||||||
before do
|
before do
|
||||||
allow(RailsSettings::Base).to receive(:cache_key).with(key, nil).and_return(cache_key)
|
allow(RailsSettings::Base).to receive(:cache_key).with(key, nil).and_return(cache_key)
|
||||||
end
|
end
|
||||||
|
@ -42,7 +42,7 @@ RSpec.describe Setting, type: :model do
|
||||||
described_class[key]
|
described_class[key]
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Rails.cache does not exists' do
|
context 'when Rails.cache does not exists' do
|
||||||
before do
|
before do
|
||||||
allow(RailsSettings::Settings).to receive(:object).with(key).and_return(object)
|
allow(RailsSettings::Settings).to receive(:object).with(key).and_return(object)
|
||||||
allow(described_class).to receive(:default_settings).and_return(default_settings)
|
allow(described_class).to receive(:default_settings).and_return(default_settings)
|
||||||
|
@ -60,11 +60,11 @@ RSpec.describe Setting, type: :model do
|
||||||
described_class[key]
|
described_class[key]
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'RailsSettings::Settings.object returns truthy' do
|
context 'when RailsSettings::Settings.object returns truthy' do
|
||||||
let(:object) { db_val }
|
let(:object) { db_val }
|
||||||
let(:db_val) { double(value: 'db_val') }
|
let(:db_val) { double(value: 'db_val') }
|
||||||
|
|
||||||
context 'default_value is a Hash' do
|
context 'when default_value is a Hash' do
|
||||||
let(:default_value) { { default_value: 'default_value' } }
|
let(:default_value) { { default_value: 'default_value' } }
|
||||||
|
|
||||||
it 'calls default_value.with_indifferent_access.merge!' do
|
it 'calls default_value.with_indifferent_access.merge!' do
|
||||||
|
@ -75,7 +75,7 @@ RSpec.describe Setting, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'default_value is not a Hash' do
|
context 'when default_value is not a Hash' do
|
||||||
let(:default_value) { 'default_value' }
|
let(:default_value) { 'default_value' }
|
||||||
|
|
||||||
it 'returns db_val.value' do
|
it 'returns db_val.value' do
|
||||||
|
@ -84,7 +84,7 @@ RSpec.describe Setting, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'RailsSettings::Settings.object returns falsey' do
|
context 'when RailsSettings::Settings.object returns falsey' do
|
||||||
let(:object) { nil }
|
let(:object) { nil }
|
||||||
|
|
||||||
it 'returns default_settings[key]' do
|
it 'returns default_settings[key]' do
|
||||||
|
@ -93,7 +93,7 @@ RSpec.describe Setting, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Rails.cache exists' do
|
context 'when Rails.cache exists' do
|
||||||
before do
|
before do
|
||||||
Rails.cache.write(cache_key, cache_value)
|
Rails.cache.write(cache_key, cache_value)
|
||||||
end
|
end
|
||||||
|
@ -130,7 +130,7 @@ RSpec.describe Setting, type: :model do
|
||||||
expect(described_class.all_as_records).to be_a Hash
|
expect(described_class.all_as_records).to be_a Hash
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'records includes Setting with var as the key' do
|
context 'when records includes Setting with var as the key' do
|
||||||
let(:records) { [original_setting] }
|
let(:records) { [original_setting] }
|
||||||
|
|
||||||
it 'includes the original Setting' do
|
it 'includes the original Setting' do
|
||||||
|
@ -139,10 +139,10 @@ RSpec.describe Setting, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'records includes nothing' do
|
context 'when records includes nothing' do
|
||||||
let(:records) { [] }
|
let(:records) { [] }
|
||||||
|
|
||||||
context 'default_value is not a Hash' do
|
context 'when default_value is not a Hash' do
|
||||||
it 'includes Setting with value of default_value' do
|
it 'includes Setting with value of default_value' do
|
||||||
setting = described_class.all_as_records[key]
|
setting = described_class.all_as_records[key]
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@ RSpec.describe Setting, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'default_value is a Hash' do
|
context 'when default_value is a Hash' do
|
||||||
let(:default_value) { { 'foo' => 'fuga' } }
|
let(:default_value) { { 'foo' => 'fuga' } }
|
||||||
|
|
||||||
it 'returns {}' do
|
it 'returns {}' do
|
||||||
|
@ -169,7 +169,7 @@ RSpec.describe Setting, type: :model do
|
||||||
allow(RailsSettings::Default).to receive(:enabled?).and_return(enabled)
|
allow(RailsSettings::Default).to receive(:enabled?).and_return(enabled)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'RailsSettings::Default.enabled? is false' do
|
context 'when RailsSettings::Default.enabled? is false' do
|
||||||
let(:enabled) { false }
|
let(:enabled) { false }
|
||||||
|
|
||||||
it 'returns {}' do
|
it 'returns {}' do
|
||||||
|
@ -177,7 +177,7 @@ RSpec.describe Setting, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'RailsSettings::Settings.enabled? is true' do
|
context 'when RailsSettings::Settings.enabled? is true' do
|
||||||
let(:enabled) { true }
|
let(:enabled) { true }
|
||||||
|
|
||||||
it 'returns instance of RailsSettings::Default' do
|
it 'returns instance of RailsSettings::Default' do
|
||||||
|
|
|
@ -49,22 +49,22 @@ RSpec.describe Status, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#verb' do
|
describe '#verb' do
|
||||||
context 'if destroyed?' do
|
context 'when destroyed?' do
|
||||||
it 'returns :delete' do
|
it 'returns :delete' do
|
||||||
subject.destroy!
|
subject.destroy!
|
||||||
expect(subject.verb).to be :delete
|
expect(subject.verb).to be :delete
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'unless destroyed?' do
|
context 'when not destroyed?' do
|
||||||
context 'if reblog?' do
|
context 'when reblog?' do
|
||||||
it 'returns :share' do
|
it 'returns :share' do
|
||||||
subject.reblog = other
|
subject.reblog = other
|
||||||
expect(subject.verb).to be :share
|
expect(subject.verb).to be :share
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'unless reblog?' do
|
context 'when not reblog?' do
|
||||||
it 'returns :post' do
|
it 'returns :post' do
|
||||||
subject.reblog = nil
|
subject.reblog = nil
|
||||||
expect(subject.verb).to be :post
|
expect(subject.verb).to be :post
|
||||||
|
@ -85,28 +85,28 @@ RSpec.describe Status, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#hidden?' do
|
describe '#hidden?' do
|
||||||
context 'if private_visibility?' do
|
context 'when private_visibility?' do
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
subject.visibility = :private
|
subject.visibility = :private
|
||||||
expect(subject.hidden?).to be true
|
expect(subject.hidden?).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'if direct_visibility?' do
|
context 'when direct_visibility?' do
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
subject.visibility = :direct
|
subject.visibility = :direct
|
||||||
expect(subject.hidden?).to be true
|
expect(subject.hidden?).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'if public_visibility?' do
|
context 'when public_visibility?' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
subject.visibility = :public
|
subject.visibility = :public
|
||||||
expect(subject.hidden?).to be false
|
expect(subject.hidden?).to be false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'if unlisted_visibility?' do
|
context 'when unlisted_visibility?' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
subject.visibility = :unlisted
|
subject.visibility = :unlisted
|
||||||
expect(subject.hidden?).to be false
|
expect(subject.hidden?).to be false
|
||||||
|
|
|
@ -56,7 +56,7 @@ RSpec.describe Web::PushSubscription, type: :model do
|
||||||
context 'when policy is followed' do
|
context 'when policy is followed' do
|
||||||
let(:policy) { 'followed' }
|
let(:policy) { 'followed' }
|
||||||
|
|
||||||
context 'and notification is from someone you follow' do
|
context 'when notification is from someone you follow' do
|
||||||
before do
|
before do
|
||||||
account.follow!(notification.from_account)
|
account.follow!(notification.from_account)
|
||||||
end
|
end
|
||||||
|
@ -66,7 +66,7 @@ RSpec.describe Web::PushSubscription, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'and notification is not from someone you follow' do
|
context 'when notification is not from someone you follow' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
expect(subject.pushable?(notification)).to be false
|
expect(subject.pushable?(notification)).to be false
|
||||||
end
|
end
|
||||||
|
@ -76,7 +76,7 @@ RSpec.describe Web::PushSubscription, type: :model do
|
||||||
context 'when policy is follower' do
|
context 'when policy is follower' do
|
||||||
let(:policy) { 'follower' }
|
let(:policy) { 'follower' }
|
||||||
|
|
||||||
context 'and notification is from someone who follows you' do
|
context 'when notification is from someone who follows you' do
|
||||||
before do
|
before do
|
||||||
notification.from_account.follow!(account)
|
notification.from_account.follow!(account)
|
||||||
end
|
end
|
||||||
|
@ -86,7 +86,7 @@ RSpec.describe Web::PushSubscription, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'and notification is not from someone who follows you' do
|
context 'when notification is not from someone who follows you' do
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
expect(subject.pushable?(notification)).to be false
|
expect(subject.pushable?(notification)).to be false
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ RSpec.describe AccountModerationNotePolicy do
|
||||||
let(:john) { Fabricate(:account) }
|
let(:john) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :create? do
|
permissions :create? do
|
||||||
context 'staff' do
|
context 'when staff' do
|
||||||
it 'grants to create' do
|
it 'grants to create' do
|
||||||
expect(subject).to permit(admin, AccountModerationNotePolicy)
|
expect(subject).to permit(admin, AccountModerationNotePolicy)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not staff' do
|
context 'when not staff' do
|
||||||
it 'denies to create' do
|
it 'denies to create' do
|
||||||
expect(subject).to_not permit(john, AccountModerationNotePolicy)
|
expect(subject).to_not permit(john, AccountModerationNotePolicy)
|
||||||
end
|
end
|
||||||
|
@ -29,19 +29,19 @@ RSpec.describe AccountModerationNotePolicy do
|
||||||
target_account: Fabricate(:account))
|
target_account: Fabricate(:account))
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'admin' do
|
context 'when admin' do
|
||||||
it 'grants to destroy' do
|
it 'grants to destroy' do
|
||||||
expect(subject).to permit(admin, account_moderation_note)
|
expect(subject).to permit(admin, account_moderation_note)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'owner' do
|
context 'when owner' do
|
||||||
it 'grants to destroy' do
|
it 'grants to destroy' do
|
||||||
expect(subject).to permit(john, account_moderation_note)
|
expect(subject).to permit(john, account_moderation_note)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'neither admin nor owner' do
|
context 'when neither admin nor owner' do
|
||||||
let(:kevin) { Fabricate(:account) }
|
let(:kevin) { Fabricate(:account) }
|
||||||
|
|
||||||
it 'denies to destroy' do
|
it 'denies to destroy' do
|
||||||
|
|
|
@ -10,13 +10,13 @@ RSpec.describe AccountPolicy do
|
||||||
let(:alice) { Fabricate(:account) }
|
let(:alice) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :index? do
|
permissions :index? do
|
||||||
context 'staff' do
|
context 'when staff' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin)
|
expect(subject).to permit(admin)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not staff' do
|
context 'when not staff' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john)
|
expect(subject).to_not permit(john)
|
||||||
end
|
end
|
||||||
|
@ -24,13 +24,13 @@ RSpec.describe AccountPolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :show?, :unsilence?, :unsensitive?, :remove_avatar?, :remove_header? do
|
permissions :show?, :unsilence?, :unsensitive?, :remove_avatar?, :remove_header? do
|
||||||
context 'staff' do
|
context 'when staff' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, alice)
|
expect(subject).to permit(admin, alice)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not staff' do
|
context 'when not staff' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, alice)
|
expect(subject).to_not permit(john, alice)
|
||||||
end
|
end
|
||||||
|
@ -42,13 +42,13 @@ RSpec.describe AccountPolicy do
|
||||||
alice.suspend!
|
alice.suspend!
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'staff' do
|
context 'when staff' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, alice)
|
expect(subject).to permit(admin, alice)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not staff' do
|
context 'when not staff' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, alice)
|
expect(subject).to_not permit(john, alice)
|
||||||
end
|
end
|
||||||
|
@ -56,13 +56,13 @@ RSpec.describe AccountPolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :redownload? do
|
permissions :redownload? do
|
||||||
context 'admin' do
|
context 'when admin' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin)
|
expect(subject).to permit(admin)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not admin' do
|
context 'when not admin' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john)
|
expect(subject).to_not permit(john)
|
||||||
end
|
end
|
||||||
|
@ -72,21 +72,21 @@ RSpec.describe AccountPolicy do
|
||||||
permissions :suspend?, :silence? do
|
permissions :suspend?, :silence? do
|
||||||
let(:staff) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
|
let(:staff) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
|
||||||
|
|
||||||
context 'staff' do
|
context 'when staff' do
|
||||||
context 'record is staff' do
|
context 'when record is staff' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(admin, staff)
|
expect(subject).to_not permit(admin, staff)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'record is not staff' do
|
context 'when record is not staff' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, john)
|
expect(subject).to permit(admin, john)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not staff' do
|
context 'when not staff' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, Account)
|
expect(subject).to_not permit(john, Account)
|
||||||
end
|
end
|
||||||
|
@ -96,21 +96,21 @@ RSpec.describe AccountPolicy do
|
||||||
permissions :memorialize? do
|
permissions :memorialize? do
|
||||||
let(:other_admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
|
let(:other_admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
|
||||||
|
|
||||||
context 'admin' do
|
context 'when admin' do
|
||||||
context 'record is admin' do
|
context 'when record is admin' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(admin, other_admin)
|
expect(subject).to_not permit(admin, other_admin)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'record is not admin' do
|
context 'when record is not admin' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, john)
|
expect(subject).to permit(admin, john)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not admin' do
|
context 'when not admin' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, Account)
|
expect(subject).to_not permit(john, Account)
|
||||||
end
|
end
|
||||||
|
@ -118,13 +118,13 @@ RSpec.describe AccountPolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :review? do
|
permissions :review? do
|
||||||
context 'admin' do
|
context 'when admin' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin)
|
expect(subject).to permit(admin)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not admin' do
|
context 'when not admin' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john)
|
expect(subject).to_not permit(john)
|
||||||
end
|
end
|
||||||
|
@ -132,7 +132,7 @@ RSpec.describe AccountPolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :destroy? do
|
permissions :destroy? do
|
||||||
context 'admin' do
|
context 'when admin' do
|
||||||
context 'with a temporarily suspended account' do
|
context 'with a temporarily suspended account' do
|
||||||
before { allow(alice).to receive(:suspended_temporarily?).and_return(true) }
|
before { allow(alice).to receive(:suspended_temporarily?).and_return(true) }
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ RSpec.describe AccountPolicy do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not admin' do
|
context 'when not admin' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, alice)
|
expect(subject).to_not permit(john, alice)
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,20 +8,20 @@ RSpec.describe BackupPolicy do
|
||||||
let(:john) { Fabricate(:account) }
|
let(:john) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :create? do
|
permissions :create? do
|
||||||
context 'not user_signed_in?' do
|
context 'when not user_signed_in?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(nil, Backup)
|
expect(subject).to_not permit(nil, Backup)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'user_signed_in?' do
|
context 'when user_signed_in?' do
|
||||||
context 'no backups' do
|
context 'with no backups' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(john, Backup)
|
expect(subject).to permit(john, Backup)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'backups are too old' do
|
context 'when backups are too old' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
travel(-8.days) do
|
travel(-8.days) do
|
||||||
Fabricate(:backup, user: john.user)
|
Fabricate(:backup, user: john.user)
|
||||||
|
@ -31,7 +31,7 @@ RSpec.describe BackupPolicy do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'backups are newer' do
|
context 'when backups are newer' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
travel(-3.days) do
|
travel(-3.days) do
|
||||||
Fabricate(:backup, user: john.user)
|
Fabricate(:backup, user: john.user)
|
||||||
|
|
|
@ -9,13 +9,13 @@ RSpec.describe CustomEmojiPolicy do
|
||||||
let(:john) { Fabricate(:account) }
|
let(:john) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :index?, :enable?, :disable? do
|
permissions :index?, :enable?, :disable? do
|
||||||
context 'staff' do
|
context 'when staff' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, CustomEmoji)
|
expect(subject).to permit(admin, CustomEmoji)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not staff' do
|
context 'when not staff' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, CustomEmoji)
|
expect(subject).to_not permit(john, CustomEmoji)
|
||||||
end
|
end
|
||||||
|
@ -23,13 +23,13 @@ RSpec.describe CustomEmojiPolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :create?, :update?, :copy?, :destroy? do
|
permissions :create?, :update?, :copy?, :destroy? do
|
||||||
context 'admin' do
|
context 'when admin' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, CustomEmoji)
|
expect(subject).to permit(admin, CustomEmoji)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not admin' do
|
context 'when not admin' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, CustomEmoji)
|
expect(subject).to_not permit(john, CustomEmoji)
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ RSpec.describe DomainBlockPolicy do
|
||||||
let(:john) { Fabricate(:account) }
|
let(:john) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :index?, :show?, :create?, :destroy? do
|
permissions :index?, :show?, :create?, :destroy? do
|
||||||
context 'admin' do
|
context 'when admin' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, DomainBlock)
|
expect(subject).to permit(admin, DomainBlock)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not admin' do
|
context 'when not admin' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, DomainBlock)
|
expect(subject).to_not permit(john, DomainBlock)
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ RSpec.describe EmailDomainBlockPolicy do
|
||||||
let(:john) { Fabricate(:account) }
|
let(:john) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :index?, :show?, :create?, :destroy? do
|
permissions :index?, :show?, :create?, :destroy? do
|
||||||
context 'admin' do
|
context 'when admin' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, EmailDomainBlock)
|
expect(subject).to permit(admin, EmailDomainBlock)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not admin' do
|
context 'when not admin' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, EmailDomainBlock)
|
expect(subject).to_not permit(john, EmailDomainBlock)
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ RSpec.describe InstancePolicy do
|
||||||
let(:john) { Fabricate(:account) }
|
let(:john) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :index?, :show?, :destroy? do
|
permissions :index?, :show?, :destroy? do
|
||||||
context 'admin' do
|
context 'when admin' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, Instance)
|
expect(subject).to permit(admin, Instance)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not admin' do
|
context 'when not admin' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, Instance)
|
expect(subject).to_not permit(john, Instance)
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,7 +9,7 @@ RSpec.describe InvitePolicy do
|
||||||
let(:john) { Fabricate(:user).account }
|
let(:john) { Fabricate(:user).account }
|
||||||
|
|
||||||
permissions :index? do
|
permissions :index? do
|
||||||
context 'staff?' do
|
context 'when staff?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, Invite)
|
expect(subject).to permit(admin, Invite)
|
||||||
end
|
end
|
||||||
|
@ -17,7 +17,7 @@ RSpec.describe InvitePolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :create? do
|
permissions :create? do
|
||||||
context 'has privilege' do
|
context 'with privilege' do
|
||||||
before do
|
before do
|
||||||
UserRole.everyone.update(permissions: UserRole::FLAGS[:invite_users])
|
UserRole.everyone.update(permissions: UserRole::FLAGS[:invite_users])
|
||||||
end
|
end
|
||||||
|
@ -27,7 +27,7 @@ RSpec.describe InvitePolicy do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'does not have privilege' do
|
context 'when does not have privilege' do
|
||||||
before do
|
before do
|
||||||
UserRole.everyone.update(permissions: UserRole::Flags::NONE)
|
UserRole.everyone.update(permissions: UserRole::Flags::NONE)
|
||||||
end
|
end
|
||||||
|
@ -39,13 +39,13 @@ RSpec.describe InvitePolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :deactivate_all? do
|
permissions :deactivate_all? do
|
||||||
context 'admin?' do
|
context 'when admin?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, Invite)
|
expect(subject).to permit(admin, Invite)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not admin?' do
|
context 'when not admin?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, Invite)
|
expect(subject).to_not permit(john, Invite)
|
||||||
end
|
end
|
||||||
|
@ -53,20 +53,20 @@ RSpec.describe InvitePolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :destroy? do
|
permissions :destroy? do
|
||||||
context 'owner?' do
|
context 'when owner?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(john, Fabricate(:invite, user: john.user))
|
expect(subject).to permit(john, Fabricate(:invite, user: john.user))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not owner?' do
|
context 'when not owner?' do
|
||||||
context 'admin?' do
|
context 'when admin?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, Fabricate(:invite))
|
expect(subject).to permit(admin, Fabricate(:invite))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'not admin?' do
|
context 'when not admin?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, Fabricate(:invite))
|
expect(subject).to_not permit(john, Fabricate(:invite))
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ RSpec.describe RelayPolicy do
|
||||||
let(:john) { Fabricate(:account) }
|
let(:john) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :update? do
|
permissions :update? do
|
||||||
context 'admin?' do
|
context 'when admin?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, Relay)
|
expect(subject).to permit(admin, Relay)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!admin?' do
|
context 'with !admin?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, Relay)
|
expect(subject).to_not permit(john, Relay)
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ RSpec.describe ReportNotePolicy do
|
||||||
let(:john) { Fabricate(:account) }
|
let(:john) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :create? do
|
permissions :create? do
|
||||||
context 'staff?' do
|
context 'when staff?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, ReportNote)
|
expect(subject).to permit(admin, ReportNote)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!staff?' do
|
context 'with !staff?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, ReportNote)
|
expect(subject).to_not permit(john, ReportNote)
|
||||||
end
|
end
|
||||||
|
@ -23,22 +23,22 @@ RSpec.describe ReportNotePolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :destroy? do
|
permissions :destroy? do
|
||||||
context 'admin?' do
|
context 'when admin?' do
|
||||||
it 'permit' do
|
it 'permit' do
|
||||||
report_note = Fabricate(:report_note, account: john)
|
report_note = Fabricate(:report_note, account: john)
|
||||||
expect(subject).to permit(admin, report_note)
|
expect(subject).to permit(admin, report_note)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'admin?' do
|
context 'when admin?' do
|
||||||
context 'owner?' do
|
context 'when owner?' do
|
||||||
it 'permit' do
|
it 'permit' do
|
||||||
report_note = Fabricate(:report_note, account: john)
|
report_note = Fabricate(:report_note, account: john)
|
||||||
expect(subject).to permit(john, report_note)
|
expect(subject).to permit(john, report_note)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!owner?' do
|
context 'with !owner?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
report_note = Fabricate(:report_note)
|
report_note = Fabricate(:report_note)
|
||||||
expect(subject).to_not permit(john, report_note)
|
expect(subject).to_not permit(john, report_note)
|
||||||
|
|
|
@ -9,13 +9,13 @@ RSpec.describe ReportPolicy do
|
||||||
let(:john) { Fabricate(:account) }
|
let(:john) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :update?, :index?, :show? do
|
permissions :update?, :index?, :show? do
|
||||||
context 'staff?' do
|
context 'when staff?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, Report)
|
expect(subject).to permit(admin, Report)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!staff?' do
|
context 'with !staff?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, Report)
|
expect(subject).to_not permit(john, Report)
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ RSpec.describe SettingsPolicy do
|
||||||
let(:john) { Fabricate(:account) }
|
let(:john) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :update?, :show?, :destroy? do
|
permissions :update?, :show?, :destroy? do
|
||||||
context 'admin?' do
|
context 'when admin?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, Settings)
|
expect(subject).to permit(admin, Settings)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!admin?' do
|
context 'with !admin?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, Settings)
|
expect(subject).to_not permit(john, Settings)
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,13 @@ RSpec.describe TagPolicy do
|
||||||
let(:john) { Fabricate(:account) }
|
let(:john) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :index?, :show?, :update?, :review? do
|
permissions :index?, :show?, :update?, :review? do
|
||||||
context 'staff?' do
|
context 'when staff?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, Tag)
|
expect(subject).to permit(admin, Tag)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!staff?' do
|
context 'with !staff?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, Tag)
|
expect(subject).to_not permit(john, Tag)
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,21 +9,21 @@ RSpec.describe UserPolicy do
|
||||||
let(:john) { Fabricate(:account) }
|
let(:john) { Fabricate(:account) }
|
||||||
|
|
||||||
permissions :reset_password?, :change_email? do
|
permissions :reset_password?, :change_email? do
|
||||||
context 'staff?' do
|
context 'when staff?' do
|
||||||
context '!record.staff?' do
|
context 'with !record.staff?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, john.user)
|
expect(subject).to permit(admin, john.user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'record.staff?' do
|
context 'when record.staff?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(admin, admin.user)
|
expect(subject).to_not permit(admin, admin.user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!staff?' do
|
context 'with !staff?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, User)
|
expect(subject).to_not permit(john, User)
|
||||||
end
|
end
|
||||||
|
@ -31,21 +31,21 @@ RSpec.describe UserPolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :disable_2fa? do
|
permissions :disable_2fa? do
|
||||||
context 'admin?' do
|
context 'when admin?' do
|
||||||
context '!record.staff?' do
|
context 'with !record.staff?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, john.user)
|
expect(subject).to permit(admin, john.user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'record.staff?' do
|
context 'when record.staff?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(admin, admin.user)
|
expect(subject).to_not permit(admin, admin.user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!admin?' do
|
context 'with !admin?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, User)
|
expect(subject).to_not permit(john, User)
|
||||||
end
|
end
|
||||||
|
@ -53,15 +53,15 @@ RSpec.describe UserPolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :confirm? do
|
permissions :confirm? do
|
||||||
context 'staff?' do
|
context 'when staff?' do
|
||||||
context '!record.confirmed?' do
|
context 'with !record.confirmed?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
john.user.update(confirmed_at: nil)
|
john.user.update(confirmed_at: nil)
|
||||||
expect(subject).to permit(admin, john.user)
|
expect(subject).to permit(admin, john.user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'record.confirmed?' do
|
context 'when record.confirmed?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
john.user.confirm!
|
john.user.confirm!
|
||||||
expect(subject).to_not permit(admin, john.user)
|
expect(subject).to_not permit(admin, john.user)
|
||||||
|
@ -69,7 +69,7 @@ RSpec.describe UserPolicy do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!staff?' do
|
context 'with !staff?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, User)
|
expect(subject).to_not permit(john, User)
|
||||||
end
|
end
|
||||||
|
@ -77,13 +77,13 @@ RSpec.describe UserPolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :enable? do
|
permissions :enable? do
|
||||||
context 'staff?' do
|
context 'when staff?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, User)
|
expect(subject).to permit(admin, User)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!staff?' do
|
context 'with !staff?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, User)
|
expect(subject).to_not permit(john, User)
|
||||||
end
|
end
|
||||||
|
@ -91,21 +91,21 @@ RSpec.describe UserPolicy do
|
||||||
end
|
end
|
||||||
|
|
||||||
permissions :disable? do
|
permissions :disable? do
|
||||||
context 'staff?' do
|
context 'when staff?' do
|
||||||
context '!record.admin?' do
|
context 'with !record.admin?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, john.user)
|
expect(subject).to permit(admin, john.user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'record.admin?' do
|
context 'when record.admin?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(admin, admin.user)
|
expect(subject).to_not permit(admin, admin.user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!staff?' do
|
context 'with !staff?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(john, User)
|
expect(subject).to_not permit(john, User)
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,7 +19,7 @@ RSpec.describe AccountRelationshipsPresenter do
|
||||||
let(:account_ids) { [Fabricate(:account).id] }
|
let(:account_ids) { [Fabricate(:account).id] }
|
||||||
let(:default_map) { { 1 => true } }
|
let(:default_map) { { 1 => true } }
|
||||||
|
|
||||||
context 'options are not set' do
|
context 'when options are not set' do
|
||||||
let(:options) { {} }
|
let(:options) { {} }
|
||||||
|
|
||||||
it 'sets default maps' do
|
it 'sets default maps' do
|
||||||
|
@ -32,7 +32,7 @@ RSpec.describe AccountRelationshipsPresenter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'options[:following_map] is set' do
|
context 'when options[:following_map] is set' do
|
||||||
let(:options) { { following_map: { 2 => true } } }
|
let(:options) { { following_map: { 2 => true } } }
|
||||||
|
|
||||||
it 'sets @following merged with default_map and options[:following_map]' do
|
it 'sets @following merged with default_map and options[:following_map]' do
|
||||||
|
@ -40,7 +40,7 @@ RSpec.describe AccountRelationshipsPresenter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'options[:followed_by_map] is set' do
|
context 'when options[:followed_by_map] is set' do
|
||||||
let(:options) { { followed_by_map: { 3 => true } } }
|
let(:options) { { followed_by_map: { 3 => true } } }
|
||||||
|
|
||||||
it 'sets @followed_by merged with default_map and options[:followed_by_map]' do
|
it 'sets @followed_by merged with default_map and options[:followed_by_map]' do
|
||||||
|
@ -48,7 +48,7 @@ RSpec.describe AccountRelationshipsPresenter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'options[:blocking_map] is set' do
|
context 'when options[:blocking_map] is set' do
|
||||||
let(:options) { { blocking_map: { 4 => true } } }
|
let(:options) { { blocking_map: { 4 => true } } }
|
||||||
|
|
||||||
it 'sets @blocking merged with default_map and options[:blocking_map]' do
|
it 'sets @blocking merged with default_map and options[:blocking_map]' do
|
||||||
|
@ -56,7 +56,7 @@ RSpec.describe AccountRelationshipsPresenter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'options[:muting_map] is set' do
|
context 'when options[:muting_map] is set' do
|
||||||
let(:options) { { muting_map: { 5 => true } } }
|
let(:options) { { muting_map: { 5 => true } } }
|
||||||
|
|
||||||
it 'sets @muting merged with default_map and options[:muting_map]' do
|
it 'sets @muting merged with default_map and options[:muting_map]' do
|
||||||
|
@ -64,7 +64,7 @@ RSpec.describe AccountRelationshipsPresenter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'options[:requested_map] is set' do
|
context 'when options[:requested_map] is set' do
|
||||||
let(:options) { { requested_map: { 6 => true } } }
|
let(:options) { { requested_map: { 6 => true } } }
|
||||||
|
|
||||||
it 'sets @requested merged with default_map and options[:requested_map]' do
|
it 'sets @requested merged with default_map and options[:requested_map]' do
|
||||||
|
@ -72,7 +72,7 @@ RSpec.describe AccountRelationshipsPresenter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'options[:requested_by_map] is set' do
|
context 'when options[:requested_by_map] is set' do
|
||||||
let(:options) { { requested_by_map: { 6 => true } } }
|
let(:options) { { requested_by_map: { 6 => true } } }
|
||||||
|
|
||||||
it 'sets @requested merged with default_map and options[:requested_by_map]' do
|
it 'sets @requested merged with default_map and options[:requested_by_map]' do
|
||||||
|
@ -80,7 +80,7 @@ RSpec.describe AccountRelationshipsPresenter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'options[:domain_blocking_map] is set' do
|
context 'when options[:domain_blocking_map] is set' do
|
||||||
let(:options) { { domain_blocking_map: { 7 => true } } }
|
let(:options) { { domain_blocking_map: { 7 => true } } }
|
||||||
|
|
||||||
it 'sets @domain_blocking merged with default_map and options[:domain_blocking_map]' do
|
it 'sets @domain_blocking merged with default_map and options[:domain_blocking_map]' do
|
||||||
|
|
|
@ -18,7 +18,7 @@ RSpec.describe StatusRelationshipsPresenter do
|
||||||
let(:status_ids) { statuses.map(&:id) + statuses.map(&:reblog_of_id).compact }
|
let(:status_ids) { statuses.map(&:id) + statuses.map(&:reblog_of_id).compact }
|
||||||
let(:default_map) { { 1 => true } }
|
let(:default_map) { { 1 => true } }
|
||||||
|
|
||||||
context 'options are not set' do
|
context 'when options are not set' do
|
||||||
let(:options) { {} }
|
let(:options) { {} }
|
||||||
|
|
||||||
it 'sets default maps' do
|
it 'sets default maps' do
|
||||||
|
@ -30,7 +30,7 @@ RSpec.describe StatusRelationshipsPresenter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'options[:reblogs_map] is set' do
|
context 'when options[:reblogs_map] is set' do
|
||||||
let(:options) { { reblogs_map: { 2 => true } } }
|
let(:options) { { reblogs_map: { 2 => true } } }
|
||||||
|
|
||||||
it 'sets @reblogs_map merged with default_map and options[:reblogs_map]' do
|
it 'sets @reblogs_map merged with default_map and options[:reblogs_map]' do
|
||||||
|
@ -38,7 +38,7 @@ RSpec.describe StatusRelationshipsPresenter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'options[:favourites_map] is set' do
|
context 'when options[:favourites_map] is set' do
|
||||||
let(:options) { { favourites_map: { 3 => true } } }
|
let(:options) { { favourites_map: { 3 => true } } }
|
||||||
|
|
||||||
it 'sets @favourites_map merged with default_map and options[:favourites_map]' do
|
it 'sets @favourites_map merged with default_map and options[:favourites_map]' do
|
||||||
|
@ -46,7 +46,7 @@ RSpec.describe StatusRelationshipsPresenter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'options[:bookmarks_map] is set' do
|
context 'when options[:bookmarks_map] is set' do
|
||||||
let(:options) { { bookmarks_map: { 4 => true } } }
|
let(:options) { { bookmarks_map: { 4 => true } } }
|
||||||
|
|
||||||
it 'sets @bookmarks_map merged with default_map and options[:bookmarks_map]' do
|
it 'sets @bookmarks_map merged with default_map and options[:bookmarks_map]' do
|
||||||
|
@ -54,7 +54,7 @@ RSpec.describe StatusRelationshipsPresenter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'options[:mutes_map] is set' do
|
context 'when options[:mutes_map] is set' do
|
||||||
let(:options) { { mutes_map: { 5 => true } } }
|
let(:options) { { mutes_map: { 5 => true } } }
|
||||||
|
|
||||||
it 'sets @mutes_map merged with default_map and options[:mutes_map]' do
|
it 'sets @mutes_map merged with default_map and options[:mutes_map]' do
|
||||||
|
@ -62,7 +62,7 @@ RSpec.describe StatusRelationshipsPresenter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'options[:pins_map] is set' do
|
context 'when options[:pins_map] is set' do
|
||||||
let(:options) { { pins_map: { 6 => true } } }
|
let(:options) { { pins_map: { 6 => true } } }
|
||||||
|
|
||||||
it 'sets @pins_map merged with default_map and options[:pins_map]' do
|
it 'sets @pins_map merged with default_map and options[:pins_map]' do
|
||||||
|
|
|
@ -20,7 +20,7 @@ describe AccountSearchService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'searching for a simple term that is not an exact match' do
|
context 'when searching for a simple term that is not an exact match' do
|
||||||
it 'does not return a nil entry in the array for the exact match' do
|
it 'does not return a nil entry in the array for the exact match' do
|
||||||
account = Fabricate(:account, username: 'matchingusername')
|
account = Fabricate(:account, username: 'matchingusername')
|
||||||
results = subject.call('match', nil, limit: 5)
|
results = subject.call('match', nil, limit: 5)
|
||||||
|
|
|
@ -20,13 +20,13 @@ describe AccountStatusesCleanupService, type: :service do
|
||||||
let!(:another_old_status) { Fabricate(:status, created_at: 1.year.ago, account: account) }
|
let!(:another_old_status) { Fabricate(:status, created_at: 1.year.ago, account: account) }
|
||||||
let!(:recent_status) { Fabricate(:status, created_at: 1.day.ago, account: account) }
|
let!(:recent_status) { Fabricate(:status, created_at: 1.day.ago, account: account) }
|
||||||
|
|
||||||
context 'given a budget of 1' do
|
context 'when given a budget of 1' do
|
||||||
it 'reports 1 deleted toot' do
|
it 'reports 1 deleted toot' do
|
||||||
expect(subject.call(account_policy, 1)).to eq 1
|
expect(subject.call(account_policy, 1)).to eq 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a normal budget of 10' do
|
context 'when given a normal budget of 10' do
|
||||||
it 'reports 3 deleted statuses' do
|
it 'reports 3 deleted statuses' do
|
||||||
expect(subject.call(account_policy, 10)).to eq 3
|
expect(subject.call(account_policy, 10)).to eq 3
|
||||||
end
|
end
|
||||||
|
|
|
@ -226,12 +226,12 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'statuses referencing other statuses' do
|
context 'with statuses referencing other statuses' do
|
||||||
before do
|
before do
|
||||||
stub_const 'ActivityPub::FetchRemoteStatusService::DISCOVERIES_PER_REQUEST', 5
|
stub_const 'ActivityPub::FetchRemoteStatusService::DISCOVERIES_PER_REQUEST', 5
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using inReplyTo' do
|
context 'when using inReplyTo' do
|
||||||
let(:object) do
|
let(:object) do
|
||||||
{
|
{
|
||||||
'@context': 'https://www.w3.org/ns/activitystreams',
|
'@context': 'https://www.w3.org/ns/activitystreams',
|
||||||
|
@ -267,7 +267,7 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using replies' do
|
context 'when using replies' do
|
||||||
let(:object) do
|
let(:object) do
|
||||||
{
|
{
|
||||||
'@context': 'https://www.w3.org/ns/activitystreams',
|
'@context': 'https://www.w3.org/ns/activitystreams',
|
||||||
|
|
|
@ -5,7 +5,7 @@ require 'rails_helper'
|
||||||
RSpec.describe ActivityPub::ProcessAccountService, type: :service do
|
RSpec.describe ActivityPub::ProcessAccountService, type: :service do
|
||||||
subject { described_class.new }
|
subject { described_class.new }
|
||||||
|
|
||||||
context 'property values' do
|
context 'with property values' do
|
||||||
let(:payload) do
|
let(:payload) do
|
||||||
{
|
{
|
||||||
id: 'https://foo.test',
|
id: 'https://foo.test',
|
||||||
|
@ -82,7 +82,7 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do
|
||||||
account.suspend!(origin: suspension_origin)
|
account.suspend!(origin: suspension_origin)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'locally' do
|
context 'when locally' do
|
||||||
let(:suspension_origin) { :local }
|
let(:suspension_origin) { :local }
|
||||||
|
|
||||||
it 'does not unsuspend it' do
|
it 'does not unsuspend it' do
|
||||||
|
@ -94,7 +94,7 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'remotely' do
|
context 'when remotely' do
|
||||||
let(:suspension_origin) { :remote }
|
let(:suspension_origin) { :remote }
|
||||||
|
|
||||||
it 'unsuspends it' do
|
it 'unsuspends it' do
|
||||||
|
@ -112,7 +112,7 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'discovering many subdomains in a short timeframe' do
|
context 'when discovering many subdomains in a short timeframe' do
|
||||||
before do
|
before do
|
||||||
stub_const 'ActivityPub::ProcessAccountService::SUBDOMAINS_RATELIMIT', 5
|
stub_const 'ActivityPub::ProcessAccountService::SUBDOMAINS_RATELIMIT', 5
|
||||||
end
|
end
|
||||||
|
@ -138,7 +138,7 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'accounts referencing other accounts' do
|
context 'when Accounts referencing other accounts' do
|
||||||
before do
|
before do
|
||||||
stub_const 'ActivityPub::ProcessAccountService::DISCOVERIES_PER_REQUEST', 5
|
stub_const 'ActivityPub::ProcessAccountService::DISCOVERIES_PER_REQUEST', 5
|
||||||
end
|
end
|
||||||
|
|
|
@ -269,7 +269,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'originally without tags' do
|
context 'when originally without tags' do
|
||||||
before do
|
before do
|
||||||
subject.call(status, json)
|
subject.call(status, json)
|
||||||
end
|
end
|
||||||
|
@ -279,7 +279,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'originally with tags' do
|
context 'when originally with tags' do
|
||||||
let(:tags) { [Fabricate(:tag, name: 'test'), Fabricate(:tag, name: 'foo')] }
|
let(:tags) { [Fabricate(:tag, name: 'test'), Fabricate(:tag, name: 'foo')] }
|
||||||
|
|
||||||
let(:payload) do
|
let(:payload) do
|
||||||
|
@ -305,7 +305,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'originally without mentions' do
|
context 'when originally without mentions' do
|
||||||
before do
|
before do
|
||||||
subject.call(status, json)
|
subject.call(status, json)
|
||||||
end
|
end
|
||||||
|
@ -315,7 +315,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'originally with mentions' do
|
context 'when originally with mentions' do
|
||||||
let(:mentions) { [alice, bob] }
|
let(:mentions) { [alice, bob] }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
@ -327,7 +327,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'originally without media attachments' do
|
context 'when originally without media attachments' do
|
||||||
before do
|
before do
|
||||||
stub_request(:get, 'https://example.com/foo.png').to_return(body: attachment_fixture('emojo.png'))
|
stub_request(:get, 'https://example.com/foo.png').to_return(body: attachment_fixture('emojo.png'))
|
||||||
subject.call(status, json)
|
subject.call(status, json)
|
||||||
|
@ -362,7 +362,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'originally with media attachments' do
|
context 'when originally with media attachments' do
|
||||||
let(:media_attachments) { [Fabricate(:media_attachment, remote_url: 'https://example.com/foo.png'), Fabricate(:media_attachment, remote_url: 'https://example.com/unused.png')] }
|
let(:media_attachments) { [Fabricate(:media_attachment, remote_url: 'https://example.com/foo.png'), Fabricate(:media_attachment, remote_url: 'https://example.com/unused.png')] }
|
||||||
|
|
||||||
let(:payload) do
|
let(:payload) do
|
||||||
|
@ -404,7 +404,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'originally with a poll' do
|
context 'when originally with a poll' do
|
||||||
before do
|
before do
|
||||||
poll = Fabricate(:poll, status: status)
|
poll = Fabricate(:poll, status: status)
|
||||||
status.update(preloadable_poll: poll)
|
status.update(preloadable_poll: poll)
|
||||||
|
@ -420,7 +420,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'originally without a poll' do
|
context 'when originally without a poll' do
|
||||||
let(:payload) do
|
let(:payload) do
|
||||||
{
|
{
|
||||||
'@context': 'https://www.w3.org/ns/activitystreams',
|
'@context': 'https://www.w3.org/ns/activitystreams',
|
||||||
|
|
|
@ -18,7 +18,7 @@ RSpec.describe FetchLinkCardService, type: :service do
|
||||||
subject.call(status)
|
subject.call(status)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'in a local status' do
|
context 'with a local status' do
|
||||||
context do
|
context do
|
||||||
let(:status) { Fabricate(:status, text: 'Check out http://example.中国') }
|
let(:status) { Fabricate(:status, text: 'Check out http://example.中国') }
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ RSpec.describe FetchLinkCardService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'in a remote status' do
|
context 'with a remote status' do
|
||||||
let(:status) { Fabricate(:status, account: Fabricate(:account, domain: 'example.com'), text: 'Habt ihr ein paar gute Links zu <a>foo</a> #<span class="tag"><a href="https://quitter.se/tag/wannacry" target="_blank" rel="tag noopener noreferrer" title="https://quitter.se/tag/wannacry">Wannacry</a></span> herumfliegen? Ich will mal unter <br> <a href="https://github.com/qbi/WannaCry" target="_blank" rel="noopener noreferrer" title="https://github.com/qbi/WannaCry">https://github.com/qbi/WannaCry</a> was sammeln. !<a href="http://sn.jonkman.ca/group/416/id" target="_blank" rel="noopener noreferrer" title="http://sn.jonkman.ca/group/416/id">security</a> ') }
|
let(:status) { Fabricate(:status, account: Fabricate(:account, domain: 'example.com'), text: 'Habt ihr ein paar gute Links zu <a>foo</a> #<span class="tag"><a href="https://quitter.se/tag/wannacry" target="_blank" rel="tag noopener noreferrer" title="https://quitter.se/tag/wannacry">Wannacry</a></span> herumfliegen? Ich will mal unter <br> <a href="https://github.com/qbi/WannaCry" target="_blank" rel="noopener noreferrer" title="https://github.com/qbi/WannaCry">https://github.com/qbi/WannaCry</a> was sammeln. !<a href="http://sn.jonkman.ca/group/416/id" target="_blank" rel="noopener noreferrer" title="http://sn.jonkman.ca/group/416/id">security</a> ') }
|
||||||
|
|
||||||
it 'parses out URLs' do
|
it 'parses out URLs' do
|
||||||
|
|
|
@ -39,7 +39,7 @@ describe FetchOEmbedService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Both of JSON and XML provider are discoverable' do
|
context 'when both of JSON and XML provider are discoverable' do
|
||||||
before do
|
before do
|
||||||
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
||||||
status: 200,
|
status: 200,
|
||||||
|
@ -66,7 +66,7 @@ describe FetchOEmbedService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'JSON provider is discoverable while XML provider is not' do
|
context 'when JSON provider is discoverable while XML provider is not' do
|
||||||
before do
|
before do
|
||||||
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
||||||
status: 200,
|
status: 200,
|
||||||
|
@ -87,7 +87,7 @@ describe FetchOEmbedService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'XML provider is discoverable while JSON provider is not' do
|
context 'when XML provider is discoverable while JSON provider is not' do
|
||||||
before do
|
before do
|
||||||
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
||||||
status: 200,
|
status: 200,
|
||||||
|
@ -108,7 +108,7 @@ describe FetchOEmbedService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Invalid XML provider is discoverable while JSON provider is not' do
|
context 'with Invalid XML provider is discoverable while JSON provider is not' do
|
||||||
before do
|
before do
|
||||||
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
||||||
status: 200,
|
status: 200,
|
||||||
|
@ -122,7 +122,7 @@ describe FetchOEmbedService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Neither of JSON and XML provider is discoverable' do
|
context 'with neither of JSON and XML provider is discoverable' do
|
||||||
before do
|
before do
|
||||||
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
||||||
status: 200,
|
status: 200,
|
||||||
|
@ -136,7 +136,7 @@ describe FetchOEmbedService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Empty JSON provider is discoverable' do
|
context 'when empty JSON provider is discoverable' do
|
||||||
before do
|
before do
|
||||||
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
||||||
status: 200,
|
status: 200,
|
||||||
|
|
|
@ -16,7 +16,7 @@ RSpec.describe FetchRemoteStatusService, type: :service do
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'protocol is :activitypub' do
|
context 'when protocol is :activitypub' do
|
||||||
subject { described_class.new.call(note[:id], prefetched_body: prefetched_body) }
|
subject { described_class.new.call(note[:id], prefetched_body: prefetched_body) }
|
||||||
|
|
||||||
let(:prefetched_body) { Oj.dump(note) }
|
let(:prefetched_body) { Oj.dump(note) }
|
||||||
|
|
|
@ -7,7 +7,7 @@ RSpec.describe FollowService, type: :service do
|
||||||
|
|
||||||
let(:sender) { Fabricate(:account, username: 'alice') }
|
let(:sender) { Fabricate(:account, username: 'alice') }
|
||||||
|
|
||||||
context 'local account' do
|
context 'when local account' do
|
||||||
describe 'locked account' do
|
describe 'locked account' do
|
||||||
let(:bob) { Fabricate(:account, locked: true, username: 'bob') }
|
let(:bob) { Fabricate(:account, locked: true, username: 'bob') }
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ RSpec.describe FollowService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'remote ActivityPub account' do
|
context 'when remote ActivityPub account' do
|
||||||
let(:bob) { Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') }
|
let(:bob) { Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
|
@ -13,7 +13,7 @@ RSpec.describe ImportService, type: :service do
|
||||||
stub_request(:post, 'https://example.com/inbox').to_return(status: 200)
|
stub_request(:post, 'https://example.com/inbox').to_return(status: 200)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'import old-style list of muted users' do
|
context 'when importing old-style list of muted users' do
|
||||||
subject { ImportService.new }
|
subject { ImportService.new }
|
||||||
|
|
||||||
let(:csv) { attachment_fixture('mute-imports.txt') }
|
let(:csv) { attachment_fixture('mute-imports.txt') }
|
||||||
|
@ -51,7 +51,7 @@ RSpec.describe ImportService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'import new-style list of muted users' do
|
context 'when importing new-style list of muted users' do
|
||||||
subject { ImportService.new }
|
subject { ImportService.new }
|
||||||
|
|
||||||
let(:csv) { attachment_fixture('new-mute-imports.txt') }
|
let(:csv) { attachment_fixture('new-mute-imports.txt') }
|
||||||
|
@ -92,7 +92,7 @@ RSpec.describe ImportService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'import old-style list of followed users' do
|
context 'when importing old-style list of followed users' do
|
||||||
subject { ImportService.new }
|
subject { ImportService.new }
|
||||||
|
|
||||||
let(:csv) { attachment_fixture('mute-imports.txt') }
|
let(:csv) { attachment_fixture('mute-imports.txt') }
|
||||||
|
@ -134,7 +134,7 @@ RSpec.describe ImportService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'import new-style list of followed users' do
|
context 'when importing new-style list of followed users' do
|
||||||
subject { ImportService.new }
|
subject { ImportService.new }
|
||||||
|
|
||||||
let(:csv) { attachment_fixture('new-following-imports.txt') }
|
let(:csv) { attachment_fixture('new-following-imports.txt') }
|
||||||
|
@ -181,7 +181,7 @@ RSpec.describe ImportService, type: :service do
|
||||||
# Based on the bug report 20571 where UTF-8 encoded domains were rejecting import of their users
|
# Based on the bug report 20571 where UTF-8 encoded domains were rejecting import of their users
|
||||||
#
|
#
|
||||||
# https://github.com/mastodon/mastodon/issues/20571
|
# https://github.com/mastodon/mastodon/issues/20571
|
||||||
context 'utf-8 encoded domains' do
|
context 'with a utf-8 encoded domains' do
|
||||||
subject { ImportService.new }
|
subject { ImportService.new }
|
||||||
|
|
||||||
let!(:nare) { Fabricate(:account, username: 'nare', domain: 'թութ.հայ', locked: false, protocol: :activitypub, inbox_url: 'https://թութ.հայ/inbox') }
|
let!(:nare) { Fabricate(:account, username: 'nare', domain: 'թութ.հայ', locked: false, protocol: :activitypub, inbox_url: 'https://թութ.հայ/inbox') }
|
||||||
|
@ -200,7 +200,7 @@ RSpec.describe ImportService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'import bookmarks' do
|
context 'when importing bookmarks' do
|
||||||
subject { ImportService.new }
|
subject { ImportService.new }
|
||||||
|
|
||||||
let(:csv) { attachment_fixture('bookmark-imports.txt') }
|
let(:csv) { attachment_fixture('bookmark-imports.txt') }
|
||||||
|
|
|
@ -49,7 +49,7 @@ RSpec.describe NotifyService, type: :service do
|
||||||
expect { subject }.to_not change(Notification, :count)
|
expect { subject }.to_not change(Notification, :count)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for direct messages' do
|
context 'with direct messages' do
|
||||||
let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct)) }
|
let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct)) }
|
||||||
let(:type) { :mention }
|
let(:type) { :mention }
|
||||||
|
|
||||||
|
@ -58,14 +58,14 @@ RSpec.describe NotifyService, type: :service do
|
||||||
user.save
|
user.save
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'if recipient is supposed to be following sender' do
|
context 'when recipient is supposed to be following sender' do
|
||||||
let(:enabled) { true }
|
let(:enabled) { true }
|
||||||
|
|
||||||
it 'does not notify' do
|
it 'does not notify' do
|
||||||
expect { subject }.to_not change(Notification, :count)
|
expect { subject }.to_not change(Notification, :count)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'if the message chain is initiated by recipient, but is not direct message' do
|
context 'when the message chain is initiated by recipient, but is not direct message' do
|
||||||
let(:reply_to) { Fabricate(:status, account: recipient) }
|
let(:reply_to) { Fabricate(:status, account: recipient) }
|
||||||
let!(:mention) { Fabricate(:mention, account: sender, status: reply_to) }
|
let!(:mention) { Fabricate(:mention, account: sender, status: reply_to) }
|
||||||
let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct, thread: reply_to)) }
|
let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct, thread: reply_to)) }
|
||||||
|
@ -75,7 +75,7 @@ RSpec.describe NotifyService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'if the message chain is initiated by recipient, but without a mention to the sender, even if the sender sends multiple messages in a row' do
|
context 'when the message chain is initiated by recipient, but without a mention to the sender, even if the sender sends multiple messages in a row' do
|
||||||
let(:reply_to) { Fabricate(:status, account: recipient) }
|
let(:reply_to) { Fabricate(:status, account: recipient) }
|
||||||
let!(:mention) { Fabricate(:mention, account: sender, status: reply_to) }
|
let!(:mention) { Fabricate(:mention, account: sender, status: reply_to) }
|
||||||
let(:dummy_reply) { Fabricate(:status, account: sender, visibility: :direct, thread: reply_to) }
|
let(:dummy_reply) { Fabricate(:status, account: sender, visibility: :direct, thread: reply_to) }
|
||||||
|
@ -86,7 +86,7 @@ RSpec.describe NotifyService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'if the message chain is initiated by the recipient with a mention to the sender' do
|
context 'when the message chain is initiated by the recipient with a mention to the sender' do
|
||||||
let(:reply_to) { Fabricate(:status, account: recipient, visibility: :direct) }
|
let(:reply_to) { Fabricate(:status, account: recipient, visibility: :direct) }
|
||||||
let!(:mention) { Fabricate(:mention, account: sender, status: reply_to) }
|
let!(:mention) { Fabricate(:mention, account: sender, status: reply_to) }
|
||||||
let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct, thread: reply_to)) }
|
let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct, thread: reply_to)) }
|
||||||
|
@ -97,7 +97,7 @@ RSpec.describe NotifyService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'if recipient is NOT supposed to be following sender' do
|
context 'when recipient is NOT supposed to be following sender' do
|
||||||
let(:enabled) { false }
|
let(:enabled) { false }
|
||||||
|
|
||||||
it 'does notify' do
|
it 'does notify' do
|
||||||
|
|
|
@ -33,10 +33,10 @@ RSpec.describe ProcessMentionsService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'resolving a mention to a remote account' do
|
context 'with resolving a mention to a remote account' do
|
||||||
let(:status) { Fabricate(:status, account: account, text: "Hello @#{remote_user.acct}", visibility: :public) }
|
let(:status) { Fabricate(:status, account: account, text: "Hello @#{remote_user.acct}", visibility: :public) }
|
||||||
|
|
||||||
context 'ActivityPub' do
|
context 'with ActivityPub' do
|
||||||
context do
|
context do
|
||||||
let!(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
|
let!(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ RSpec.describe ProcessMentionsService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'mentioning a user several times when not saving records' do
|
context 'when mentioning a user several times when not saving records' do
|
||||||
let!(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
|
let!(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
|
||||||
let(:status) { Fabricate(:status, account: account, text: "Hello @#{remote_user.acct} @#{remote_user.acct} @#{remote_user.acct}", visibility: :public) }
|
let(:status) { Fabricate(:status, account: account, text: "Hello @#{remote_user.acct} @#{remote_user.acct} @#{remote_user.acct}", visibility: :public) }
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ RSpec.describe ProcessMentionsService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Temporarily-unreachable ActivityPub user' do
|
context 'with a Temporarily-unreachable ActivityPub user' do
|
||||||
let!(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox', last_webfingered_at: nil) }
|
let!(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox', last_webfingered_at: nil) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
|
@ -5,7 +5,7 @@ require 'rails_helper'
|
||||||
RSpec.describe ReblogService, type: :service do
|
RSpec.describe ReblogService, type: :service do
|
||||||
let(:alice) { Fabricate(:account, username: 'alice') }
|
let(:alice) { Fabricate(:account, username: 'alice') }
|
||||||
|
|
||||||
context 'creates a reblog with appropriate visibility' do
|
context 'when creates a reblog with appropriate visibility' do
|
||||||
subject { ReblogService.new }
|
subject { ReblogService.new }
|
||||||
|
|
||||||
let(:visibility) { :public }
|
let(:visibility) { :public }
|
||||||
|
@ -61,7 +61,7 @@ RSpec.describe ReblogService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'ActivityPub' do
|
context 'with ActivityPub' do
|
||||||
subject { ReblogService.new }
|
subject { ReblogService.new }
|
||||||
|
|
||||||
let(:bob) { Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
|
let(:bob) { Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
|
||||||
|
|
|
@ -7,7 +7,7 @@ RSpec.describe ReportService, type: :service do
|
||||||
|
|
||||||
let(:source_account) { Fabricate(:account) }
|
let(:source_account) { Fabricate(:account) }
|
||||||
|
|
||||||
context 'for a remote account' do
|
context 'with a remote account' do
|
||||||
let(:remote_account) { Fabricate(:account, domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') }
|
let(:remote_account) { Fabricate(:account, domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
|
@ -15,7 +15,7 @@ RSpec.describe ResolveAccountService, type: :service do
|
||||||
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:hoge@example.com').to_return(status: 410)
|
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:hoge@example.com').to_return(status: 410)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'using skip_webfinger' do
|
context 'when using skip_webfinger' do
|
||||||
context 'when account is known' do
|
context 'when account is known' do
|
||||||
let!(:remote_account) { Fabricate(:account, username: 'foo', domain: 'ap.example.com', protocol: 'activitypub') }
|
let!(:remote_account) { Fabricate(:account, username: 'foo', domain: 'ap.example.com', protocol: 'activitypub') }
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ RSpec.describe ResolveAccountService, type: :service do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when webfinger returns http gone' do
|
context 'when webfinger returns http gone' do
|
||||||
context 'for a previously known account' do
|
context 'with a previously known account' do
|
||||||
before do
|
before do
|
||||||
Fabricate(:account, username: 'hoge', domain: 'example.com', last_webfingered_at: nil)
|
Fabricate(:account, username: 'hoge', domain: 'example.com', last_webfingered_at: nil)
|
||||||
allow(AccountDeletionWorker).to receive(:perform_async)
|
allow(AccountDeletionWorker).to receive(:perform_async)
|
||||||
|
@ -94,7 +94,7 @@ RSpec.describe ResolveAccountService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for a previously unknown account' do
|
context 'with a previously unknown account' do
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
expect(subject.call('hoge@example.com')).to be_nil
|
expect(subject.call('hoge@example.com')).to be_nil
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,7 +30,7 @@ describe ResolveURLService, type: :service do
|
||||||
expect(subject.call(url)).to eq known_account
|
expect(subject.call(url)).to eq known_account
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'searching for a remote private status' do
|
context 'when searching for a remote private status' do
|
||||||
let(:account) { Fabricate(:account) }
|
let(:account) { Fabricate(:account) }
|
||||||
let(:poster) { Fabricate(:account, domain: 'example.com') }
|
let(:poster) { Fabricate(:account, domain: 'example.com') }
|
||||||
let(:url) { 'https://example.com/@foo/42' }
|
let(:url) { 'https://example.com/@foo/42' }
|
||||||
|
@ -95,7 +95,7 @@ describe ResolveURLService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'searching for a local private status' do
|
context 'when searching for a local private status' do
|
||||||
let(:account) { Fabricate(:account) }
|
let(:account) { Fabricate(:account) }
|
||||||
let(:poster) { Fabricate(:account) }
|
let(:poster) { Fabricate(:account) }
|
||||||
let!(:status) { Fabricate(:status, account: poster, visibility: :private) }
|
let!(:status) { Fabricate(:status, account: poster, visibility: :private) }
|
||||||
|
@ -127,7 +127,7 @@ describe ResolveURLService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'searching for a link that redirects to a local public status' do
|
context 'when searching for a link that redirects to a local public status' do
|
||||||
let(:account) { Fabricate(:account) }
|
let(:account) { Fabricate(:account) }
|
||||||
let(:poster) { Fabricate(:account) }
|
let(:poster) { Fabricate(:account) }
|
||||||
let!(:status) { Fabricate(:status, account: poster, visibility: :public) }
|
let!(:status) { Fabricate(:status, account: poster, visibility: :public) }
|
||||||
|
|
|
@ -23,7 +23,7 @@ describe SearchService, type: :service do
|
||||||
@query = 'http://test.host/query'
|
@query = 'http://test.host/query'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'that does not find anything' do
|
context 'when it does not find anything' do
|
||||||
it 'returns the empty results' do
|
it 'returns the empty results' do
|
||||||
service = double(call: nil)
|
service = double(call: nil)
|
||||||
allow(ResolveURLService).to receive(:new).and_return(service)
|
allow(ResolveURLService).to receive(:new).and_return(service)
|
||||||
|
@ -34,7 +34,7 @@ describe SearchService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'that finds an account' do
|
context 'when it finds an account' do
|
||||||
it 'includes the account in the results' do
|
it 'includes the account in the results' do
|
||||||
account = Account.new
|
account = Account.new
|
||||||
service = double(call: account)
|
service = double(call: account)
|
||||||
|
@ -46,7 +46,7 @@ describe SearchService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'that finds a status' do
|
context 'when it finds a status' do
|
||||||
it 'includes the status in the results' do
|
it 'includes the status in the results' do
|
||||||
status = Status.new
|
status = Status.new
|
||||||
service = double(call: status)
|
service = double(call: status)
|
||||||
|
@ -60,7 +60,7 @@ describe SearchService, type: :service do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'with a non-url query' do
|
describe 'with a non-url query' do
|
||||||
context 'that matches an account' do
|
context 'when it matches an account' do
|
||||||
it 'includes the account in the results' do
|
it 'includes the account in the results' do
|
||||||
query = 'username'
|
query = 'username'
|
||||||
account = Account.new
|
account = Account.new
|
||||||
|
@ -73,7 +73,7 @@ describe SearchService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'that matches a tag' do
|
context 'when it matches a tag' do
|
||||||
it 'includes the tag in the results' do
|
it 'includes the tag in the results' do
|
||||||
query = '#tag'
|
query = '#tag'
|
||||||
tag = Tag.new
|
tag = Tag.new
|
||||||
|
|
|
@ -12,7 +12,7 @@ RSpec.describe UnallowDomainService, type: :service do
|
||||||
let!(:already_banned_account) { Fabricate(:account, username: 'badguy', domain: 'evil.org', suspended: true, silenced: true) }
|
let!(:already_banned_account) { Fabricate(:account, username: 'badguy', domain: 'evil.org', suspended: true, silenced: true) }
|
||||||
let!(:domain_allow) { Fabricate(:domain_allow, domain: 'evil.org') }
|
let!(:domain_allow) { Fabricate(:domain_allow, domain: 'evil.org') }
|
||||||
|
|
||||||
context 'in limited federation mode' do
|
context 'with limited federation mode' do
|
||||||
before do
|
before do
|
||||||
allow(subject).to receive(:whitelist_mode?).and_return(true)
|
allow(subject).to receive(:whitelist_mode?).and_return(true)
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,7 +5,7 @@ require 'rails_helper'
|
||||||
RSpec.describe VerifyLinkService, type: :service do
|
RSpec.describe VerifyLinkService, type: :service do
|
||||||
subject { described_class.new }
|
subject { described_class.new }
|
||||||
|
|
||||||
context 'given a local account' do
|
context 'when given a local account' do
|
||||||
let(:account) { Fabricate(:account, username: 'alice') }
|
let(:account) { Fabricate(:account, username: 'alice') }
|
||||||
let(:field) { Account::Field.new(account, 'name' => 'Website', 'value' => 'http://example.com') }
|
let(:field) { Account::Field.new(account, 'name' => 'Website', 'value' => 'http://example.com') }
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ RSpec.describe VerifyLinkService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'given a remote account' do
|
context 'when given a remote account' do
|
||||||
let(:account) { Fabricate(:account, username: 'alice', domain: 'example.com', url: 'https://profile.example.com/alice') }
|
let(:account) { Fabricate(:account, username: 'alice', domain: 'example.com', url: 'https://profile.example.com/alice') }
|
||||||
let(:field) { Account::Field.new(account, 'name' => 'Website', 'value' => '<a href="http://example.com" rel="me"><span class="invisible">http://</span><span class="">example.com</span><span class="invisible"></span></a>') }
|
let(:field) { Account::Field.new(account, 'name' => 'Website', 'value' => '<a href="http://example.com" rel="me"><span class="invisible">http://</span><span class="">example.com</span><span class="invisible"></span></a>') }
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ RSpec.describe DisallowedHashtagsValidator, type: :validator do
|
||||||
let(:status) { double(errors: errors, local?: local, reblog?: reblog, text: disallowed_tags.map { |x| "##{x}" }.join(' ')) }
|
let(:status) { double(errors: errors, local?: local, reblog?: reblog, text: disallowed_tags.map { |x| "##{x}" }.join(' ')) }
|
||||||
let(:errors) { double(add: nil) }
|
let(:errors) { double(add: nil) }
|
||||||
|
|
||||||
context 'for a remote reblog' do
|
context 'with a remote reblog' do
|
||||||
let(:local) { false }
|
let(:local) { false }
|
||||||
let(:reblog) { true }
|
let(:reblog) { true }
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ RSpec.describe DisallowedHashtagsValidator, type: :validator do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for a local original status' do
|
context 'with a local original status' do
|
||||||
let(:local) { true }
|
let(:local) { true }
|
||||||
let(:reblog) { false }
|
let(:reblog) { false }
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ describe EmailMxValidator do
|
||||||
describe '#validate' do
|
describe '#validate' do
|
||||||
let(:user) { double(email: 'foo@example.com', sign_up_ip: '1.2.3.4', errors: double(add: nil)) }
|
let(:user) { double(email: 'foo@example.com', sign_up_ip: '1.2.3.4', errors: double(add: nil)) }
|
||||||
|
|
||||||
context 'for an e-mail domain that is explicitly allowed' do
|
context 'with an e-mail domain that is explicitly allowed' do
|
||||||
around do |block|
|
around do |block|
|
||||||
tmp = Rails.configuration.x.email_domains_whitelist
|
tmp = Rails.configuration.x.email_domains_whitelist
|
||||||
Rails.configuration.x.email_domains_whitelist = 'example.com'
|
Rails.configuration.x.email_domains_whitelist = 'example.com'
|
||||||
|
|
|
@ -18,7 +18,7 @@ RSpec.describe FollowLimitValidator, type: :validator do
|
||||||
let(:_nil) { true }
|
let(:_nil) { true }
|
||||||
let(:local) { false }
|
let(:local) { false }
|
||||||
|
|
||||||
context 'follow.account.nil? || !follow.account.local?' do
|
context 'with follow.account.nil? || !follow.account.local?' do
|
||||||
let(:_nil) { true }
|
let(:_nil) { true }
|
||||||
|
|
||||||
it 'not calls errors.add' do
|
it 'not calls errors.add' do
|
||||||
|
@ -26,11 +26,11 @@ RSpec.describe FollowLimitValidator, type: :validator do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!(follow.account.nil? || !follow.account.local?)' do
|
context 'with !(follow.account.nil? || !follow.account.local?)' do
|
||||||
let(:_nil) { false }
|
let(:_nil) { false }
|
||||||
let(:local) { true }
|
let(:local) { true }
|
||||||
|
|
||||||
context 'limit_reached?' do
|
context 'when limit_reached?' do
|
||||||
let(:limit_reached) { true }
|
let(:limit_reached) { true }
|
||||||
|
|
||||||
it 'calls errors.add' do
|
it 'calls errors.add' do
|
||||||
|
@ -39,7 +39,7 @@ RSpec.describe FollowLimitValidator, type: :validator do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!limit_reached?' do
|
context 'with !limit_reached?' do
|
||||||
let(:limit_reached) { false }
|
let(:limit_reached) { false }
|
||||||
|
|
||||||
it 'not calls errors.add' do
|
it 'not calls errors.add' do
|
||||||
|
|
|
@ -18,7 +18,7 @@ RSpec.describe PollValidator, type: :validator do
|
||||||
expect(errors).to_not have_received(:add)
|
expect(errors).to_not have_received(:add)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'expires just 5 min ago' do
|
context 'when expires is just 5 min ago' do
|
||||||
let(:expires_at) { 5.minutes.from_now }
|
let(:expires_at) { 5.minutes.from_now }
|
||||||
|
|
||||||
it 'not calls errors add' do
|
it 'not calls errors add' do
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue