Skip to content

Instantly share code, notes, and snippets.

@Fcukit
Created July 9, 2018 16:08
Show Gist options
  • Save Fcukit/a466fa49b04c4e482c96bd0217139f75 to your computer and use it in GitHub Desktop.
Save Fcukit/a466fa49b04c4e482c96bd0217139f75 to your computer and use it in GitHub Desktop.
require 'rails_helper'
RSpec.describe AssetsController, type: :controller do
describe 'all AssetsController actions' do
let!(:sbi_department) { create(:sbi_department) }
let!(:sbi_terbank) { create(:terbank, department: sbi_department) }
let!(:sbi_terbank_other) { create(:terbank, department: sbi_department) }
let!(:sbi_borrower) { create(:borrower, terbank: sbi_terbank) }
let!(:sbi_borrower_other) { create(:borrower, terbank: sbi_terbank_other) }
describe 'GET #show' do
let!(:sberbank_asset) { create(:asset_drilling_rig) }
let!(:sbi_asset) { create(:asset_drilling_rig, borrower: sbi_borrower)}
context 'when user is not authorized' do
before do
get(:show, params: { id: sberbank_asset.id })
end
it 'redirect to home page' do
expect(response).to have_http_status(:redirect)
end
end
context 'when user is superadmin' do
before do
superadmin = create(:superadmin)
sign_in superadmin
get(:show, params: { id: sberbank_asset.id })
end
it 'has success status code' do
expect(response).to have_http_status(:success)
end
end
context 'when user is SBI-department admin' do
before do
sbi_admin = create(:user, role: :admin, terbanks: [sbi_terbank.id.to_s], department: sbi_department)
sign_in sbi_admin
end
it 'has success status code' do
get(:show, params: { id: sbi_asset.id })
expect(response).to have_http_status(:success)
end
it 'not allow show asset from other department' do
get(:show, params: { id: sberbank_asset.id })
expect(response).to have_http_status(:redirect)
end
end
context 'when user is SBI-department moderator' do
let!(:sbi_asset) { create(:asset_drilling_rig, borrower: sbi_borrower)}
let!(:sbi_asset_other) { create(:asset_drilling_rig, borrower: sbi_borrower_other)}
before do
sbi_moderator = create(:user, role: :moderator, terbanks: [sbi_terbank.id.to_s], department: sbi_department)
sign_in sbi_moderator
end
it 'allow show asset where terbank is from user.terbanks list' do
get :show, params: { id: sbi_asset.id }
expect(response).to have_http_status(:success)
end
it 'not allow show asset where terbank is not from user.terbanks list' do
get :show, params: { id: sbi_asset_other.id }
expect(response).to have_http_status(:redirect)
end
end
context 'when user is SBI-department db_manager' do
let!(:sbi_asset) { create(:asset_drilling_rig, borrower: sbi_borrower)}
let!(:sbi_asset_other) { create(:asset_drilling_rig, borrower: sbi_borrower_other)}
before do
sbi_db_manager = create(:user, role: :db_manager, terbanks: [sbi_terbank.id.to_s], department: sbi_department)
sign_in sbi_db_manager
end
it 'allow show all assets from user department' do
get :show, params: { id: sbi_asset.id }
expect(response).to have_http_status(:success)
get :show, params: { id: sbi_asset_other.id }
expect(response).to have_http_status(:success)
end
end
end
describe 'GET #index' do
let!(:sberbank_asset) { create(:asset_drilling_rig) }
let!(:sold_sberbank_asset) { create(:asset_drilling_rig, sold: true) }
let!(:edited_sberbank_asset) { create(:asset_drilling_rig, is_version: true) }
let!(:unvisible_sberbank_asset) { create(:asset_drilling_rig, visible: false) }
context 'when user is not authorized' do
before do
get :index
end
it 'has success status code' do
expect(response).to have_http_status(:success)
end
it 'empty list assets' do
expect(assigns(:assets).to_a).to eq([])
end
end
context 'when user is superadmin' do
before do
superadmin = create(:superadmin)
sign_in superadmin
end
context 'when block mode' do
before do
get :index
end
it 'has success status code' do
expect(response).to have_http_status(:success)
end
it 'return assets criteria' do
expect(assigns(:assets)).to be_a(Mongoid::Criteria)
end
it 'not empty list assets' do
expect(assigns(:assets)).not_to eq([])
end
it 'not contain edited assets' do
expect(assigns(:assets).to_a).not_to include(edited_sberbank_asset)
end
it 'not contain unvisible assets' do
expect(assigns(:assets).to_a).not_to include(unvisible_sberbank_asset)
end
end
context 'when list, table or map mode' do
before do
get :index, params: { mode: :list }
end
it 'not contain sold assets' do
expect(assigns(:assets).to_a).not_to include(sold_sberbank_asset)
end
it 'not contain edited assets' do
expect(assigns(:assets).to_a).not_to include(edited_sberbank_asset)
end
it 'not contain unvisible assets' do
expect(assigns(:assets).to_a).not_to include(unvisible_sberbank_asset)
end
end
end
context 'when user is SBI-department admin' do
let!(:sbi_asset) { create(:asset_drilling_rig, borrower: sbi_borrower)}
let!(:sbi_asset_other) { create(:asset_drilling_rig, borrower: sbi_borrower_other)}
before do
sbi_admin = create(:user, role: :admin, terbanks: [sbi_terbank.id.to_s], department: sbi_department)
sign_in sbi_admin
get :index
end
it 'show only SBI-department assets' do
expect(assigns(:assets).to_a.count).to eq(2)
end
end
context 'when user is SBI-department moderator' do
let!(:sbi_asset) { create(:asset_drilling_rig, borrower: sbi_borrower)}
let!(:sbi_asset_other) { create(:asset_drilling_rig, borrower: sbi_borrower_other)}
before do
sbi_moderator = create(:user, role: :moderator, terbanks: [sbi_terbank.id.to_s], department: sbi_department)
sign_in sbi_moderator
get :index
end
it 'show only SBI-department assets of certain terbanks' do
expect(assigns(:assets).to_a.count).to eq(1)
end
end
context 'when user is SBI-department db_manager' do
let!(:sbi_asset) { create(:asset_drilling_rig, borrower: sbi_borrower)}
let!(:sbi_asset_other) { create(:asset_drilling_rig, borrower: sbi_borrower_other)}
before do
sbi_db_manager = create(:user, role: :db_manager, terbanks: [sbi_terbank.id.to_s], department: sbi_department)
sign_in sbi_db_manager
get :index
end
it 'show only SBI-department assets of certain terbanks' do
expect(assigns(:assets).to_a.count).to eq(2)
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment