mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-01-31 20:19:05 +08:00
fixes for_admin action/ test visible_by functlion
This commit is contained in:
parent
9d282d1800
commit
c23eacfe13
3 changed files with 82 additions and 8 deletions
|
@ -1,3 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Views
|
||||
module Datatables
|
||||
class DatatablesReport < ApplicationRecord
|
||||
|
@ -14,9 +16,7 @@ module Views
|
|||
permitted_by_team = get_permitted_by_team_tokenized
|
||||
permitted_by_project = get_permitted_by_project_tokenized
|
||||
if user.is_admin_of_team? team
|
||||
allowed_ids = for_admin(
|
||||
user, permitted_by_team, permitted_by_project
|
||||
)
|
||||
allowed_ids = for_admin(user, permitted_by_team)
|
||||
else
|
||||
allowed_ids = for_non_admin(
|
||||
user, permitted_by_team, permitted_by_project
|
||||
|
@ -48,12 +48,10 @@ module Views
|
|||
.first
|
||||
end
|
||||
|
||||
def for_admin(user, permitted_by_team, permitted_by_project)
|
||||
def for_admin(user, permitted_by_team)
|
||||
allowed_ids = []
|
||||
permitted_by_team.each do |item|
|
||||
next unless user.id.in? item.users_ids
|
||||
by_project = get_by_project_item(permitted_by_project, item)
|
||||
next unless user.id.in? by_project.users_ids
|
||||
allowed_ids << item.report_id
|
||||
end
|
||||
allowed_ids
|
||||
|
|
|
@ -2,6 +2,7 @@ FactoryBot.define do
|
|||
factory :report do
|
||||
user { User.first || association(:user) }
|
||||
project { Project.first || association(:project) }
|
||||
team { Team.first || association(:team) }
|
||||
name Faker::Name.unique.name
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,80 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe DatatablesReport, type: :model do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
RSpec.describe Views::Datatables::DatatablesReport, type: :model do
|
||||
describe 'Database table' do
|
||||
it { should have_db_column :id }
|
||||
it { should have_db_column :name }
|
||||
it { should have_db_column :project_name }
|
||||
it { should have_db_column :created_by }
|
||||
it { should have_db_column :last_modified_by }
|
||||
it { should have_db_column :created_at }
|
||||
it { should have_db_column :updated_at }
|
||||
it { should have_db_column :project_archived }
|
||||
it { should have_db_column :project_visibility }
|
||||
it { should have_db_column :project_id }
|
||||
it { should have_db_column :team_id }
|
||||
it { should have_db_column :users_with_team_read_permissions }
|
||||
it { should have_db_column :users_with_project_read_permissions }
|
||||
end
|
||||
|
||||
describe 'is readonly' do
|
||||
let(:team) { create :team }
|
||||
it do
|
||||
expect {
|
||||
Views::Datatables::DatatablesReport.create!(team: team)
|
||||
}.to raise_error(
|
||||
ActiveRecord::ReadOnlyRecord,
|
||||
'Views::Datatables::DatatablesReport is marked as readonly'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#tokenize/1' do
|
||||
it 'returns an array of permission items' do
|
||||
items = [[1, [1, 2]], [2, [3, 4]]]
|
||||
tokenized = described_class.send('tokenize', items)
|
||||
expect(tokenized.first).to have_attributes(report_id: 1,
|
||||
users_ids: [1, 2])
|
||||
expect(tokenized.last).to have_attributes(report_id: 2, users_ids: [3, 4])
|
||||
end
|
||||
end
|
||||
|
||||
describe '#for_admin/3' do
|
||||
let!(:user) { create :user }
|
||||
let!(:user_two) { create :user, email: 'user.two@asdf.com' }
|
||||
let!(:team) { create :team }
|
||||
let!(:project) do
|
||||
create :project, created_by: user, last_modified_by: user, team: team
|
||||
end
|
||||
let!(:user_project) { create :user_project, project: project, user: user }
|
||||
let!(:team_two) { create :team }
|
||||
let!(:user_team) do
|
||||
create :user_team, team: team_two, user: user_two, role: 0
|
||||
end
|
||||
let!(:user_team) { create :user_team, team: team, user: user, role: 2 }
|
||||
|
||||
let!(:project_two) do
|
||||
create :project, created_by: user_two,
|
||||
last_modified_by: user_two,
|
||||
team: team_two
|
||||
end
|
||||
let!(:report_one) do
|
||||
create :report, user: user,
|
||||
team: team,
|
||||
name: 'report one',
|
||||
project: project
|
||||
end
|
||||
let!(:report_two) do
|
||||
create :report, user: user,
|
||||
team: team_two,
|
||||
project: project_two,
|
||||
name: 'report two'
|
||||
end
|
||||
|
||||
it 'returns the reports ' do
|
||||
reports = team.datatables_reports.visible_by(user, team)
|
||||
expect(reports.length).to eq 1
|
||||
expect(reports.first.id).to eq report_one.id
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue