Refactor and improve tests (#17386)
* Change account and user fabricators to simplify and improve tests - `Fabricate(:account)` implicitly fabricates an associated `user` if no `domain` attribute is given (an account with `domain: nil` is considered a local account, but no user record was created), unless `user: nil` is passed - `Fabricate(:account, user: Fabricate(:user))` should still be possible but is discouraged. * Fix and refactor tests - avoid passing unneeded attributes to `Fabricate(:user)` or `Fabricate(:account)` - avoid embedding `Fabricate(:user)` into a `Fabricate(:account)` or the other way around - prefer `Fabricate(:user, account_attributes: …)` to `Fabricate(:user, account: Fabricate(:account, …)` - also, some tests were using remote accounts with local user records, which is not representative of production code.
This commit is contained in:
		
							parent
							
								
									33ea1c9008
								
							
						
					
					
						commit
						1f07ab014d
					
				
					 95 changed files with 187 additions and 185 deletions
				
			
		|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe AccountsController, type: :controller do | RSpec.describe AccountsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:account) { Fabricate(:user).account } |   let(:account) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   shared_examples 'cachable response' do |   shared_examples 'cachable response' do | ||||||
|     it 'does not set cookies' do |     it 'does not set cookies' do | ||||||
|  |  | ||||||
|  | @ -61,7 +61,7 @@ RSpec.describe Admin::AccountsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   describe 'GET #show' do |   describe 'GET #show' do | ||||||
|     let(:current_user) { Fabricate(:user, admin: true) } |     let(:current_user) { Fabricate(:user, admin: true) } | ||||||
|     let(:account) { Fabricate(:account, username: 'bob') } |     let(:account) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|     it 'returns http success' do |     it 'returns http success' do | ||||||
|       get :show, params: { id: account.id } |       get :show, params: { id: account.id } | ||||||
|  | @ -73,7 +73,7 @@ RSpec.describe Admin::AccountsController, type: :controller do | ||||||
|     subject { post :memorialize, params: { id: account.id } } |     subject { post :memorialize, params: { id: account.id } } | ||||||
| 
 | 
 | ||||||
|     let(:current_user) { Fabricate(:user, admin: current_user_admin) } |     let(:current_user) { Fabricate(:user, admin: current_user_admin) } | ||||||
|     let(:account) { Fabricate(:account, user: user) } |     let(:account) { user.account } | ||||||
|     let(:user) { Fabricate(:user, admin: target_user_admin) } |     let(:user) { Fabricate(:user, admin: target_user_admin) } | ||||||
| 
 | 
 | ||||||
|     context 'when user is admin' do |     context 'when user is admin' do | ||||||
|  | @ -125,7 +125,7 @@ RSpec.describe Admin::AccountsController, type: :controller do | ||||||
|     subject { post :enable, params: { id: account.id } } |     subject { post :enable, params: { id: account.id } } | ||||||
| 
 | 
 | ||||||
|     let(:current_user) { Fabricate(:user, admin: admin) } |     let(:current_user) { Fabricate(:user, admin: admin) } | ||||||
|     let(:account) { Fabricate(:account, user: user) } |     let(:account) { user.account } | ||||||
|     let(:user) { Fabricate(:user, disabled: true) } |     let(:user) { Fabricate(:user, disabled: true) } | ||||||
| 
 | 
 | ||||||
|     context 'when user is admin' do |     context 'when user is admin' do | ||||||
|  |  | ||||||
|  | @ -11,10 +11,9 @@ RSpec.describe Admin::ChangeEmailsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   describe "GET #show" do |   describe "GET #show" do | ||||||
|     it "returns http success" do |     it "returns http success" do | ||||||
|       account = Fabricate(:account) |       user = Fabricate(:user) | ||||||
|       user = Fabricate(:user, account: account) |  | ||||||
| 
 | 
 | ||||||
|       get :show, params: { account_id: account.id } |       get :show, params: { account_id: user.account.id } | ||||||
| 
 | 
 | ||||||
|       expect(response).to have_http_status(200) |       expect(response).to have_http_status(200) | ||||||
|     end |     end | ||||||
|  | @ -26,12 +25,11 @@ RSpec.describe Admin::ChangeEmailsController, type: :controller do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     it "returns http success" do |     it "returns http success" do | ||||||
|       account = Fabricate(:account) |       user = Fabricate(:user) | ||||||
|       user = Fabricate(:user, account: account) |  | ||||||
| 
 | 
 | ||||||
|       previous_email = user.email |       previous_email = user.email | ||||||
| 
 | 
 | ||||||
|       post :update, params: { account_id: account.id, user: { unconfirmed_email: 'test@example.com' } } |       post :update, params: { account_id: user.account.id, user: { unconfirmed_email: 'test@example.com' } } | ||||||
| 
 | 
 | ||||||
|       user.reload |       user.reload | ||||||
| 
 | 
 | ||||||
|  | @ -41,7 +39,7 @@ RSpec.describe Admin::ChangeEmailsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|       expect(UserMailer).to have_received(:confirmation_instructions).with(user, user.confirmation_token, { to: 'test@example.com' }) |       expect(UserMailer).to have_received(:confirmation_instructions).with(user, user.confirmation_token, { to: 'test@example.com' }) | ||||||
| 
 | 
 | ||||||
|       expect(response).to redirect_to(admin_account_path(account.id)) |       expect(response).to redirect_to(admin_account_path(user.account.id)) | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -9,9 +9,8 @@ RSpec.describe Admin::ConfirmationsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   describe 'POST #create' do |   describe 'POST #create' do | ||||||
|     it 'confirms the user' do |     it 'confirms the user' do | ||||||
|       account = Fabricate(:account) |       user = Fabricate(:user, confirmed_at: false) | ||||||
|       user = Fabricate(:user, confirmed_at: false, account: account) |       post :create, params: { account_id: user.account.id } | ||||||
|       post :create, params: { account_id: account.id } |  | ||||||
| 
 | 
 | ||||||
|       expect(response).to redirect_to(admin_accounts_path) |       expect(response).to redirect_to(admin_accounts_path) | ||||||
|       expect(user.reload).to be_confirmed |       expect(user.reload).to be_confirmed | ||||||
|  | @ -32,10 +31,9 @@ RSpec.describe Admin::ConfirmationsController, type: :controller do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe 'POST #resernd' do |   describe 'POST #resernd' do | ||||||
|     subject { post :resend, params: { account_id: account.id } } |     subject { post :resend, params: { account_id: user.account.id } } | ||||||
| 
 | 
 | ||||||
|     let(:account) { Fabricate(:account) } |     let!(:user) { Fabricate(:user, confirmed_at: confirmed_at) } | ||||||
|     let!(:user) { Fabricate(:user, confirmed_at: confirmed_at, account: account) } |  | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       allow(UserMailer).to receive(:confirmation_instructions) { double(:email, deliver_later: nil) } |       allow(UserMailer).to receive(:confirmation_instructions) { double(:email, deliver_later: nil) } | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| describe Admin::ResetsController do | describe Admin::ResetsController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:account) { Fabricate(:account, user: Fabricate(:user)) } |   let(:account) { Fabricate(:account) } | ||||||
|   before do |   before do | ||||||
|     sign_in Fabricate(:user, admin: true), scope: :user |     sign_in Fabricate(:user, admin: true), scope: :user | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  | @ -28,7 +28,7 @@ describe Api::BaseController do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe 'non-functional accounts handling' do |   describe 'non-functional accounts handling' do | ||||||
|     let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |     let(:user)  { Fabricate(:user) } | ||||||
|     let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read') } |     let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read') } | ||||||
| 
 | 
 | ||||||
|     controller do |     controller do | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Accounts::CredentialsController do | describe Api::V1::Accounts::CredentialsController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
| 
 | 
 | ||||||
|   context 'with an oauth token' do |   context 'with an oauth token' do | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Accounts::FollowerAccountsController do | describe Api::V1::Accounts::FollowerAccountsController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)    { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)    { Fabricate(:user) } | ||||||
|   let(:token)   { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:accounts') } |   let(:token)   { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:accounts') } | ||||||
|   let(:account) { Fabricate(:account) } |   let(:account) { Fabricate(:account) } | ||||||
|   let(:alice)   { Fabricate(:account) } |   let(:alice)   { Fabricate(:account) } | ||||||
|  | @ -49,10 +49,10 @@ describe Api::V1::Accounts::FollowerAccountsController do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     context 'when requesting user is the account owner' do |     context 'when requesting user is the account owner' do | ||||||
|       let(:user) { Fabricate(:user, account: account) } |       let(:user) { account.user } | ||||||
| 
 | 
 | ||||||
|       it 'returns all accounts, including muted accounts' do |       it 'returns all accounts, including muted accounts' do | ||||||
|         user.account.mute!(bob) |         account.mute!(bob) | ||||||
|         get :index, params: { account_id: account.id, limit: 2 } |         get :index, params: { account_id: account.id, limit: 2 } | ||||||
| 
 | 
 | ||||||
|         expect(body_as_json.size).to eq 2 |         expect(body_as_json.size).to eq 2 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Accounts::FollowingAccountsController do | describe Api::V1::Accounts::FollowingAccountsController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)    { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)    { Fabricate(:user) } | ||||||
|   let(:token)   { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:accounts') } |   let(:token)   { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:accounts') } | ||||||
|   let(:account) { Fabricate(:account) } |   let(:account) { Fabricate(:account) } | ||||||
|   let(:alice)   { Fabricate(:account) } |   let(:alice)   { Fabricate(:account) } | ||||||
|  | @ -49,10 +49,10 @@ describe Api::V1::Accounts::FollowingAccountsController do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     context 'when requesting user is the account owner' do |     context 'when requesting user is the account owner' do | ||||||
|       let(:user) { Fabricate(:user, account: account) } |       let(:user) { account.user } | ||||||
| 
 | 
 | ||||||
|       it 'returns all accounts, including muted accounts' do |       it 'returns all accounts, including muted accounts' do | ||||||
|         user.account.mute!(bob) |         account.mute!(bob) | ||||||
|         get :index, params: { account_id: account.id, limit: 2 } |         get :index, params: { account_id: account.id, limit: 2 } | ||||||
| 
 | 
 | ||||||
|         expect(body_as_json.size).to eq 2 |         expect(body_as_json.size).to eq 2 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Accounts::ListsController do | describe Api::V1::Accounts::ListsController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)    { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)    { Fabricate(:user) } | ||||||
|   let(:token)   { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:lists') } |   let(:token)   { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:lists') } | ||||||
|   let(:account) { Fabricate(:account) } |   let(:account) { Fabricate(:account) } | ||||||
|   let(:list)    { Fabricate(:list, account: user.account) } |   let(:list)    { Fabricate(:list, account: user.account) } | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Accounts::NotesController do | describe Api::V1::Accounts::NotesController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)    { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)    { Fabricate(:user) } | ||||||
|   let(:token)   { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:accounts') } |   let(:token)   { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:accounts') } | ||||||
|   let(:account) { Fabricate(:account) } |   let(:account) { Fabricate(:account) } | ||||||
|   let(:comment) { 'foo' } |   let(:comment) { 'foo' } | ||||||
|  |  | ||||||
|  | @ -3,8 +3,8 @@ | ||||||
| require 'rails_helper' | require 'rails_helper' | ||||||
| 
 | 
 | ||||||
| RSpec.describe Api::V1::Accounts::PinsController, type: :controller do | RSpec.describe Api::V1::Accounts::PinsController, type: :controller do | ||||||
|   let(:john)  { Fabricate(:user, account: Fabricate(:account, username: 'john')) } |   let(:john)  { Fabricate(:user) } | ||||||
|   let(:kevin) { Fabricate(:user, account: Fabricate(:account, username: 'kevin')) } |   let(:kevin) { Fabricate(:user) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: john.id, scopes: 'write:accounts') } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: john.id, scopes: 'write:accounts') } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Accounts::RelationshipsController do | describe Api::V1::Accounts::RelationshipsController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:follows') } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:follows') } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|  | @ -11,8 +11,8 @@ describe Api::V1::Accounts::RelationshipsController do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe 'GET #index' do |   describe 'GET #index' do | ||||||
|     let(:simon) { Fabricate(:user, email: 'simon@example.com', account: Fabricate(:account, username: 'simon')).account } |     let(:simon) { Fabricate(:account) } | ||||||
|     let(:lewis) { Fabricate(:user, email: 'lewis@example.com', account: Fabricate(:account, username: 'lewis')).account } |     let(:lewis) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       user.account.follow!(simon) |       user.account.follow!(simon) | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::Accounts::SearchController, type: :controller do | RSpec.describe Api::V1::Accounts::SearchController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:accounts') } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:accounts') } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Accounts::StatusesController do | describe Api::V1::Accounts::StatusesController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses') } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses') } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::AccountsController, type: :controller do | RSpec.describe Api::V1::AccountsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)   { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)   { Fabricate(:user) } | ||||||
|   let(:scopes) { '' } |   let(:scopes) { '' } | ||||||
|   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
| 
 | 
 | ||||||
|  | @ -69,7 +69,7 @@ RSpec.describe Api::V1::AccountsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   describe 'POST #follow' do |   describe 'POST #follow' do | ||||||
|     let(:scopes) { 'write:follows' } |     let(:scopes) { 'write:follows' } | ||||||
|     let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', locked: locked)).account } |     let(:other_account) { Fabricate(:account, username: 'bob', locked: locked) } | ||||||
| 
 | 
 | ||||||
