@ -2,23 +2,20 @@
require 'rails_helper'
require 'rails_helper'
describe Api :: V1 :: Admin :: EmailDomainBlocksController do
RSpec . describe 'Email Domain Blocks' do
render_views
let ( :role ) { UserRole . find_by ( name : 'Admin' ) }
let ( :role ) { UserRole . find_by ( name : 'Admin' ) }
let ( :user ) { Fabricate ( :user , role : role ) }
let ( :user ) { Fabricate ( :user , role : role ) }
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 ( :account ) }
let ( :account ) { Fabricate ( :account ) }
let ( :scopes ) { 'admin:read:email_domain_blocks admin:write:email_domain_blocks' }
let ( :scopes ) { 'admin:read:email_domain_blocks admin:write:email_domain_blocks' }
let ( :headers ) { { 'Authorization' = > " Bearer #{ token . token } " } }
before do
allow ( controller ) . to receive ( :doorkeeper_token ) { token }
end
shared_examples 'forbidden for wrong scope' do | wrong_scope |
shared_examples 'forbidden for wrong scope' do | wrong_scope |
let ( :scopes ) { wrong_scope }
let ( :scopes ) { wrong_scope }
it 'returns http forbidden' do
it 'returns http forbidden' do
subject
expect ( response ) . to have_http_status ( 403 )
expect ( response ) . to have_http_status ( 403 )
end
end
end
end
@ -27,65 +24,54 @@ describe Api::V1::Admin::EmailDomainBlocksController do
let ( :role ) { UserRole . find_by ( name : wrong_role ) }
let ( :role ) { UserRole . find_by ( name : wrong_role ) }
it 'returns http forbidden' do
it 'returns http forbidden' do
subject
expect ( response ) . to have_http_status ( 403 )
expect ( response ) . to have_http_status ( 403 )
end
end
end
end
describe 'GET #index' do
describe 'GET /api/v1/admin/email_domain_blocks' do
context 'with wrong scope' do
subject do
before do
get '/api/v1/admin/email_domain_blocks' , headers : headers , params : params
get :index
end
it_behaves_like 'forbidden for wrong scope' , 'read:statuses'
end
end
context 'with wrong role' do
let ( :params ) { { } }
before do
get :index
end
it_behaves_like 'forbidden for wrong rol e' , ''
it_behaves_like 'forbidden for wrong scope' , 'read:statuses'
it_behaves_like 'forbidden for wrong role' , 'Moderator '
it_behaves_like 'forbidden for wrong role' , ''
end
it_behaves_like 'forbidd en for wrong role' , 'Mo derator'
it 'returns http success' do
it 'returns http success' do
get :index
subject
expect ( response ) . to have_http_status ( 200 )
expect ( response ) . to have_http_status ( 200 )
end
end
context 'when there is no email domain block' do
context 'when there is no email domain block' do
it 'returns an empty list' do
it 'returns an empty list' do
get :index
subject
json = body_as_json
expect ( json ) . to be_empty
expect ( body_as_json ) . to be_empty
end
end
end
end
context 'when there are email domain blocks' do
context 'when there are email domain blocks' do
let! ( :email_domain_blocks ) { Fabricate . times ( 5 , :email_domain_block ) }
let! ( :email_domain_blocks ) { Fabricate . times ( 5 , :email_domain_block ) }
let ( :blocked_email_domains ) { email_domain_blocks . pluck ( :domain ) }
let ( :blocked_email_domains ) { email_domain_blocks . pluck ( :domain ) }
it 'return the correct blocked email domains' do
it 'return the correct blocked email domains' do
get :index
subject
json = body_as_json
expect ( body_as_json . pluck ( :domain ) ) . to match_array ( blocked_email_domains )
expect ( json . pluck ( :domain ) ) . to match_array ( blocked_email_domains )
end
end
context 'with limit param' do
context 'with limit param' do
let ( :params ) { { limit : 2 } }
let ( :params ) { { limit : 2 } }
it 'returns only the requested number of email domain blocks' do
it 'returns only the requested number of email domain blocks' do
get :index , params : params
subject
json = body_as_json
expect ( json . size ) . to eq ( params [ :limit ] )
expect ( body_as_json . size ) . to eq ( params [ :limit ] )
end
end
end
end
@ -93,12 +79,11 @@ describe Api::V1::Admin::EmailDomainBlocksController do
let ( :params ) { { since_id : email_domain_blocks [ 1 ] . id } }
let ( :params ) { { since_id : email_domain_blocks [ 1 ] . id } }
it 'returns only the email domain blocks after since_id' do
it 'returns only the email domain blocks after since_id' do
get :index , params : params
subject
email_domain_blocks_ids = email_domain_blocks . pluck ( :id ) . map ( & :to_s )
email_domain_blocks_ids = email_domain_blocks . pluck ( :id ) . map ( & :to_s )
json = body_as_json
expect ( json . pluck ( :id ) ) . to match_array ( email_domain_blocks_ids [ 2 .. ] )
expect ( body_as_ json. pluck ( :id ) ) . to match_array ( email_domain_blocks_ids [ 2 .. ] )
end
end
end
end
@ -106,102 +91,78 @@ describe Api::V1::Admin::EmailDomainBlocksController do
let ( :params ) { { max_id : email_domain_blocks [ 3 ] . id } }
let ( :params ) { { max_id : email_domain_blocks [ 3 ] . id } }
it 'returns only the email domain blocks before max_id' do
it 'returns only the email domain blocks before max_id' do
get :index , params : params
subject
email_domain_blocks_ids = email_domain_blocks . pluck ( :id ) . map ( & :to_s )
email_domain_blocks_ids = email_domain_blocks . pluck ( :id ) . map ( & :to_s )
json = body_as_json
expect ( json . pluck ( :id ) ) . to match_array ( email_domain_blocks_ids [ .. 2 ] )
expect ( body_as_ json. pluck ( :id ) ) . to match_array ( email_domain_blocks_ids [ .. 2 ] )
end
end
end
end
end
end
end
end
describe 'GET #show' do
describe 'GET /api/v1/admin/email_domain_blocks/:id' do
let! ( :email_domain_block ) { Fabricate ( :email_domain_block ) }
subject do
let ( :params ) { { id : email_domain_block . id } }
get " /api/v1/admin/email_domain_blocks/ #{ email_domain_block . id } " , headers : headers
context 'with wrong scope' do
before do
get :show , params : params
end
it_behaves_like 'forbidden for wrong scope' , 'read:statuses'
end
end
context 'with wrong role' do
let! ( :email_domain_block ) { Fabricate ( :email_domain_block ) }
before do
get :show , params : params
end
it_behaves_like 'forbidden for wrong rol e' , ''
it_behaves_like 'forbidden for wrong scope' , 'read:statuses'
it_behaves_like 'forbidden for wrong role' , 'Moderator '
it_behaves_like 'forbidden for wrong role' , ''
end
it_behaves_like 'forbidden for wrong role' , 'Moderator'
context 'when email domain block exists' do
context 'when email domain block exists' do
it 'returns http success' do
it 'returns http success' do
get :show , params : params
subject
expect ( response ) . to have_http_status ( 200 )
expect ( response ) . to have_http_status ( 200 )
end
end
it 'returns the correct blocked domain' do
it 'returns the correct blocked domain' do
get :show , params : params
subject
json = body_as_json
expect ( body_as_json [ :domain ] ) . to eq ( email_domain_block . domain )
expect ( json [ :domain ] ) . to eq ( email_domain_block . domain )
end
end
end
end
context 'when email domain block does not exist' do
context 'when email domain block does not exist' do
it 'returns http not found' do
it 'returns http not found' do
get :show , params : { id : 0 }
get '/api/v1/admin/email_domain_blocks/-1' , headers : headers
expect ( response ) . to have_http_status ( 404 )
expect ( response ) . to have_http_status ( 404 )
end
end
end
end
end
end
describe 'POST #create' do
describe 'POST /api/v1/admin/email_domain_blocks' do
let ( :params ) { { domain : 'example.com' } }
subject do
post '/api/v1/admin/email_domain_blocks' , headers : headers , params : params
context 'with wrong scope' do
before do
post :create , params : params
end
it_behaves_like 'forbidden for wrong scope' , 'read:statuses'
end
end
context 'with wrong role' do
let ( :params ) { { domain : 'example.com' } }
before do
post :create , params : params
end
it_behaves_like 'forbidden for wrong rol e' , ''
it_behaves_like 'forbidden for wrong scope' , 'read:statuses'
it_behaves_like 'forbidden for wrong role' , 'Moderator '
it_behaves_like 'forbidden for wrong role' , ''
end
it_behaves_like 'forbidd en for wrong role' , 'Mo derator'
it 'returns http success' do
it 'returns http success' do
post :create , params : params
subject
expect ( response ) . to have_http_status ( 200 )
expect ( response ) . to have_http_status ( 200 )
end
end
it 'returns the correct blocked email domain' do
it 'returns the correct blocked email domain' do
post :create , params : params
subject
json = body_as_json
expect ( json [ :domain ] ) . to eq ( params [ :domain ] )
expect ( body_as_json [ :domain ] ) . to eq ( params [ :domain ] )
end
end
context 'when domain param is not provided' do
context 'when domain param is not provided' do
let ( :params ) { { domain : '' } }
let ( :params ) { { domain : '' } }
it 'returns http unprocessable entity' do
it 'returns http unprocessable entity' do
post :create , params : params
subject
expect ( response ) . to have_http_status ( 422 )
expect ( response ) . to have_http_status ( 422 )
end
end
@ -211,7 +172,7 @@ describe Api::V1::Admin::EmailDomainBlocksController do
let ( :params ) { { domain : 'do\uD800.com' } }
let ( :params ) { { domain : 'do\uD800.com' } }
it 'returns http unprocessable entity' do
it 'returns http unprocessable entity' do
post :create , params : params
subject
expect ( response ) . to have_http_status ( 422 )
expect ( response ) . to have_http_status ( 422 )
end
end
@ -223,59 +184,45 @@ describe Api::V1::Admin::EmailDomainBlocksController do
end
end
it 'returns http unprocessable entity' do
it 'returns http unprocessable entity' do
post :create , params : params
subject
expect ( response ) . to have_http_status ( 422 )
expect ( response ) . to have_http_status ( 422 )
end
end
end
end
end
end
describe 'DELETE #destroy' do
describe 'DELETE /api/v1/admin/email_domain_blocks' do
let! ( :email_domain_block ) { Fabricate ( :email_domain_block ) }
subject do
let ( :params ) { { id : email_domain_block . id } }
delete " /api/v1/admin/email_domain_blocks/ #{ email_domain_block . id } " , headers : headers
context 'with wrong scope' do
before do
delete :destroy , params : params
end
it_behaves_like 'forbidden for wrong scope' , 'read:statuses'
end
end
context 'with wrong role' do
let! ( :email_domain_block ) { Fabricate ( :email_domain_block ) }
before do
delete :destroy , params : params
end
it_behaves_like 'forbidden for wrong rol e' , ''
it_behaves_like 'forbidden for wrong scope' , 'read:statuses'
it_behaves_like 'forbidden for wrong role' , 'Moderator '
it_behaves_like 'forbidden for wrong role' , ''
end
it_behaves_like 'forbidden for wrong role' , 'Moderator'
it 'returns http success' do
it 'returns http success' do
delete :destroy , params : params
subject
expect ( response ) . to have_http_status ( 200 )
expect ( response ) . to have_http_status ( 200 )
end
end
it 'returns an empty body' do
it 'returns an empty body' do
delete :destroy , params : params
subject
json = body_as_json
expect ( body_as_json ) . to be_empty
expect ( json ) . to be_empty
end
end
it 'deletes email domain block' do
it 'deletes email domain block' do
delete :destroy , params : params
subject
email_domain_block = EmailDomainBlock . find_by ( id : params [ :id ] )
expect ( email_domain_block ) . to be_nil
expect ( EmailDomainBlock . find_by ( id : email_domain_block . id ) ) . to be_nil
end
end
context 'when email domain block does not exist' do
context 'when email domain block does not exist' do
it 'returns http not found' do
it 'returns http not found' do
delete :destroy , params : { id : 0 }
delete '/api/v1/admin/email_domain_blocks/-1' , headers : headers
expect ( response ) . to have_http_status ( 404 )
expect ( response ) . to have_http_status ( 404 )
end
end