Merge pull request #3542 from aignatov-bio/ai-sci-6072-add-pet-rspec-context-helper

Add context helper for project creation [SCI-6072]
This commit is contained in:
Alex Kriuchykhin 2021-09-14 15:55:48 +02:00 committed by GitHub
commit 3a4ed8f5ee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 116 additions and 128 deletions

View file

@ -5,26 +5,13 @@ require 'rails_helper'
describe AssetsController, type: :controller do describe AssetsController, type: :controller do
login_user login_user
let(:user) { subject.current_user } include_context 'reference_project_structure', {
let!(:team) { create :team, created_by: user } role: :owner_role,
let(:user_team) { create :user_team, :admin, user: user, team: team } result_asset: true,
let!(:user_project) { create :user_project, user: user } step: true,
let(:project) do step_asset: true,
create :project, team: team, user_projects: [user_project] result_comment: true
end }
let(:owner_role) { create :owner_role }
let(:experiment) { create :experiment, project: project }
let(:my_module) { create :my_module, name: 'test task', experiment: experiment }
let(:protocol) do
create :protocol, my_module: my_module, team: team, added_by: user
end
let(:step) { create :step, protocol: protocol, user: user }
let(:step_asset_task) { create :step_asset, step: step }
let(:result) do
create :result, name: 'test result', my_module: my_module, user: user
end
let(:result_asset) { create :result_asset, result: result }
let(:protocol_in_repository) { create :protocol, :in_public_repository, team: team } let(:protocol_in_repository) { create :protocol, :in_public_repository, team: team }
let(:step_in_repository) { create :step, protocol: protocol_in_repository, user: user } let(:step_in_repository) { create :step, protocol: protocol_in_repository, user: user }
@ -36,7 +23,6 @@ describe AssetsController, type: :controller do
describe 'POST start_edit' do describe 'POST start_edit' do
before do before do
create_user_assignment(my_module, owner_role, user)
allow(controller).to receive(:check_edit_permission).and_return(true) allow(controller).to receive(:check_edit_permission).and_return(true)
end end
let(:action) { post :create_start_edit_image_activity, params: params, format: :json } let(:action) { post :create_start_edit_image_activity, params: params, format: :json }
@ -44,11 +30,10 @@ describe AssetsController, type: :controller do
{ id: nil } { id: nil }
end end
it 'calls create activity service (start edit image on step)' do it 'calls create activity service (start edit image on step)' do
params[:id] = step_asset_task.asset.id params[:id] = step_asset.asset.id
expect(Activities::CreateActivityService).to receive(:call) expect(Activities::CreateActivityService).to receive(:call)
.with(hash_including(activity_type: :edit_image_on_step)) .with(hash_including(activity_type: :edit_image_on_step))
action action
p response.code
end end
it 'calls create activity service (start edit image on result)' do it 'calls create activity service (start edit image on result)' do
@ -67,7 +52,7 @@ describe AssetsController, type: :controller do
end end
it 'adds activity in DB' do it 'adds activity in DB' do
params[:id] = step_asset_task.asset.id params[:id] = step_asset.asset.id
expect { action } expect { action }
.to(change { Activity.count }) .to(change { Activity.count })
end end

View file

@ -4,19 +4,10 @@ require 'rails_helper'
describe CanvasController do describe CanvasController do
login_user login_user
include_context 'reference_project_structure', {
skip_my_module: true
}
let(:user) { subject.current_user }
let(:team) { create :team, created_by: user }
let!(:user_team) { create :user_team, :admin, user: user, team: team }
let!(:user_project) do
create :user_project, user: user, project: project
end
let(:project) do
create :project, team: team
end
let(:owner_role) { create :owner_role }
let(:experiment) { create :experiment, project: project }
let(:experiment2) { create :experiment, project: project } let(:experiment2) { create :experiment, project: project }
# Idea of this "end to end" test is to put a lot "work" on method `@experiment.udpate_canvas` and controller actipn # Idea of this "end to end" test is to put a lot "work" on method `@experiment.udpate_canvas` and controller actipn
@ -94,9 +85,9 @@ describe CanvasController do
before do before do
8.times do |i| 8.times do |i|
create_user_assignment(public_send("task#{i+1}"), owner_role, user) create_user_assignment(public_send("task#{i+1}"), role, user)
end end
create_user_assignment(experiment2, owner_role, user) create_user_assignment(experiment2, role, user)
end end
context 'when have a lot changes on canvas' do context 'when have a lot changes on canvas' do

View file

@ -4,16 +4,8 @@ require 'rails_helper'
describe ExperimentsController, type: :controller do describe ExperimentsController, type: :controller do
login_user login_user
include_context 'reference_project_structure'
let!(:user) { controller.current_user }
let!(:team) { create :team, created_by: user, users: [user] }
let!(:project) { create :project, team: team }
let(:owner_role) { create :owner_role }
let(:experiment) { create :experiment, project: project }
before do
create_user_assignment(experiment, owner_role, user)
end
describe 'POST create' do describe 'POST create' do
let(:action) { post :create, params: params, format: :json } let(:action) { post :create, params: params, format: :json }
@ -78,7 +70,7 @@ describe ExperimentsController, type: :controller do
end end
before do before do
create_user_assignment(archived_experiment, owner_role, user) create_user_assignment(archived_experiment, role, user)
end end
it 'calls create activity for unarchiving experiment' do it 'calls create activity for unarchiving experiment' do