|     context do |     context do | ||||||
|       before do |       before do | ||||||
|  | @ -150,7 +150,7 @@ RSpec.describe Api::V1::AccountsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   describe 'POST #unfollow' do |   describe 'POST #unfollow' do | ||||||
|     let(:scopes) { 'write:follows' } |     let(:scopes) { 'write:follows' } | ||||||
|     let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:other_account) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       user.account.follow!(other_account) |       user.account.follow!(other_account) | ||||||
|  | @ -170,7 +170,7 @@ RSpec.describe Api::V1::AccountsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   describe 'POST #remove_from_followers' do |   describe 'POST #remove_from_followers' do | ||||||
|     let(:scopes) { 'write:follows' } |     let(:scopes) { 'write:follows' } | ||||||
|     let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:other_account) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       other_account.follow!(user.account) |       other_account.follow!(user.account) | ||||||
|  | @ -190,7 +190,7 @@ RSpec.describe Api::V1::AccountsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   describe 'POST #block' do |   describe 'POST #block' do | ||||||
|     let(:scopes) { 'write:blocks' } |     let(:scopes) { 'write:blocks' } | ||||||
|     let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:other_account) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       user.account.follow!(other_account) |       user.account.follow!(other_account) | ||||||
|  | @ -214,7 +214,7 @@ RSpec.describe Api::V1::AccountsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   describe 'POST #unblock' do |   describe 'POST #unblock' do | ||||||
|     let(:scopes) { 'write:blocks' } |     let(:scopes) { 'write:blocks' } | ||||||
|     let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:other_account) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       user.account.block!(other_account) |       user.account.block!(other_account) | ||||||
|  | @ -234,7 +234,7 @@ RSpec.describe Api::V1::AccountsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   describe 'POST #mute' do |   describe 'POST #mute' do | ||||||
|     let(:scopes) { 'write:mutes' } |     let(:scopes) { 'write:mutes' } | ||||||
|     let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:other_account) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       user.account.follow!(other_account) |       user.account.follow!(other_account) | ||||||
|  | @ -262,7 +262,7 @@ RSpec.describe Api::V1::AccountsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   describe 'POST #mute with notifications set to false' do |   describe 'POST #mute with notifications set to false' do | ||||||
|     let(:scopes) { 'write:mutes' } |     let(:scopes) { 'write:mutes' } | ||||||
|     let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:other_account) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       user.account.follow!(other_account) |       user.account.follow!(other_account) | ||||||
|  | @ -290,7 +290,7 @@ RSpec.describe Api::V1::AccountsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   describe 'POST #mute with nonzero duration set' do |   describe 'POST #mute with nonzero duration set' do | ||||||
|     let(:scopes) { 'write:mutes' } |     let(:scopes) { 'write:mutes' } | ||||||
|     let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:other_account) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       user.account.follow!(other_account) |       user.account.follow!(other_account) | ||||||
|  | @ -318,7 +318,7 @@ RSpec.describe Api::V1::AccountsController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   describe 'POST #unmute' do |   describe 'POST #unmute' do | ||||||
|     let(:scopes) { 'write:mutes' } |     let(:scopes) { 'write:mutes' } | ||||||
|     let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:other_account) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       user.account.mute!(other_account) |       user.account.mute!(other_account) | ||||||
|  |  | ||||||
|  | @ -4,10 +4,10 @@ RSpec.describe Api::V1::Admin::AccountActionsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:role)   { 'moderator' } |   let(:role)   { 'moderator' } | ||||||
|   let(:user)   { Fabricate(:user, role: role, account: Fabricate(:account, username: 'alice')) } |   let(:user)   { Fabricate(:user, role: role) } | ||||||
|   let(:scopes) { 'admin:read admin:write' } |   let(:scopes) { 'admin:read admin:write' } | ||||||
|   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
|   let(:account) { Fabricate(:user).account } |   let(:account) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|     allow(controller).to receive(:doorkeeper_token) { token } |     allow(controller).to receive(:doorkeeper_token) { token } | ||||||
|  |  | ||||||
|  | @ -4,10 +4,10 @@ RSpec.describe Api::V1::Admin::AccountsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:role)   { 'moderator' } |   let(:role)   { 'moderator' } | ||||||
|   let(:user)   { Fabricate(:user, role: role, account: Fabricate(:account, username: 'alice')) } |   let(:user)   { Fabricate(:user, role: role) } | ||||||
|   let(:scopes) { 'admin:read admin:write' } |   let(:scopes) { 'admin:read admin:write' } | ||||||
|   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
|   let(:account) { Fabricate(:user).account } |   let(:account) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|     allow(controller).to receive(:doorkeeper_token) { token } |     allow(controller).to receive(:doorkeeper_token) { token } | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ RSpec.describe Api::V1::Admin::ReportsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:role)   { 'moderator' } |   let(:role)   { 'moderator' } | ||||||
|   let(:user)   { Fabricate(:user, role: role, account: Fabricate(:account, username: 'alice')) } |   let(:user)   { Fabricate(:user, role: role) } | ||||||
|   let(:scopes) { 'admin:read admin:write' } |   let(:scopes) { 'admin:read admin:write' } | ||||||
|   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
|   let(:report) { Fabricate(:report) } |   let(:report) { Fabricate(:report) } | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::BlocksController, type: :controller do | RSpec.describe Api::V1::BlocksController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)   { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)   { Fabricate(:user) } | ||||||
|   let(:scopes) { 'read:blocks' } |   let(:scopes) { 'read:blocks' } | ||||||
|   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,9 +3,9 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::ConversationsController, type: :controller do | RSpec.describe Api::V1::ConversationsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let!(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let!(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
|   let(:other) { Fabricate(:user, account: Fabricate(:account, username: 'bob')) } |   let(:other) { Fabricate(:user) } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|     allow(controller).to receive(:doorkeeper_token) { token } |     allow(controller).to receive(:doorkeeper_token) { token } | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::DomainBlocksController, type: :controller do | RSpec.describe Api::V1::DomainBlocksController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|  |  | ||||||
|  | @ -3,9 +3,9 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::FollowRequestsController, type: :controller do | RSpec.describe Api::V1::FollowRequestsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)     { Fabricate(:user, account: Fabricate(:account, username: 'alice', locked: true)) } |   let(:user)     { Fabricate(:user, account_attributes: { locked: true }) } | ||||||
|   let(:token)    { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token)    { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
|   let(:follower) { Fabricate(:account, username: 'bob') } |   let(:follower) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|     FollowService.new.call(follower, user.account) |     FollowService.new.call(follower, user.account) | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::InstancesController, type: :controller do | RSpec.describe Api::V1::InstancesController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id) } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Lists::AccountsController do | describe Api::V1::Lists::AccountsController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
|   let(:list)  { Fabricate(:list, account: user.account) } |   let(:list)  { Fabricate(:list, account: user.account) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::ListsController, type: :controller do | RSpec.describe Api::V1::ListsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let!(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let!(:user)  { Fabricate(:user) } | ||||||
|   let!(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let!(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
|   let!(:list)  { Fabricate(:list, account: user.account) } |   let!(:list)  { Fabricate(:list, account: user.account) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::MarkersController, type: :controller do | RSpec.describe Api::V1::MarkersController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let!(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let!(:user)  { Fabricate(:user) } | ||||||
|   let!(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses write:statuses') } |   let!(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses write:statuses') } | ||||||
| 
 | 
 | ||||||
|   before { allow(controller).to receive(:doorkeeper_token) { token } } |   before { allow(controller).to receive(:doorkeeper_token) { token } } | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::MediaController, type: :controller do | RSpec.describe Api::V1::MediaController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:media') } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:media') } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::MutesController, type: :controller do | RSpec.describe Api::V1::MutesController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)   { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)   { Fabricate(:user) } | ||||||
|   let(:scopes) { 'read:mutes' } |   let(:scopes) { 'read:mutes' } | ||||||
|   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,10 +3,10 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::NotificationsController, type: :controller do | RSpec.describe Api::V1::NotificationsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user, account_attributes: { username: 'alice' }) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
|   let(:other) { Fabricate(:user, account: Fabricate(:account, username: 'bob')) } |   let(:other) { Fabricate(:user) } | ||||||
|   let(:third) { Fabricate(:user, account: Fabricate(:account, username: 'carol')) } |   let(:third) { Fabricate(:user) } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|     allow(controller).to receive(:doorkeeper_token) { token } |     allow(controller).to receive(:doorkeeper_token) { token } | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::Polls::VotesController, type: :controller do | RSpec.describe Api::V1::Polls::VotesController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)   { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)   { Fabricate(:user) } | ||||||
|   let(:scopes) { 'write:statuses' } |   let(:scopes) { 'write:statuses' } | ||||||
|   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::PollsController, type: :controller do | RSpec.describe Api::V1::PollsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)   { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)   { Fabricate(:user) } | ||||||
|   let(:scopes) { 'read:statuses' } |   let(:scopes) { 'read:statuses' } | ||||||
|   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::ReportsController, type: :controller do | RSpec.describe Api::V1::ReportsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Statuses::BookmarksController do | describe Api::V1::Statuses::BookmarksController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } |   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:bookmarks', application: app) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:bookmarks', application: app) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::Statuses::FavouritedByAccountsController, type: :controller do | RSpec.describe Api::V1::Statuses::FavouritedByAccountsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } |   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, application: app, scopes: 'read:accounts') } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, application: app, scopes: 'read:accounts') } | ||||||
|   let(:alice) { Fabricate(:account) } |   let(:alice) { Fabricate(:account) } | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Statuses::FavouritesController do | describe Api::V1::Statuses::FavouritesController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } |   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:favourites', application: app) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:favourites', application: app) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Statuses::HistoriesController do | describe Api::V1::Statuses::HistoriesController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } |   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses', application: app) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses', application: app) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Statuses::MutesController do | describe Api::V1::Statuses::MutesController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } |   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:mutes', application: app) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:mutes', application: app) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Statuses::PinsController do | describe Api::V1::Statuses::PinsController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } |   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:accounts', application: app) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:accounts', application: app) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::Statuses::RebloggedByAccountsController, type: :controller do | RSpec.describe Api::V1::Statuses::RebloggedByAccountsController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } |   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, application: app, scopes: 'read:accounts') } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, application: app, scopes: 'read:accounts') } | ||||||
|   let(:alice) { Fabricate(:account) } |   let(:alice) { Fabricate(:account) } | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Statuses::ReblogsController do | describe Api::V1::Statuses::ReblogsController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } |   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:statuses', application: app) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:statuses', application: app) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Statuses::SourcesController do | describe Api::V1::Statuses::SourcesController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } |   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses', application: app) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses', application: app) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V1::StatusesController, type: :controller do | RSpec.describe Api::V1::StatusesController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } |   let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, application: app, scopes: scopes) } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, application: app, scopes: scopes) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Timelines::HomeController do | describe Api::V1::Timelines::HomeController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice'), current_sign_in_at: 1.day.ago) } |   let(:user) { Fabricate(:user, current_sign_in_at: 1.day.ago) } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|     allow(controller).to receive(:doorkeeper_token) { token } |     allow(controller).to receive(:doorkeeper_token) { token } | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Timelines::ListController do | describe Api::V1::Timelines::ListController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user) { Fabricate(:user) } | ||||||
|   let(:list) { Fabricate(:list, account: user.account) } |   let(:list) { Fabricate(:list, account: user.account) } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|  | @ -30,7 +30,7 @@ describe Api::V1::Timelines::ListController do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   context 'with the wrong user context' do |   context 'with the wrong user context' do | ||||||
|     let(:other_user) { Fabricate(:user, account: Fabricate(:account, username: 'bob')) } |     let(:other_user) { Fabricate(:user) } | ||||||
|     let(:token)      { Fabricate(:accessible_access_token, resource_owner_id: other_user.id, scopes: 'read') } |     let(:token)      { Fabricate(:accessible_access_token, resource_owner_id: other_user.id, scopes: 'read') } | ||||||
| 
 | 
 | ||||||
|     describe 'GET #show' do |     describe 'GET #show' do | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Timelines::PublicController do | describe Api::V1::Timelines::PublicController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user) { Fabricate(:user) } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|     allow(controller).to receive(:doorkeeper_token) { token } |     allow(controller).to receive(:doorkeeper_token) { token } | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| describe Api::V1::Timelines::TagController do | describe Api::V1::Timelines::TagController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user) { Fabricate(:user) } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|     allow(controller).to receive(:doorkeeper_token) { token } |     allow(controller).to receive(:doorkeeper_token) { token } | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'rails_helper' | ||||||
| RSpec.describe Api::V2::SearchController, type: :controller do | RSpec.describe Api::V2::SearchController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:user)  { Fabricate(:user) } | ||||||
|   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:search') } |   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:search') } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|  |  | ||||||
|  | @ -49,7 +49,7 @@ describe ApplicationController, type: :controller do | ||||||
| 
 | 
 | ||||||
