scinote-web/spec/services/experiments/copy_experiment_as_template_service_sepc.rb
2019-03-19 15:33:57 +01:00

67 lines
2 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
describe Experiments::CopyExperimentAsTemplateService do
let(:team) { create :team, :with_members }
let(:user_project) { create :user_project, :normal_user, user: user }
let(:project) do
create :project, team: team
end
let(:new_project) do
create :project, team: team, user_projects: [user_project]
end
let(:experiment) do
create :experiment, :with_tasks, name: 'MyExp', project: project
end
let(:user) { create :user }
let(:service_call) do
Experiments::CopyExperimentAsTemplateService
.call(experiment_id: experiment.id,
project_id: new_project.id,
user_id: user.id)
end
context 'when service call is successful' do
it 'adds new experiment to target project' do
expect { service_call }.to(change { new_project.experiments.count })
end
it 'adds Activity record' do
expect { service_call }.to(change { Activity.all.count })
end
it 'calls create activity service' do
expect(Activities::CreateActivityService).to receive(:call)
.with(hash_including(activity_type: :clone_experiment))
service_call
end
it 'copies all tasks to new experiment' do
expect(service_call.cloned_experiment.my_modules.count)
.to be == experiment.my_modules.count
end
it 'copies all task groups to new experiment' do
expect(service_call.cloned_experiment.my_module_groups.count)
.to be == experiment.my_module_groups.count
end
end
context 'when service call is not successful' do
it 'returns an error when can\'t find experiment' do
allow(Experiment).to receive(:find).and_return(nil)
expect(service_call.errors).to have_key(:invalid_arguments)
end
it 'returns error when user don\'t have permissions' do
expect_any_instance_of(Experiment)
.to receive(:projects_with_role_above_user).and_return([])
expect(service_call.errors).not_to be_empty
end
end
end