View file

@ -4,20 +4,10 @@ require 'rails_helper'
describe MyModuleCommentsController, type: :controller do describe MyModuleCommentsController, type: :controller do
login_user login_user
include_context 'reference_project_structure' , {
let(:user) { subject.current_user } role: :normal_user_role,
let(:team) { create :team, created_by: user } my_module_comment: true
let!(:user_team) { create :user_team, :admin, user: user, team: team } }
let(:project) { create :project, team: team, created_by: user }
let(:normal_user_role) { create :normal_user_role }
let(:experiment) { create :experiment, project: project }
let(:my_module) { create :my_module, experiment: experiment }
let(:task_comment) { create :task_comment, user: user, my_module: my_module }
before do
create_user_assignment(my_module, normal_user_role, user)
end
describe 'POST create' do describe 'POST create' do
let(:action) { post :create, params: params, format: :json } let(:action) { post :create, params: params, format: :json }
@ -42,7 +32,7 @@ describe MyModuleCommentsController, type: :controller do
let(:action) { put :update, params: params, format: :json } let(:action) { put :update, params: params, format: :json }
let(:params) do let(:params) do
{ my_module_id: my_module.id, { my_module_id: my_module.id,
id: task_comment.id, id: my_module_comment.id,
comment: { message: 'comment updated' } } comment: { message: 'comment updated' } }
end end
@ -62,7 +52,7 @@ describe MyModuleCommentsController, type: :controller do
describe 'DELETE destroy' do describe 'DELETE destroy' do
let(:action) { delete :destroy, params: params, format: :json } let(:action) { delete :destroy, params: params, format: :json }
let(:params) do let(:params) do
{ my_module_id: my_module.id, id: task_comment.id } { my_module_id: my_module.id, id: my_module_comment.id }
end end
it 'calls create activity for deleting comment on task' do it 'calls create activity for deleting comment on task' do

View file

@ -4,16 +4,9 @@ require 'rails_helper'
describe MyModuleRepositoriesController, type: :controller do describe MyModuleRepositoriesController, type: :controller do
login_user login_user
include_context 'reference_project_structure' , {
let(:user) { subject.current_user } role: :normal_user_role
let(:team) { create :team, created_by: user } }
let!(:user_team) { create :user_team, :admin, user: user, team: team }
let(:project) { create :project, team: team, created_by: user }
let!(:user_project) do
create :user_project, user: user, project: project
end
let(:normal_user_role) { create :normal_user_role }
let!(:repository) { create :repository, created_by: user, team: team } let!(:repository) { create :repository, created_by: user, team: team }
let!(:repository_row) do let!(:repository_row) do
create :repository_row, created_by: user, repository: repository create :repository_row, created_by: user, repository: repository
@ -21,12 +14,6 @@ describe MyModuleRepositoriesController, type: :controller do
let!(:repository_row_2) do let!(:repository_row_2) do
create :repository_row, created_by: user, repository: repository create :repository_row, created_by: user, repository: repository
end end
let(:experiment) { create :experiment, project: project }
let(:my_module) { create :my_module, experiment: experiment }
before do
create_user_assignment(my_module, normal_user_role, user)
end
describe 'PUT update (assign repository records)' do describe 'PUT update (assign repository records)' do
let(:params) do let(:params) do

View file

@ -4,21 +4,11 @@ require 'rails_helper'
describe MyModuleTagsController, type: :controller do describe MyModuleTagsController, type: :controller do
login_user login_user
include_context 'reference_project_structure', {
let(:user) { subject.current_user } tag: true
let(:team) { create :team, created_by: user } }
let!(:user_team) { create :user_team, :admin, user: user, team: team }
let(:project) { create :project, created_by: user }
let(:experiment) { create :experiment, project: project }
let(:my_module) { create :my_module, experiment: experiment }
before do
create_user_assignment(my_module, create(:owner_role), user)
end
describe 'POST create' do describe 'POST create' do
let(:tag) { create :tag, project: project }
let(:action) { post :create, params: params, format: :json } let(:action) { post :create, params: params, format: :json }
let(:params) do let(:params) do
{ my_module_id: my_module.id, my_module_tag: { tag_id: tag.id } } { my_module_id: my_module.id, my_module_tag: { tag_id: tag.id } }

View file