|     it 'returns account if signed in' do |     it 'returns account if signed in' do | ||||||
|       account = Fabricate(:account) |       account = Fabricate(:account) | ||||||
|       sign_in(Fabricate(:user, account: account)) |       sign_in(account.user) | ||||||
|       expect(controller.view_context.current_account).to eq account |       expect(controller.view_context.current_account).to eq account | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  | @ -164,13 +164,13 @@ describe ApplicationController, type: :controller do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     it 'does nothing if user who signed in is not suspended' do |     it 'does nothing if user who signed in is not suspended' do | ||||||
|       sign_in(Fabricate(:user, account: Fabricate(:account, suspended: false))) |       sign_in(Fabricate(:account, suspended: false).user) | ||||||
|       get 'success' |       get 'success' | ||||||
|       expect(response).to have_http_status(200) |       expect(response).to have_http_status(200) | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     it 'redirects to account status page' do |     it 'redirects to account status page' do | ||||||
|       sign_in(Fabricate(:user, account: Fabricate(:account, suspended: true))) |       sign_in(Fabricate(:account, suspended: true).user) | ||||||
|       get 'success' |       get 'success' | ||||||
|       expect(response).to redirect_to(edit_user_registration_path) |       expect(response).to redirect_to(edit_user_registration_path) | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  | @ -228,7 +228,7 @@ RSpec.describe Auth::RegistrationsController, type: :controller do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     it 'does nothing if user already exists' do |     it 'does nothing if user already exists' do | ||||||
|       Fabricate(:user, account: Fabricate(:account, username: 'test')) |       Fabricate(:account, username: 'test') | ||||||
|       subject |       subject | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -37,8 +37,11 @@ RSpec.describe Auth::SessionsController, type: :controller do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     context 'with a suspended user' do |     context 'with a suspended user' do | ||||||
|  |       before do | ||||||
|  |         user.account.suspend! | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|       it 'redirects to home after sign out' do |       it 'redirects to home after sign out' do | ||||||
|         Fabricate(:account, user: user, suspended: true) |  | ||||||
|         sign_in(user, scope: :user) |         sign_in(user, scope: :user) | ||||||
|         delete :destroy |         delete :destroy | ||||||
| 
 | 
 | ||||||
|  | @ -78,8 +81,8 @@ RSpec.describe Auth::SessionsController, type: :controller do | ||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|       context 'using a valid email and existing user' do |       context 'using a valid email and existing user' do | ||||||
|         let(:user) do |         let!(:user) do | ||||||
|           account = Fabricate.build(:account, username: 'pam_user1') |           account = Fabricate.build(:account, username: 'pam_user1', user: nil) | ||||||
|           account.save!(validate: false) |           account.save!(validate: false) | ||||||
|           user = Fabricate(:user, email: 'pam@example.com', password: nil, account: account, external: true) |           user = Fabricate(:user, email: 'pam@example.com', password: nil, account: account, external: true) | ||||||
|           user |           user | ||||||
|  |  | ||||||
|  | @ -16,7 +16,6 @@ describe AuthorizeInteractionsController do | ||||||
| 
 | 
 | ||||||
|     describe 'when signed in' do |     describe 'when signed in' do | ||||||
|       let(:user) { Fabricate(:user) } |       let(:user) { Fabricate(:user) } | ||||||
|       let(:account) { Fabricate(:account, user: user) } |  | ||||||
| 
 | 
 | ||||||
|       before do |       before do | ||||||
|         sign_in(user) |         sign_in(user) | ||||||
|  | @ -76,7 +75,7 @@ describe AuthorizeInteractionsController do | ||||||
| 
 | 
 | ||||||
|     describe 'when signed in' do |     describe 'when signed in' do | ||||||
|       let!(:user) { Fabricate(:user) } |       let!(:user) { Fabricate(:user) } | ||||||
|       let!(:account) { user.account } |       let(:account) { user.account } | ||||||
| 
 | 
 | ||||||
|       before do |       before do | ||||||
|         sign_in(user) |         sign_in(user) | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ describe ApplicationController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   context 'when account is suspended' do |   context 'when account is suspended' do | ||||||
|     it 'returns http gone' do |     it 'returns http gone' do | ||||||
|       account = Fabricate(:account, suspended: true, user: Fabricate(:user)) |       account = Fabricate(:account, suspended: true) | ||||||
|       get 'success', params: { account_username: account.username } |       get 'success', params: { account_username: account.username } | ||||||
|       expect(response).to have_http_status(410) |       expect(response).to have_http_status(410) | ||||||
|     end |     end | ||||||
|  | @ -33,19 +33,19 @@ describe ApplicationController, type: :controller do | ||||||
| 
 | 
 | ||||||
|   context 'when account is not suspended' do |   context 'when account is not suspended' do | ||||||
|     it 'assigns @account' do |     it 'assigns @account' do | ||||||
|       account = Fabricate(:account, user: Fabricate(:user)) |       account = Fabricate(:account) | ||||||
|       get 'success', params: { account_username: account.username } |       get 'success', params: { account_username: account.username } | ||||||
|       expect(assigns(:account)).to eq account |       expect(assigns(:account)).to eq account | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     it 'sets link headers' do |     it 'sets link headers' do | ||||||
|       account = Fabricate(:account, username: 'username', user: Fabricate(:user)) |       account = Fabricate(:account, username: 'username') | ||||||
|       get 'success', params: { account_username: 'username' } |       get 'success', params: { account_username: 'username' } | ||||||
|       expect(response.headers['Link'].to_s).to eq '<http://test.host/.well-known/webfinger?resource=acct%3Ausername%40cb6e6126.ngrok.io>; rel="lrdd"; type="application/jrd+json", <https://cb6e6126.ngrok.io/users/username>; rel="alternate"; type="application/activity+json"' |       expect(response.headers['Link'].to_s).to eq '<http://test.host/.well-known/webfinger?resource=acct%3Ausername%40cb6e6126.ngrok.io>; rel="lrdd"; type="application/jrd+json", <https://cb6e6126.ngrok.io/users/username>; rel="alternate"; type="application/activity+json"' | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     it 'returns http success' do |     it 'returns http success' do | ||||||
|       account = Fabricate(:account, user: Fabricate(:user)) |       account = Fabricate(:account) | ||||||
|       get 'success', params: { account_username: account.username } |       get 'success', params: { account_username: account.username } | ||||||
|       expect(response).to have_http_status(200) |       expect(response).to have_http_status(200) | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  | @ -12,14 +12,14 @@ RSpec.describe AccountableConcern do | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   let(:user)   { Fabricate(:user, account: Fabricate(:account)) } |   let(:user)   { Fabricate(:account) } | ||||||
|   let(:target) { Fabricate(:user, account: Fabricate(:account)) } |   let(:target) { Fabricate(:account) } | ||||||
|   let(:hoge)   { Hoge.new(user.account) } |   let(:hoge)   { Hoge.new(user) } | ||||||
| 
 | 
 | ||||||
|   describe '#log_action' do |   describe '#log_action' do | ||||||
|     it 'creates Admin::ActionLog' do |     it 'creates Admin::ActionLog' do | ||||||
|       expect do |       expect do | ||||||
|         hoge.log_action(:create, target.account) |         hoge.log_action(:create, target) | ||||||
|       end.to change { Admin::ActionLog.count }.by(1) |       end.to change { Admin::ActionLog.count }.by(1) | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| describe FollowerAccountsController do | describe FollowerAccountsController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:alice) { Fabricate(:user).account } |   let(:alice) { Fabricate(:account) } | ||||||
|   let(:follower0) { Fabricate(:account) } |   let(:follower0) { Fabricate(:account) } | ||||||
|   let(:follower1) { Fabricate(:account) } |   let(:follower1) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| describe FollowingAccountsController do | describe FollowingAccountsController do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|   let(:alice) { Fabricate(:user).account } |   let(:alice) { Fabricate(:account) } | ||||||
|   let(:followee0) { Fabricate(:account) } |   let(:followee0) { Fabricate(:account) } | ||||||
|   let(:followee1) { Fabricate(:account) } |   let(:followee1) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ describe Settings::DeletesController do | ||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|       context 'when suspended' do |       context 'when suspended' do | ||||||
|         let(:user) { Fabricate(:user, account_attributes: { username: 'alice', suspended_at: Time.now.utc }) } |         let(:user) { Fabricate(:user, account_attributes: { suspended_at: Time.now.utc }) } | ||||||
| 
 | 
 | ||||||
