Spec coverage and refactor for the api/v1/accounts controllers (#3451)
This commit is contained in:
		
				
					committed by
					
						 Eugen Rochko
						Eugen Rochko
					
				
			
			
				
	
			
			
			
						parent
						
							de4681b2be
						
					
				
				
					commit
					5c63523972
				
			| @@ -0,0 +1,55 @@ | ||||
| require 'rails_helper' | ||||
|  | ||||
| describe Api::V1::Accounts::CredentialsController do | ||||
|   render_views | ||||
|  | ||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } | ||||
|   let(:token) { double acceptable?: true, resource_owner_id: user.id } | ||||
|  | ||||
|   before do | ||||
|     allow(controller).to receive(:doorkeeper_token) { token } | ||||
|   end | ||||
|  | ||||
|   describe 'GET #show' do | ||||
|     it 'returns http success' do | ||||
|       get :show | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'PATCH #update' do | ||||
|     describe 'with valid data' do | ||||
|       before do | ||||
|         patch :update, params: { | ||||
|           display_name: "Alice Isn't Dead", | ||||
|           note: "Hi!\n\nToot toot!", | ||||
|           avatar: fixture_file_upload('files/avatar.gif', 'image/gif'), | ||||
|           header: fixture_file_upload('files/attachment.jpg', 'image/jpeg'), | ||||
|         } | ||||
|       end | ||||
|  | ||||
|       it 'returns http success' do | ||||
|         expect(response).to have_http_status(:success) | ||||
|       end | ||||
|  | ||||
|       it 'updates account info' do | ||||
|         user.account.reload | ||||
|  | ||||
|         expect(user.account.display_name).to eq("Alice Isn't Dead") | ||||
|         expect(user.account.note).to eq("Hi!\n\nToot toot!") | ||||
|         expect(user.account.avatar).to exist | ||||
|         expect(user.account.header).to exist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     describe 'with invalid data' do | ||||
|       before do | ||||
|         patch :update, params: { note: 'This is too long. ' * 10 } | ||||
|       end | ||||
|  | ||||
|       it 'returns http unprocessable entity' do | ||||
|         expect(response).to have_http_status(:unprocessable_entity) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
| @@ -0,0 +1,21 @@ | ||||
| require 'rails_helper' | ||||
|  | ||||
| describe Api::V1::Accounts::FollowerAccountsController do | ||||
|   render_views | ||||
|  | ||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } | ||||
|   let(:token) { double acceptable?: true, resource_owner_id: user.id } | ||||
|  | ||||
|   before do | ||||
|     Fabricate(:follow, target_account: user.account) | ||||
|     allow(controller).to receive(:doorkeeper_token) { token } | ||||
|   end | ||||
|  | ||||
|   describe 'GET #index' do | ||||
|     it 'returns http success' do | ||||
|       get :index, params: { account_id: user.account.id, limit: 1 } | ||||
|  | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
| end | ||||
| @@ -0,0 +1,21 @@ | ||||
| require 'rails_helper' | ||||
|  | ||||
| describe Api::V1::Accounts::FollowingAccountsController do | ||||
|   render_views | ||||
|  | ||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } | ||||
|   let(:token) { double acceptable?: true, resource_owner_id: user.id } | ||||
|  | ||||
|   before do | ||||
|     Fabricate(:follow, account: user.account) | ||||
|     allow(controller).to receive(:doorkeeper_token) { token } | ||||
|   end | ||||
|  | ||||
|   describe 'GET #index' do | ||||
|     it 'returns http success' do | ||||
|       get :index, params: { account_id: user.account.id, limit: 1 } | ||||
|  | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
| end | ||||
| @@ -0,0 +1,69 @@ | ||||
| require 'rails_helper' | ||||
|  | ||||
| describe Api::V1::Accounts::RelationshipsController do | ||||
|   render_views | ||||
|  | ||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } | ||||
|   let(:token) { double acceptable?: true, resource_owner_id: user.id } | ||||
|  | ||||
|   before do | ||||
|     allow(controller).to receive(:doorkeeper_token) { token } | ||||
|   end | ||||
|  | ||||
|   describe 'GET #index' do | ||||
|     let(:simon) { Fabricate(:user, email: 'simon@example.com', account: Fabricate(:account, username: 'simon')).account } | ||||
|     let(:lewis) { Fabricate(:user, email: 'lewis@example.com', account: Fabricate(:account, username: 'lewis')).account } | ||||
|  | ||||
|     before do | ||||
|       user.account.follow!(simon) | ||||
|       lewis.follow!(user.account) | ||||
|     end | ||||
|  | ||||
|     context 'provided only one ID' do | ||||
|       before do | ||||
|         get :index, params: { id: simon.id } | ||||
|       end | ||||
|  | ||||
|       it 'returns http success' do | ||||
|         expect(response).to have_http_status(:success) | ||||
|       end | ||||
|  | ||||
|       it 'returns JSON with correct data' do | ||||
|         json = body_as_json | ||||
|  | ||||
|         expect(json).to be_a Enumerable | ||||
|         expect(json.first[:following]).to be true | ||||
|         expect(json.first[:followed_by]).to be false | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     context 'provided multiple IDs' do | ||||
|       before do | ||||
|         get :index, params: { id: [simon.id, lewis.id] } | ||||
|       end | ||||
|  | ||||
|       it 'returns http success' do | ||||
|         expect(response).to have_http_status(:success) | ||||
|       end | ||||
|  | ||||
|       it 'returns JSON with correct data' do | ||||
|         json = body_as_json | ||||
|  | ||||
|         expect(json).to be_a Enumerable | ||||
|         expect(json.first[:id]).to be simon.id | ||||
|         expect(json.first[:following]).to be true | ||||
|         expect(json.first[:followed_by]).to be false | ||||
|         expect(json.first[:muting]).to be false | ||||
|         expect(json.first[:requested]).to be false | ||||
|         expect(json.first[:domain_blocking]).to be false | ||||
|  | ||||
|         expect(json.second[:id]).to be lewis.id | ||||
|         expect(json.second[:following]).to be false | ||||
|         expect(json.second[:followed_by]).to be true | ||||
|         expect(json.second[:muting]).to be false | ||||
|         expect(json.second[:requested]).to be false | ||||
|         expect(json.second[:domain_blocking]).to be false | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										20
									
								
								spec/controllers/api/v1/accounts/search_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								spec/controllers/api/v1/accounts/search_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| require 'rails_helper' | ||||