@ -4,23 +4,12 @@ require 'rails_helper'
describe MyModulesController, type: :controller do describe MyModulesController, type: :controller do
login_user login_user
include_context 'reference_project_structure'
let(:user) { subject.current_user }
let(:team) { create :team, created_by: user }
let!(:user_team) { create :user_team, :admin, user: user, team: team }
let(:project) { create :project, team: team, created_by: user }
let(:owner_role) { create :owner_role }
let!(:repository) { create :repository, created_by: user, team: team } let!(:repository) { create :repository, created_by: user, team: team }
let!(:repository_row) do let!(:repository_row) do
create :repository_row, created_by: user, repository: repository create :repository_row, created_by: user, repository: repository
end end
let(:experiment) { create :experiment, project: project }
let(:my_module) { create :my_module, experiment: experiment }
before do
create_user_assignment(my_module, owner_role, user)
end
describe 'PUT update' do describe 'PUT update' do
let(:action) { put :update, params: params, format: :json } let(:action) { put :update, params: params, format: :json }
@ -192,7 +181,7 @@ describe MyModulesController, type: :controller do
before do before do
3.times do |i| 3.times do |i|
create_user_assignment(public_send("task#{i+1}"), owner_role, user) create_user_assignment(public_send("task#{i+1}"), role, user)
end end
end end

View file

@ -4,23 +4,9 @@ require 'rails_helper'
describe ProjectCommentsController, type: :controller do describe ProjectCommentsController, type: :controller do
login_user login_user
include_context 'reference_project_structure', {
let(:user) { subject.current_user } project_comment: true
let(:team) { create :team, created_by: user } }
let(:user_team) { create :user_team, team: team, user: user }
let(:project) do
create :project, team: team
end
let(:owner_role) { create :owner_role }
let(:project_comment) do
create :project_comment, project: project, user: user
end
before do
create_user_assignment(project, owner_role, user)
end
describe 'POST create' do describe 'POST create' do
context 'in JSON format' do context 'in JSON format' do
let(:action) { post :create, params: params, format: :json } let(:action) { post :create, params: params, format: :json }

View file

@ -1,10 +1,13 @@
module PermissionHelpers module PermissionHelpers
def create_user_assignment(object, role, user, assigned_by = nil) def create_user_assignment(object, role, user, assigned_by = nil)
unless UserAssignment.where(assignable: object, user: user, user_role: role).any?
create :user_assignment, create :user_assignment,
assignable: object, assignable: object,
user: user, user: user,
user_role: role, user_role: role,
assigned_by: assigned_by || user assigned_by: assigned_by || user
end
case object case object
when MyModule when MyModule

View file

@ -0,0 +1,75 @@
# Example
#
# include_context 'reference_project_structure', {
# role: :owner_role,
# result_asset: true,
# step: true,
# team: @team,
# step_asset: true,
# result_comment: true,
# project_comments: 4,
# tags: 2,
# skip_assignments: true
# }
RSpec.shared_context 'reference_project_structure' do |config|
config ||= {}
let(:user) { subject.current_user }
let(:role) { create (config[:role] || :owner_role) } unless config[:skip_role]
let!(:team) { config[:team] || (create :team, created_by: user) }
let!(:user_team) { create :user_team, :admin, user: user, team: team }
let(:project) { create :project, team: team }
let(:experiment) { create :experiment, project: project }
let(:my_module) { create :my_module, experiment: experiment } unless config[:skip_my_module]
let(:tag) { create :tag, project: project} if config[:tag]
let(:tags) { create_list :tag, config[:tags], project: project} if config[:tags]
let(:project_comment) { create :project_comment, project: project, user: user } if config[:project_comment]
let(:project_comments) { create_list :project_comment, config[:project_comments], project: project, user: user } if config[:project_comments]
let(:my_module_comment) { create :task_comment, my_module: my_module, user: user } if config[:my_module_comment]
let(:my_module_comments) { create_list :task_comment, config[:my_module_comments], my_module: my_module, user: user } if config[:my_module_comments]
if config[:step]
let(:step) { create :step, protocol: my_module.protocol, user: user}
let(:step_comment) { create :step_comment, step: step, user: user} if config[:step_comment]
let(:step_comments) { create_list :step_comment, config[:step_comments], step: step, user: user} if config[:step_comments]
[:step_asset, :step_table, :step_checklist].each do |step_component|
let(step_component) { create step_component, step: step } if config[step_component]
end
[:step_assets, :step_tables, :step_checklists].each do |step_components|
let(step_components) { create_list step_components, config[step_components], step: step } if config[step_components]
end
end
if config[:steps]
let(:steps) { create_list :step, config[:steps], protocol: my_module.protocol, user: user}
end
[:result_asset, :result_text, :result_table].each do |result|
if config[result]
let(result) { create result, result: (create :result, my_module: my_module, user: user )}
let("#{result}_comment") { create :result_comment, result: public_send(result).result, user: user } if config[:result_comment]
let("#{result}_comments") { create_list :result_comment, config[:result_comments], result: public_send(result).result, user: user } if config[:result_comments]
end
end
[:result_assets, :result_texts, :result_tables].each do |result|
if config[result]
let(result) { create_list result, config[result], result: (create :result, my_module: my_module, user: user )}
end
end
before do
unless config[:skip_assignments]
if config[:skip_my_module]
create_user_assignment(experiment, role, user)
else
create_user_assignment(my_module, role, user)
end
end
end
end