|         it 'returns http forbidden' do |         it 'returns http forbidden' do | ||||||
|           get :show |           get :show | ||||||
|  | @ -64,7 +64,7 @@ describe Settings::DeletesController do | ||||||
|         end |         end | ||||||
| 
 | 
 | ||||||
|         context 'when suspended' do |         context 'when suspended' do | ||||||
|           let(:user) { Fabricate(:user, account_attributes: { username: 'alice', suspended_at: Time.now.utc }) } |           let(:user) { Fabricate(:user, account_attributes: { suspended_at: Time.now.utc }) } | ||||||
| 
 | 
 | ||||||
|           it 'returns http forbidden' do |           it 'returns http forbidden' do | ||||||
|             expect(response).to have_http_status(403) |             expect(response).to have_http_status(403) | ||||||
|  |  | ||||||
|  | @ -19,8 +19,7 @@ describe Settings::MigrationsController do | ||||||
|     context 'when user is sign in' do |     context 'when user is sign in' do | ||||||
|       subject { get :show } |       subject { get :show } | ||||||
| 
 | 
 | ||||||
|       let(:user) { Fabricate(:user, account: account) } |       let(:user) { Fabricate(:account, moved_to_account: moved_to_account).user } | ||||||
|       let(:account) { Fabricate(:account, moved_to_account: moved_to_account) } |  | ||||||
| 
 | 
 | ||||||
|       before { sign_in user, scope: :user } |       before { sign_in user, scope: :user } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,9 +3,11 @@ require 'rails_helper' | ||||||
| RSpec.describe Settings::ProfilesController, type: :controller do | RSpec.describe Settings::ProfilesController, type: :controller do | ||||||
|   render_views |   render_views | ||||||
| 
 | 
 | ||||||
|  |   let!(:user) { Fabricate(:user) } | ||||||
|  |   let(:account) { user.account } | ||||||
|  | 
 | ||||||
|   before do |   before do | ||||||
|     @user = Fabricate(:user) |     sign_in user, scope: :user | ||||||
|     sign_in @user, scope: :user |  | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe "GET #show" do |   describe "GET #show" do | ||||||
|  | @ -16,10 +18,12 @@ RSpec.describe Settings::ProfilesController, type: :controller do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe 'PUT #update' do |   describe 'PUT #update' do | ||||||
|  |     before do | ||||||
|  |       user.account.update(display_name: 'Old name') | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|     it 'updates the user profile' do |     it 'updates the user profile' do | ||||||
|       allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) |       allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) | ||||||
|       account = Fabricate(:account, user: @user, display_name: 'Old name') |  | ||||||
| 
 |  | ||||||
|       put :update, params: { account: { display_name: 'New name' } } |       put :update, params: { account: { display_name: 'New name' } } | ||||||
|       expect(account.reload.display_name).to eq 'New name' |       expect(account.reload.display_name).to eq 'New name' | ||||||
|       expect(response).to redirect_to(settings_profile_path) |       expect(response).to redirect_to(settings_profile_path) | ||||||
|  | @ -30,7 +34,6 @@ RSpec.describe Settings::ProfilesController, type: :controller do | ||||||
|   describe 'PUT #update with new profile image' do |   describe 'PUT #update with new profile image' do | ||||||
|     it 'updates profile image' do |     it 'updates profile image' do | ||||||
|       allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) |       allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) | ||||||
|       account = Fabricate(:account, user: @user, display_name: 'AvatarTest') |  | ||||||
|       expect(account.avatar.instance.avatar_file_name).to be_nil |       expect(account.avatar.instance.avatar_file_name).to be_nil | ||||||
| 
 | 
 | ||||||
|       put :update, params: { account: { avatar: fixture_file_upload('avatar.gif', 'image/gif') } } |       put :update, params: { account: { avatar: fixture_file_upload('avatar.gif', 'image/gif') } } | ||||||
|  | @ -43,7 +46,6 @@ RSpec.describe Settings::ProfilesController, type: :controller do | ||||||
|   describe 'PUT #update with oversized image' do |   describe 'PUT #update with oversized image' do | ||||||
|     it 'gives the user an error message' do |     it 'gives the user an error message' do | ||||||
|       allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) |       allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) | ||||||
|       account = Fabricate(:account, user: @user, display_name: 'AvatarTest') |  | ||||||
|       put :update, params: { account: { avatar: fixture_file_upload('4096x4097.png', 'image/png') } } |       put :update, params: { account: { avatar: fixture_file_upload('4096x4097.png', 'image/png') } } | ||||||
|       expect(response.body).to include('images are not supported') |       expect(response.body).to include('images are not supported') | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  | @ -10,4 +10,5 @@ Fabricator(:account) do | ||||||
|   private_key         { private_key } |   private_key         { private_key } | ||||||
|   suspended_at        { |attrs| attrs[:suspended] ? Time.now.utc : nil } |   suspended_at        { |attrs| attrs[:suspended] ? Time.now.utc : nil } | ||||||
|   silenced_at         { |attrs| attrs[:silenced] ? Time.now.utc : nil } |   silenced_at         { |attrs| attrs[:silenced] ? Time.now.utc : nil } | ||||||
|  |   user                { |attrs| attrs[:domain].nil? ? Fabricate.build(:user, account: nil) : nil } | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| Fabricator(:user) do | Fabricator(:user) do | ||||||
|   account |   account      { Fabricate.build(:account, user: nil) } | ||||||
|   email        { sequence(:email) { |i| "#{i}#{Faker::Internet.email}" } } |   email        { sequence(:email) { |i| "#{i}#{Faker::Internet.email}" } } | ||||||
|   password     "123456789" |   password     "123456789" | ||||||
|   confirmed_at { Time.zone.now } |   confirmed_at { Time.zone.now } | ||||||
|  |  | ||||||
|  | @ -4,11 +4,15 @@ require 'rails_helper' | ||||||
| 
 | 
 | ||||||
| RSpec.describe AdminMailer, type: :mailer do | RSpec.describe AdminMailer, type: :mailer do | ||||||
|   describe '.new_report' do |   describe '.new_report' do | ||||||
|     let(:sender)    { Fabricate(:account, username: 'John', user: Fabricate(:user)) } |     let(:sender)    { Fabricate(:account, username: 'John') } | ||||||
|     let(:recipient) { Fabricate(:account, username: 'Mike', user: Fabricate(:user, locale: :en)) } |     let(:recipient) { Fabricate(:account, username: 'Mike') } | ||||||
|     let(:report)    { Fabricate(:report, account: sender, target_account: recipient) } |     let(:report)    { Fabricate(:report, account: sender, target_account: recipient) } | ||||||
|     let(:mail)      { described_class.new_report(recipient, report) } |     let(:mail)      { described_class.new_report(recipient, report) } | ||||||
| 
 | 
 | ||||||
|  |     before do | ||||||
|  |       recipient.user.update(locale: :en) | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|     it 'renders the headers' do |     it 'renders the headers' do | ||||||
|       expect(mail.subject).to eq("New report for cb6e6126.ngrok.io (##{report.id})") |       expect(mail.subject).to eq("New report for cb6e6126.ngrok.io (##{report.id})") | ||||||
|       expect(mail.to).to eq [recipient.user_email] |       expect(mail.to).to eq [recipient.user_email] | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| require "rails_helper" | require "rails_helper" | ||||||
| 
 | 
 | ||||||
| RSpec.describe NotificationMailer, type: :mailer do | RSpec.describe NotificationMailer, type: :mailer do | ||||||
|   let(:receiver)       { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } |   let(:receiver)       { Fabricate(:user) } | ||||||
|   let(:sender)         { Fabricate(:account, username: 'bob') } |   let(:sender)         { Fabricate(:account, username: 'bob') } | ||||||
|   let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status') } |   let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status') } | ||||||
|   let(:own_status)     { Fabricate(:status, account: receiver.account, text: 'The body of the own status') } |   let(:own_status)     { Fabricate(:status, account: receiver.account, text: 'The body of the own status') } | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ RSpec.describe Account, type: :model do | ||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|       context 'when the account is of a local user' do |       context 'when the account is of a local user' do | ||||||
|         let!(:subject) { Fabricate(:account, user: Fabricate(:user, email: 'foo+bar@domain.org')) } |         let!(:subject) { Fabricate(:user, email: 'foo+bar@domain.org').account } | ||||||
| 
 | 
 | ||||||
|         it 'creates a canonical domain block' do |         it 'creates a canonical domain block' do | ||||||
|           subject.suspend! |           subject.suspend! | ||||||
|  |  | ||||||
|  | @ -5,8 +5,8 @@ RSpec.describe Admin::AccountAction, type: :model do | ||||||
| 
 | 
 | ||||||