|  | ||||
| RSpec.describe Api::V1::Accounts::SearchController, type: :controller do | ||||
|   render_views | ||||
|  | ||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } | ||||
|   let(:token) { double acceptable?: true, resource_owner_id: user.id } | ||||
|  | ||||
|   before do | ||||
|     allow(controller).to receive(:doorkeeper_token) { token } | ||||
|   end | ||||
|  | ||||
|   describe 'GET #show' do | ||||
|     it 'returns http success' do | ||||
|       get :show, params: { q: 'query' } | ||||
|  | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										38
									
								
								spec/controllers/api/v1/accounts/statuses_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								spec/controllers/api/v1/accounts/statuses_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| require 'rails_helper' | ||||
|  | ||||
| describe Api::V1::Accounts::StatusesController do | ||||
|   render_views | ||||
|  | ||||
|   let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } | ||||
|   let(:token) { double acceptable?: true, resource_owner_id: user.id } | ||||
|  | ||||
|   before do | ||||
|     allow(controller).to receive(:doorkeeper_token) { token } | ||||
|     Fabricate(:status, account: user.account) | ||||
|   end | ||||
|  | ||||
|   describe 'GET #index' do | ||||
|     it 'returns http success' do | ||||
|       get :index, params: { account_id: user.account.id, limit: 1 } | ||||
|  | ||||
|       expect(response).to have_http_status(:success) | ||||
|       expect(response.headers['Link'].links.size).to eq(2) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'GET #index with only media' do | ||||
|     it 'returns http success' do | ||||
|       get :index, params: { account_id: user.account.id, only_media: true } | ||||
|  | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'GET #index with exclude replies' do | ||||
|     it 'returns http success' do | ||||
|       get :index, params: { account_id: user.account.id, exclude_replies: true } | ||||
|  | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
| end | ||||
| @@ -17,78 +17,6 @@ RSpec.describe Api::V1::AccountsController, type: :controller do | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'GET #search' do | ||||
|     it 'returns http success' do | ||||
|       get :search, params: { q: 'query' } | ||||
|  | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'GET #verify_credentials' do | ||||
|     it 'returns http success' do | ||||
|       get :verify_credentials | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'PATCH #update_credentials' do | ||||
|     describe 'with valid data' do | ||||
|       before do | ||||
|         patch :update_credentials, params: { | ||||
|           display_name: "Alice Isn't Dead", | ||||
|           note: "Hi!\n\nToot toot!", | ||||
|           avatar: fixture_file_upload('files/avatar.gif', 'image/gif'), | ||||
|           header: fixture_file_upload('files/attachment.jpg', 'image/jpeg'), | ||||
|         } | ||||
|       end | ||||
|  | ||||
|       it 'returns http success' do | ||||
|         expect(response).to have_http_status(:success) | ||||
|       end | ||||
|  | ||||
|       it 'updates account info' do | ||||
|         user.account.reload | ||||
|  | ||||
|         expect(user.account.display_name).to eq("Alice Isn't Dead") | ||||
|         expect(user.account.note).to eq("Hi!\n\nToot toot!") | ||||
|         expect(user.account.avatar).to exist | ||||
|         expect(user.account.header).to exist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     describe 'with invalid data' do | ||||
|       before do | ||||
|         patch :update_credentials, params: { note: 'This is too long. ' * 10 } | ||||
|       end | ||||
|  | ||||
|       it 'returns http unprocessable entity' do | ||||
|         expect(response).to have_http_status(:unprocessable_entity) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'GET #statuses' do | ||||
|     it 'returns http success' do | ||||
|       get :statuses, params: { id: user.account.id } | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'GET #followers' do | ||||
|     it 'returns http success' do | ||||
|       get :followers, params: { id: user.account.id } | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'GET #following' do | ||||
|     it 'returns http success' do | ||||
|       get :following, params: { id: user.account.id } | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'POST #follow' do | ||||
|     let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } | ||||
|  | ||||
| @@ -197,61 +125,4 @@ RSpec.describe Api::V1::AccountsController, type: :controller do | ||||
|       expect(user.account.muting?(other_account)).to be false | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'GET #relationships' do | ||||
|     let(:simon) { Fabricate(:user, email: 'simon@example.com', account: Fabricate(:account, username: 'simon')).account } | ||||
|     let(:lewis) { Fabricate(:user, email: 'lewis@example.com', account: Fabricate(:account, username: 'lewis')).account } | ||||
|  | ||||
|     before do | ||||
|       user.account.follow!(simon) | ||||
|       lewis.follow!(user.account) | ||||
|     end | ||||
|  | ||||
|     context 'provided only one ID' do | ||||
|       before do | ||||
|         get :relationships, params: { id: simon.id } | ||||
|       end | ||||
|  | ||||
|       it 'returns http success' do | ||||
|         expect(response).to have_http_status(:success) | ||||
|       end | ||||
|  | ||||
|       it 'returns JSON with correct data' do | ||||
|         json = body_as_json | ||||
|  | ||||
|         expect(json).to be_a Enumerable | ||||
|         expect(json.first[:following]).to be true | ||||
|         expect(json.first[:followed_by]).to be false | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     context 'provided multiple IDs' do | ||||
|       before do | ||||
|         get :relationships, params: { id: [simon.id, lewis.id] } | ||||
|       end | ||||
|  | ||||
|       it 'returns http success' do | ||||
|         expect(response).to have_http_status(:success) | ||||
|       end | ||||
|  | ||||
|       it 'returns JSON with correct data' do | ||||
|         json = body_as_json | ||||
|  | ||||
|         expect(json).to be_a Enumerable | ||||
|         expect(json.first[:id]).to be simon.id | ||||
|         expect(json.first[:following]).to be true | ||||
|         expect(json.first[:followed_by]).to be false | ||||
|         expect(json.first[:muting]).to be false | ||||
|         expect(json.first[:requested]).to be false | ||||
|         expect(json.first[:domain_blocking]).to be false | ||||
|  | ||||
|         expect(json.second[:id]).to be lewis.id | ||||
|         expect(json.second[:following]).to be false | ||||
|         expect(json.second[:followed_by]).to be true | ||||
|         expect(json.second[:muting]).to be false | ||||
|         expect(json.second[:requested]).to be false | ||||
|         expect(json.second[:domain_blocking]).to be false | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -1,6 +1,45 @@ | ||||
| require 'rails_helper' | ||||
|  | ||||
| describe 'API routes' do | ||||
|   describe 'Credentials routes' do | ||||
|     it 'routes to verify credentials' do | ||||
|       expect(get('/api/v1/accounts/verify_credentials')). | ||||
|         to route_to('api/v1/accounts/credentials#show') | ||||
|     end | ||||
|  | ||||
|     it 'routes to update credentials' do | ||||
|       expect(patch('/api/v1/accounts/update_credentials')). | ||||
|         to route_to('api/v1/accounts/credentials#update') | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'Account routes' do | ||||
|     it 'routes to statuses' do | ||||
|       expect(get('/api/v1/accounts/user/statuses')). | ||||
|         to route_to('api/v1/accounts/statuses#index', account_id: 'user') | ||||
|     end | ||||
|  | ||||
|     it 'routes to followers' do | ||||
|       expect(get('/api/v1/accounts/user/followers')). | ||||
|         to route_to('api/v1/accounts/follower_accounts#index', account_id: 'user') | ||||
|     end | ||||
|  | ||||
|     it 'routes to following' do | ||||
|       expect(get('/api/v1/accounts/user/following')). | ||||
|         to route_to('api/v1/accounts/following_accounts#index', account_id: 'user') | ||||
|     end | ||||
|  | ||||
|     it 'routes to search' do | ||||
|       expect(get('/api/v1/accounts/search')). | ||||
|         to route_to('api/v1/accounts/search#show') | ||||
|     end | ||||
|  | ||||
|     it 'routes to relationships' do | ||||
|       expect(get('/api/v1/accounts/relationships')). | ||||
|         to route_to('api/v1/accounts/relationships#index') | ||||
|     end | ||||
|   end | ||||
|    | ||||
|   describe 'Timeline routes' do | ||||
|     it 'routes to home timeline' do | ||||
|       expect(get('/api/v1/timelines/home')). | ||||
|   | ||||
		Reference in New Issue
	
	Block a user