|   describe '#save!' do |   describe '#save!' do | ||||||
|     subject              { account_action.save! } |     subject              { account_action.save! } | ||||||
|     let(:account)        { Fabricate(:account, user: Fabricate(:user, admin: true)) } |     let(:account)        { Fabricate(:user, admin: true).account } | ||||||
|     let(:target_account) { Fabricate(:account, user: Fabricate(:user)) } |     let(:target_account) { Fabricate(:account) } | ||||||
|     let(:type)           { 'disable' } |     let(:type)           { 'disable' } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|  |  | ||||||
|  | @ -31,7 +31,6 @@ RSpec.describe PublicFeed, type: :model do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     it 'filters out silenced accounts' do |     it 'filters out silenced accounts' do | ||||||
|       account = Fabricate(:account) |  | ||||||
|       silenced_account = Fabricate(:account, silenced: true) |       silenced_account = Fabricate(:account, silenced: true) | ||||||
|       status = Fabricate(:status, account: account) |       status = Fabricate(:status, account: account) | ||||||
|       silenced_status = Fabricate(:status, account: silenced_account) |       silenced_status = Fabricate(:status, account: silenced_account) | ||||||
|  | @ -176,8 +175,7 @@ RSpec.describe PublicFeed, type: :model do | ||||||
| 
 | 
 | ||||||
|       context 'with language preferences' do |       context 'with language preferences' do | ||||||
|         it 'excludes statuses in languages not allowed by the account user' do |         it 'excludes statuses in languages not allowed by the account user' do | ||||||
|           user = Fabricate(:user, chosen_languages: [:en, :es]) |           @account.user.update(chosen_languages: [:en, :es]) | ||||||
|           @account.update(user: user) |  | ||||||
|           en_status = Fabricate(:status, language: 'en') |           en_status = Fabricate(:status, language: 'en') | ||||||
|           es_status = Fabricate(:status, language: 'es') |           es_status = Fabricate(:status, language: 'es') | ||||||
|           fr_status = Fabricate(:status, language: 'fr') |           fr_status = Fabricate(:status, language: 'fr') | ||||||
|  | @ -188,8 +186,7 @@ RSpec.describe PublicFeed, type: :model do | ||||||
|         end |         end | ||||||
| 
 | 
 | ||||||
|         it 'includes all languages when user does not have a setting' do |         it 'includes all languages when user does not have a setting' do | ||||||
|           user = Fabricate(:user, chosen_languages: nil) |           @account.user.update(chosen_languages: nil) | ||||||
|           @account.update(user: user) |  | ||||||
| 
 | 
 | ||||||
|           en_status = Fabricate(:status, language: 'en') |           en_status = Fabricate(:status, language: 'en') | ||||||
|           es_status = Fabricate(:status, language: 'es') |           es_status = Fabricate(:status, language: 'es') | ||||||
|  | @ -199,7 +196,8 @@ RSpec.describe PublicFeed, type: :model do | ||||||
|         end |         end | ||||||
| 
 | 
 | ||||||
|         it 'includes all languages when account does not have a user' do |         it 'includes all languages when account does not have a user' do | ||||||
|           expect(@account.user).to be_nil |           @account.update(user: nil) | ||||||
|  | 
 | ||||||
|           en_status = Fabricate(:status, language: 'en') |           en_status = Fabricate(:status, language: 'en') | ||||||
|           es_status = Fabricate(:status, language: 'es') |           es_status = Fabricate(:status, language: 'es') | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -194,12 +194,12 @@ RSpec.describe User, type: :model do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     it "returns 'private' if user has not configured default privacy setting and account is locked" do |     it "returns 'private' if user has not configured default privacy setting and account is locked" do | ||||||
|       user = Fabricate(:user, account: Fabricate(:account, locked: true)) |       user = Fabricate(:account, locked: true).user | ||||||
|       expect(user.setting_default_privacy).to eq 'private' |       expect(user.setting_default_privacy).to eq 'private' | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     it "returns 'public' if user has not configured default privacy setting and account is not locked" do |     it "returns 'public' if user has not configured default privacy setting and account is not locked" do | ||||||
|       user = Fabricate(:user, account: Fabricate(:account, locked: false)) |       user = Fabricate(:account, locked: false).user | ||||||
|       expect(user.setting_default_privacy).to eq 'public' |       expect(user.setting_default_privacy).to eq 'public' | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  | @ -248,7 +248,7 @@ RSpec.describe User, type: :model do | ||||||
| 
 | 
 | ||||||
|   it_behaves_like 'Settings-extended' do |   it_behaves_like 'Settings-extended' do | ||||||
|     def create! |     def create! | ||||||
|       User.create!(account: Fabricate(:account), email: 'foo@mastodon.space', password: 'abcd1234', agreement: true) |       User.create!(account: Fabricate(:account, user: nil), email: 'foo@mastodon.space', password: 'abcd1234', agreement: true) | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     def fabricate |     def fabricate | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ require 'pundit/rspec' | ||||||
| RSpec.describe AccountModerationNotePolicy do | RSpec.describe AccountModerationNotePolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :create? do |   permissions :create? do | ||||||
|     context 'staff' do |     context 'staff' do | ||||||
|  | @ -42,7 +42,7 @@ RSpec.describe AccountModerationNotePolicy do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     context 'neither admin nor owner' do |     context 'neither admin nor owner' do | ||||||
|       let(:kevin) { Fabricate(:user).account } |       let(:kevin) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|       it 'denies to destroy' do |       it 'denies to destroy' do | ||||||
|         expect(subject).to_not permit(kevin, account_moderation_note) |         expect(subject).to_not permit(kevin, account_moderation_note) | ||||||
|  |  | ||||||
|  | @ -6,8 +6,8 @@ require 'pundit/rspec' | ||||||
| RSpec.describe AccountPolicy do | RSpec.describe AccountPolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
|   let(:alice)   { Fabricate(:user).account } |   let(:alice)   { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :index? do |   permissions :index? do | ||||||
|     context 'staff' do |     context 'staff' do | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ require 'pundit/rspec' | ||||||
| 
 | 
 | ||||||
| RSpec.describe BackupPolicy do | RSpec.describe BackupPolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :create? do |   permissions :create? do | ||||||
|     context 'not user_signed_in?' do |     context 'not user_signed_in?' do | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ require 'pundit/rspec' | ||||||
| RSpec.describe CustomEmojiPolicy do | RSpec.describe CustomEmojiPolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :index?, :enable?, :disable? do |   permissions :index?, :enable?, :disable? do | ||||||
|     context 'staff' do |     context 'staff' do | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ require 'pundit/rspec' | ||||||
| RSpec.describe DomainBlockPolicy do | RSpec.describe DomainBlockPolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :index?, :show?, :create?, :destroy? do |   permissions :index?, :show?, :create?, :destroy? do | ||||||
|     context 'admin' do |     context 'admin' do | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ require 'pundit/rspec' | ||||||
| RSpec.describe EmailDomainBlockPolicy do | RSpec.describe EmailDomainBlockPolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :index?, :create?, :destroy? do |   permissions :index?, :create?, :destroy? do | ||||||
|     context 'admin' do |     context 'admin' do | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ require 'pundit/rspec' | ||||||
| RSpec.describe InstancePolicy do | RSpec.describe InstancePolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :index?, :show?, :destroy? do |   permissions :index?, :show?, :destroy? do | ||||||
|     context 'admin' do |     context 'admin' do | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ require 'pundit/rspec' | ||||||
| RSpec.describe InvitePolicy do | RSpec.describe InvitePolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :index? do |   permissions :index? do | ||||||
|     context 'staff?' do |     context 'staff?' do | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ require 'pundit/rspec' | ||||||
| RSpec.describe RelayPolicy do | RSpec.describe RelayPolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :update? do |   permissions :update? do | ||||||
|     context 'admin?' do |     context 'admin?' do | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ require 'pundit/rspec' | ||||||
| RSpec.describe ReportNotePolicy do | RSpec.describe ReportNotePolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :create? do |   permissions :create? do | ||||||
|     context 'staff?' do |     context 'staff?' do | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ require 'pundit/rspec' | ||||||
| RSpec.describe ReportPolicy do | RSpec.describe ReportPolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :update?, :index?, :show? do |   permissions :update?, :index?, :show? do | ||||||
|     context 'staff?' do |     context 'staff?' do | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ require 'pundit/rspec' | ||||||
| RSpec.describe SettingsPolicy do | RSpec.describe SettingsPolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :update?, :show? do |   permissions :update?, :show? do | ||||||
|     context 'admin?' do |     context 'admin?' do | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ require 'pundit/rspec' | ||||||
| RSpec.describe TagPolicy do | RSpec.describe TagPolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :index?, :show?, :update? do |   permissions :index?, :show?, :update? do | ||||||
|     context 'staff?' do |     context 'staff?' do | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ require 'pundit/rspec' | ||||||
| RSpec.describe UserPolicy do | RSpec.describe UserPolicy do | ||||||
|   let(:subject) { described_class } |   let(:subject) { described_class } | ||||||
|   let(:admin)   { Fabricate(:user, admin: true).account } |   let(:admin)   { Fabricate(:user, admin: true).account } | ||||||
|   let(:john)    { Fabricate(:user).account } |   let(:john)    { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   permissions :reset_password?, :change_email? do |   permissions :reset_password?, :change_email? do | ||||||
|     context 'staff?' do |     context 'staff?' do | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ RSpec.describe AuthorizeFollowService, type: :service do | ||||||
|   subject { AuthorizeFollowService.new } |   subject { AuthorizeFollowService.new } | ||||||
| 
 | 
 | ||||||
|   describe 'local' do |   describe 'local' do | ||||||
|     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:bob) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       FollowRequest.create(account: bob, target_account: sender) |       FollowRequest.create(account: bob, target_account: sender) | ||||||
|  | @ -23,7 +23,7 @@ RSpec.describe AuthorizeFollowService, type: :service do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe 'remote ActivityPub' do |   describe 'remote ActivityPub' do | ||||||
|     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox')).account } |     let(:bob) { Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       FollowRequest.create(account: bob, target_account: sender) |       FollowRequest.create(account: bob, target_account: sender) | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ RSpec.describe BatchedRemoveStatusService, type: :service do | ||||||
| 
 | 
 | ||||||
|   let!(:alice)  { Fabricate(:account) } |   let!(:alice)  { Fabricate(:account) } | ||||||
|   let!(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com') } |   let!(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com') } | ||||||
|   let!(:jeff)   { Fabricate(:user).account } |   let!(:jeff)   { Fabricate(:account) } | ||||||
|   let!(:hank)   { Fabricate(:account, username: 'hank', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } |   let!(:hank)   { Fabricate(:account, username: 'hank', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } | ||||||
| 
 | 
 | ||||||
|   let(:status1) { PostStatusService.new.call(alice, text: 'Hello @bob@example.com') } |   let(:status1) { PostStatusService.new.call(alice, text: 'Hello @bob@example.com') } | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ RSpec.describe BlockService, type: :service do | ||||||
|   subject { BlockService.new } |   subject { BlockService.new } | ||||||
| 
 | 
 | ||||||
|   describe 'local' do |   describe 'local' do | ||||||
|     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:bob) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       subject.call(sender, bob) |       subject.call(sender, bob) | ||||||
|  | @ -18,7 +18,7 @@ RSpec.describe BlockService, type: :service do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe 'remote ActivityPub' do |   describe 'remote ActivityPub' do | ||||||
|     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account } |     let(:bob) { Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       stub_request(:post, 'http://example.com/inbox').to_return(status: 200) |       stub_request(:post, 'http://example.com/inbox').to_return(status: 200) | ||||||
|  |  | ||||||
|  | @ -3,9 +3,9 @@ require 'rails_helper' | ||||||
| RSpec.describe FanOutOnWriteService, type: :service do | RSpec.describe FanOutOnWriteService, type: :service do | ||||||
|   let(:last_active_at) { Time.now.utc } |   let(:last_active_at) { Time.now.utc } | ||||||
| 
 | 
 | ||||||
|   let!(:alice) { Fabricate(:user, current_sign_in_at: last_active_at, account: Fabricate(:account, username: 'alice')).account } |   let!(:alice) { Fabricate(:user, current_sign_in_at: last_active_at).account } | ||||||
|   let!(:bob)   { Fabricate(:user, current_sign_in_at: last_active_at, account: Fabricate(:account, username: 'bob')).account } |   let!(:bob)   { Fabricate(:user, current_sign_in_at: last_active_at, account_attributes: { username: 'bob' }).account } | ||||||
|   let!(:tom)   { Fabricate(:user, current_sign_in_at: last_active_at, account: Fabricate(:account, username: 'tom')).account } |   let!(:tom)   { Fabricate(:user, current_sign_in_at: last_active_at).account } | ||||||
| 
 | 
 | ||||||
|   subject { described_class.new } |   subject { described_class.new } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ RSpec.describe FavouriteService, type: :service do | ||||||
|   subject { FavouriteService.new } |   subject { FavouriteService.new } | ||||||
| 
 | 
 | ||||||
|   describe 'local' do |   describe 'local' do | ||||||
|     let(:bob)    { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:bob)    { Fabricate(:account) } | ||||||
|     let(:status) { Fabricate(:status, account: bob) } |     let(:status) { Fabricate(:status, account: bob) } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|  | @ -19,7 +19,7 @@ RSpec.describe FavouriteService, type: :service do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe 'remote ActivityPub' do |   describe 'remote ActivityPub' do | ||||||
|     let(:bob)    { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, protocol: :activitypub, username: 'bob', domain: 'example.com', inbox_url: 'http://example.com/inbox')).account } |     let(:bob)    { Fabricate(:account, protocol: :activitypub, username: 'bob', domain: 'example.com', inbox_url: 'http://example.com/inbox') } | ||||||
|     let(:status) { Fabricate(:status, account: bob) } |     let(:status) { Fabricate(:status, account: bob) } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ RSpec.describe FollowService, type: :service do | ||||||
| 
 | 
 | ||||||
|   context 'local account' do |   context 'local account' do | ||||||
|     describe 'locked account' do |     describe 'locked account' do | ||||||
|       let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, locked: true, username: 'bob')).account } |       let(:bob) { Fabricate(:account, locked: true, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|       before do |       before do | ||||||
|         subject.call(sender, bob) |         subject.call(sender, bob) | ||||||
|  | @ -19,7 +19,7 @@ RSpec.describe FollowService, type: :service do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     describe 'locked account, no reblogs' do |     describe 'locked account, no reblogs' do | ||||||
|       let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, locked: true, username: 'bob')).account } |       let(:bob) { Fabricate(:account, locked: true, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|       before do |       before do | ||||||
|         subject.call(sender, bob, reblogs: false) |         subject.call(sender, bob, reblogs: false) | ||||||
|  | @ -31,7 +31,7 @@ RSpec.describe FollowService, type: :service do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     describe 'unlocked account, from silenced account' do |     describe 'unlocked account, from silenced account' do | ||||||
|       let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |       let(:bob) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|       before do |       before do | ||||||
|         sender.touch(:silenced_at) |         sender.touch(:silenced_at) | ||||||
|  | @ -44,7 +44,7 @@ RSpec.describe FollowService, type: :service do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     describe 'unlocked account, from a muted account' do |     describe 'unlocked account, from a muted account' do | ||||||
|       let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |       let(:bob) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|       before do |       before do | ||||||
|         bob.mute!(sender) |         bob.mute!(sender) | ||||||
|  | @ -58,7 +58,7 @@ RSpec.describe FollowService, type: :service do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     describe 'unlocked account' do |     describe 'unlocked account' do | ||||||
|       let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |       let(:bob) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|       before do |       before do | ||||||
|         subject.call(sender, bob) |         subject.call(sender, bob) | ||||||
|  | @ -71,7 +71,7 @@ RSpec.describe FollowService, type: :service do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     describe 'unlocked account, no reblogs' do |     describe 'unlocked account, no reblogs' do | ||||||
|       let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |       let(:bob) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|       before do |       before do | ||||||
|         subject.call(sender, bob, reblogs: false) |         subject.call(sender, bob, reblogs: false) | ||||||
|  | @ -84,7 +84,7 @@ RSpec.describe FollowService, type: :service do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     describe 'already followed account' do |     describe 'already followed account' do | ||||||
|       let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |       let(:bob) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|       before do |       before do | ||||||
|         sender.follow!(bob) |         sender.follow!(bob) | ||||||
|  | @ -97,7 +97,7 @@ RSpec.describe FollowService, type: :service do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     describe 'already followed account, turning reblogs off' do |     describe 'already followed account, turning reblogs off' do | ||||||
|       let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |       let(:bob) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|       before do |       before do | ||||||
|         sender.follow!(bob, reblogs: true) |         sender.follow!(bob, reblogs: true) | ||||||
|  | @ -110,7 +110,7 @@ RSpec.describe FollowService, type: :service do | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     describe 'already followed account, turning reblogs on' do |     describe 'already followed account, turning reblogs on' do | ||||||
|       let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |       let(:bob) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|       before do |       before do | ||||||
|         sender.follow!(bob, reblogs: false) |         sender.follow!(bob, reblogs: false) | ||||||
|  | @ -124,7 +124,7 @@ RSpec.describe FollowService, type: :service do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   context 'remote ActivityPub account' do |   context 'remote ActivityPub account' do | ||||||
|     let(:bob) { Fabricate(:user, account: Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox')).account } |     let(:bob) { Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       stub_request(:post, "http://example.com/inbox").to_return(:status => 200, :body => "", :headers => {}) |       stub_request(:post, "http://example.com/inbox").to_return(:status => 200, :body => "", :headers => {}) | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ RSpec.describe RejectFollowService, type: :service do | ||||||
|   subject { RejectFollowService.new } |   subject { RejectFollowService.new } | ||||||
| 
 | 
 | ||||||
|   describe 'local' do |   describe 'local' do | ||||||
|     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:bob) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       FollowRequest.create(account: bob, target_account: sender) |       FollowRequest.create(account: bob, target_account: sender) | ||||||
|  | @ -23,7 +23,7 @@ RSpec.describe RejectFollowService, type: :service do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe 'remote ActivityPub' do |   describe 'remote ActivityPub' do | ||||||
|     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox')).account } |     let(:bob) { Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       FollowRequest.create(account: bob, target_account: sender) |       FollowRequest.create(account: bob, target_account: sender) | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe RemoveStatusService, type: :service do | RSpec.describe RemoveStatusService, type: :service do | ||||||
|   subject { RemoveStatusService.new } |   subject { RemoveStatusService.new } | ||||||
| 
 | 
 | ||||||
|   let!(:alice)  { Fabricate(:account, user: Fabricate(:user)) } |   let!(:alice)  { Fabricate(:account) } | ||||||
|   let!(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com') } |   let!(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com') } | ||||||
|   let!(:jeff)   { Fabricate(:account) } |   let!(:jeff)   { Fabricate(:account) } | ||||||
|   let!(:hank)   { Fabricate(:account, username: 'hank', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } |   let!(:hank)   { Fabricate(:account, username: 'hank', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ require 'rails_helper' | ||||||
| RSpec.describe ReportService, type: :service do | RSpec.describe ReportService, type: :service do | ||||||
|   subject { described_class.new } |   subject { described_class.new } | ||||||
| 
 | 
 | ||||||
|   let(:source_account) { Fabricate(:user).account } |   let(:source_account) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|   context 'for a remote account' do |   context 'for 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') } | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ RSpec.describe UnblockService, type: :service do | ||||||
|   subject { UnblockService.new } |   subject { UnblockService.new } | ||||||
| 
 | 
 | ||||||
|   describe 'local' do |   describe 'local' do | ||||||
|     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:bob) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       sender.block!(bob) |       sender.block!(bob) | ||||||
|  | @ -19,7 +19,7 @@ RSpec.describe UnblockService, type: :service do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe 'remote ActivityPub' do |   describe 'remote ActivityPub' do | ||||||
|     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account } |     let(:bob) { Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       sender.block!(bob) |       sender.block!(bob) | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ RSpec.describe UnfollowService, type: :service do | ||||||
|   subject { UnfollowService.new } |   subject { UnfollowService.new } | ||||||
| 
 | 
 | ||||||
|   describe 'local' do |   describe 'local' do | ||||||
|     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:bob) { Fabricate(:account, username: 'bob') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       sender.follow!(bob) |       sender.follow!(bob) | ||||||
|  | @ -19,7 +19,7 @@ RSpec.describe UnfollowService, type: :service do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe 'remote ActivityPub' do |   describe 'remote ActivityPub' do | ||||||
|     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account } |     let(:bob) { Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       sender.follow!(bob) |       sender.follow!(bob) | ||||||
|  | @ -37,7 +37,7 @@ RSpec.describe UnfollowService, type: :service do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe 'remote ActivityPub (reverse)' do |   describe 'remote ActivityPub (reverse)' do | ||||||
|     let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account } |     let(:bob) { Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       bob.follow!(sender) |       bob.follow!(sender) | ||||||
|  |  | ||||||
|  | @ -5,9 +5,9 @@ RSpec.describe UpdateAccountService, type: :service do | ||||||
| 
 | 
 | ||||||
|   describe 'switching form locked to unlocked accounts' do |   describe 'switching form locked to unlocked accounts' do | ||||||
|     let(:account) { Fabricate(:account, locked: true) } |     let(:account) { Fabricate(:account, locked: true) } | ||||||
|     let(:alice)   { Fabricate(:user, email: 'alice@example.com', account: Fabricate(:account, username: 'alice')).account } |     let(:alice)   { Fabricate(:account) } | ||||||
|     let(:bob)     { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |     let(:bob)     { Fabricate(:account) } | ||||||
|     let(:eve)     { Fabricate(:user, email: 'eve@example.com', account: Fabricate(:account, username: 'eve')).account } |     let(:eve)     { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       bob.touch(:silenced_at) |       bob.touch(:silenced_at) | ||||||
|  |  | ||||||
|  | @ -3,9 +3,9 @@ | ||||||
| require 'rails_helper' | require 'rails_helper' | ||||||
| 
 | 
 | ||||||
| describe MoveWorker do | describe MoveWorker do | ||||||
|   let(:local_follower)   { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |   let(:local_follower)   { Fabricate(:account) } | ||||||
|   let(:blocking_account) { Fabricate(:user, email: 'bar@example.com', account: Fabricate(:account, username: 'bar')).account } |   let(:blocking_account) { Fabricate(:account) } | ||||||
|   let(:muting_account)   { Fabricate(:user, email: 'foo@example.com', account: Fabricate(:account, username: 'foo')).account } |   let(:muting_account)   { Fabricate(:account) } | ||||||
|   let(:source_account)   { Fabricate(:account, protocol: :activitypub, domain: 'example.com') } |   let(:source_account)   { Fabricate(:account, protocol: :activitypub, domain: 'example.com') } | ||||||
|   let(:target_account)   { Fabricate(:account, protocol: :activitypub, domain: 'example.com') } |   let(:target_account)   { Fabricate(:account, protocol: :activitypub, domain: 'example.com') } | ||||||
|   let(:local_user)       { Fabricate(:user) } |   let(:local_user)       { Fabricate(:user) } | ||||||
|  | @ -88,7 +88,7 @@ describe MoveWorker do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   context 'target account is local' do |   context 'target account is local' do | ||||||
|     let(:target_account) { Fabricate(:user, email: 'alice@example.com', account: Fabricate(:account, username: 'alice')).account } |     let(:target_account) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|     describe 'perform' do |     describe 'perform' do | ||||||
|       it 'calls UnfollowFollowWorker' do |       it 'calls UnfollowFollowWorker' do | ||||||
|  | @ -102,8 +102,8 @@ describe MoveWorker do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   context 'both target and source accounts are local' do |   context 'both target and source accounts are local' do | ||||||
|     let(:target_account) { Fabricate(:user, email: 'alice@example.com', account: Fabricate(:account, username: 'alice')).account } |     let(:target_account) { Fabricate(:account) } | ||||||
|     let(:source_account) { Fabricate(:user, email: 'alice_@example.com', account: Fabricate(:account, username: 'alice_')).account } |     let(:source_account) { Fabricate(:account) } | ||||||
| 
 | 
 | ||||||
|     describe 'perform' do |     describe 'perform' do | ||||||
|       it 'calls makes local followers follow the target account' do |       it 'calls makes local followers follow the target account' do | ||||||
|  | @ -115,7 +115,7 @@ describe MoveWorker do | ||||||
|       include_examples 'block and mute handling' |       include_examples 'block and mute handling' | ||||||
| 
 | 
 | ||||||
|       it 'does not fail when a local user is already following both accounts' do |       it 'does not fail when a local user is already following both accounts' do | ||||||
|         double_follower = Fabricate(:user, email: 'eve@example.com', account: Fabricate(:account, username: 'eve')).account |         double_follower = Fabricate(:account) | ||||||
|         double_follower.follow!(source_account) |         double_follower.follow!(source_account) | ||||||
|         double_follower.follow!(target_account) |         double_follower.follow!(target_account) | ||||||
|         subject.perform(source_account.id, target_account.id) |         subject.perform(source_account.id, target_account.id) | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| require 'rails_helper' | require 'rails_helper' | ||||||
| 
 | 
 | ||||||
| describe UnfollowFollowWorker do | describe UnfollowFollowWorker do | ||||||
|   let(:local_follower)   { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } |   let(:local_follower)   { Fabricate(:account) } | ||||||
|   let(:source_account)   { Fabricate(:account) } |   let(:source_account)   { Fabricate(:account) } | ||||||
|   let(:target_account)   { Fabricate(:account) } |   let(:target_account)   { Fabricate(:account) } | ||||||
|   let(:show_reblogs)     { true } |   let(:show_reblogs)     { true } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue