mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-20 06:35:56 +08:00
Fix tests after table revamp [SCI-10271] (#7220)
This commit is contained in:
parent
d004b1e7a0
commit
a9537f06dd
|
@ -15,4 +15,4 @@ before_install:
|
|||
- sudo mv docker-compose /usr/local/bin
|
||||
- make docker-ci
|
||||
script:
|
||||
- make tests-ci
|
||||
- travis_wait 30 make tests-ci
|
||||
|
|
2
Makefile
2
Makefile
|
@ -98,7 +98,7 @@ tests-ci:
|
|||
-e ENABLE_WEBHOOKS=true \
|
||||
--rm web bash -c "rake db:create && rake db:migrate && \
|
||||
yarn install && yarn build && yarn build:css && rails tailwindcss:build && \
|
||||
bundle exec rspec ./spec/"
|
||||
bundle exec rspec spec/"
|
||||
|
||||
console:
|
||||
@$(MAKE) rails cmd="rails console"
|
||||
|
|
|
@ -18,9 +18,8 @@ module SmartAnnotations
|
|||
def generate_prj_snippet(_, object)
|
||||
return "<span class='sa-type'>Prj</span>#{object.name} #{I18n.t('atwho.res.archived')}" if object.archived?
|
||||
|
||||
"<a class='sa-link' href='#{ROUTES.experiments_path(project_id: object)}'>
|
||||
<span class='sa-type'>Prj</span>#{object.name}
|
||||
</a>"
|
||||
"<a class='sa-link' href='#{ROUTES.experiments_path(project_id: object)}'>" \
|
||||
"<span class='sa-type'>Prj</span>#{object.name}</a>"
|
||||
end
|
||||
|
||||
def generate_exp_snippet(_, object)
|
||||
|
|
|
@ -21,18 +21,6 @@ describe AccessPermissions::ExperimentsController, type: :controller do
|
|||
create_user_assignment(experiment, viewer_user_role, viewer_user)
|
||||
end
|
||||
|
||||
describe 'GET #show' do
|
||||
it 'returns a http success response' do
|
||||
get :show, params: { project_id: project.id, id: experiment.id }, format: :json
|
||||
expect(response).to have_http_status :success
|
||||
end
|
||||
|
||||
it 'renders show template' do
|
||||
get :show, params: { project_id: project.id, id: experiment.id }, format: :json
|
||||
expect(response).to render_template :show
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET #edit' do
|
||||
it 'returns a http success response' do
|
||||
get :edit, params: { project_id: project.id, id: experiment.id }, format: :json
|
||||
|
|
|
@ -30,9 +30,9 @@ describe AccessPermissions::MyModulesController, type: :controller do
|
|||
expect(response).to have_http_status :success
|
||||
end
|
||||
|
||||
it 'renders show template' do
|
||||
it 'returns json' do
|
||||
get :show, params: { project_id: project.id, experiment_id: experiment.id, id: my_module.id }, format: :json
|
||||
expect(response).to render_template :show
|
||||
expect(response).to have_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -25,9 +25,13 @@ describe AccessPermissions::ProjectsController, type: :controller do
|
|||
expect(response).to have_http_status :success
|
||||
end
|
||||
|
||||
it 'renders new template' do
|
||||
it 'renders an array of users' do
|
||||
get :new, params: { id: project.id }, format: :json
|
||||
expect(response).to render_template :new
|
||||
|
||||
json_response = JSON.parse(response.body)
|
||||
|
||||
# Check that the top level is an array
|
||||
expect(json_response["data"]).to be_an_instance_of(Array)
|
||||
end
|
||||
|
||||
it 'renders 404 if project is not set' do
|
||||
|
@ -48,20 +52,11 @@ describe AccessPermissions::ProjectsController, type: :controller do
|
|||
expect(response).to have_http_status :success
|
||||
end
|
||||
|
||||
it 'renders show template' do
|
||||
it 'renders and array of user_assignment' do
|
||||
get :show, params: { id: project.id }, format: :json
|
||||
expect(response).to render_template :show
|
||||
end
|
||||
json_response = JSON.parse(response.body)
|
||||
|
||||
it 'renders show template when the user has view permissions on project' do
|
||||
create :user_project, user: normal_user, project: project
|
||||
create :user_assignment, assignable: project, user: normal_user, user_role: normal_user_role, assigned_by: user
|
||||
|
||||
sign_in_normal_user
|
||||
|
||||
get :show, params: { id: project.id }, format: :json
|
||||
expect(response).to have_http_status :success
|
||||
expect(response).to render_template :show
|
||||
expect(json_response["data"]).to be_an_instance_of(Array)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -127,22 +122,23 @@ describe AccessPermissions::ProjectsController, type: :controller do
|
|||
let(:valid_params) do
|
||||
{
|
||||
id: project.id,
|
||||
access_permissions_new_user_form: {
|
||||
resource_members: {
|
||||
0 => {
|
||||
assign: '1',
|
||||
user_assignment: {
|
||||
user_id: normal_user.id,
|
||||
user_role_id: technician_role.id
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
let!(:initial_count) do
|
||||
UserAssignment.count
|
||||
end
|
||||
|
||||
it 'creates new project user and user assignment' do
|
||||
expect {
|
||||
Delayed::Worker.delay_jobs = false
|
||||
dj_worker = Delayed::Worker.new
|
||||
post :create, params: valid_params, format: :json
|
||||
}.to change(UserAssignment, :count).by(1)
|
||||
Delayed::Job.all.each { |job| dj_worker.run(job) }
|
||||
expect(UserAssignment.count - initial_count).to eq(1)
|
||||
end
|
||||
|
||||
it 'does not create an assigment if user is already assigned' do
|
||||
|
|
|
@ -37,9 +37,9 @@ describe ProjectFoldersController, type: :controller do
|
|||
{
|
||||
destination_folder_id: project_folder_1.id,
|
||||
movables: [
|
||||
{ id: project_1.id, type: :project },
|
||||
{ id: project_folder_2.id, type: :project_folder }
|
||||
].to_json
|
||||
{ id: project_1.id, type: :projects },
|
||||
{ id: project_folder_2.id, type: :project_folders }
|
||||
]
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
@ -7,7 +7,9 @@ describe ProjectsController, type: :controller do
|
|||
|
||||
include_context 'reference_project_structure', {
|
||||
projects: 3,
|
||||
skip_my_module: true
|
||||
skip_my_module: true,
|
||||
skip_experiment: true,
|
||||
team_role: :owner
|
||||
}
|
||||
|
||||
describe '#index' do
|
||||
|
@ -51,25 +53,12 @@ describe ProjectsController, type: :controller do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#edit' do
|
||||
context 'in JSON format' do
|
||||
let(:params) { { id: projects.first.id } }
|
||||
|
||||
it 'returns success response' do
|
||||
get :edit, params: params, format: :json
|
||||
expect(response).to have_http_status(:success)
|
||||
expect(response.media_type).to eq 'application/json'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PUT update' do
|
||||
context 'in HTML format' do
|
||||
let(:action) { put :update, params: params }
|
||||
let(:params) do
|
||||
{ id: projects.first.id,
|
||||
project: { name: projects.first.name,
|
||||
team_id: projects.first.team.id,
|
||||
visibility: projects.first.visibility,
|
||||
default_public_user_role_id: projects.first.default_public_user_role.id } }
|
||||
end
|
||||
|
@ -87,28 +76,6 @@ describe ProjectsController, type: :controller do
|
|||
action
|
||||
end
|
||||
|
||||
it 'calls create activity service (rename_project)' do
|
||||
params[:project][:name] = 'test project changed'
|
||||
expect(Activities::CreateActivityService).to receive(:call)
|
||||
.with(hash_including(activity_type: :rename_project))
|
||||
action
|
||||
end
|
||||
|
||||
it 'calls create activity service (restore_project)' do
|
||||
projects.first.update(archived: true)
|
||||
params[:project][:archived] = false
|
||||
expect(Activities::CreateActivityService).to receive(:call)
|
||||
.with(hash_including(activity_type: :restore_project))
|
||||
action
|
||||
end
|
||||
|
||||
it 'calls create activity service (archive_project)' do
|
||||
params[:project][:archived] = true
|
||||
expect(Activities::CreateActivityService).to receive(:call)
|
||||
.with(hash_including(activity_type: :archive_project))
|
||||
action
|
||||
end
|
||||
|
||||
it 'adds activity in DB' do
|
||||
params[:project][:archived] = true
|
||||
expect { action }
|
||||
|
@ -116,53 +83,4 @@ describe ProjectsController, type: :controller do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#show' do
|
||||
context 'in HTML format' do
|
||||
let(:params) do
|
||||
{ id: projects.first.id, sort: 'old',
|
||||
project: { name: 'test project A1', team_id: team.id,
|
||||
visibility: 'visible' } }
|
||||
end
|
||||
|
||||
it 'returns success response' do
|
||||
get :show, params: params
|
||||
expect(response).to have_http_status(:success)
|
||||
expect(response.media_type).to eq 'text/html'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#notifications' do
|
||||
context 'in JSON format' do
|
||||
let(:params) do
|
||||
{ id: projects.first.id,
|
||||
project: { name: 'test project A1', team_id: team.id,
|
||||
visibility: 'visible' } }
|
||||
end
|
||||
|
||||
it 'returns success response' do
|
||||
get :notifications, format: :json, params: params
|
||||
expect(response).to have_http_status(:success)
|
||||
expect(response.media_type).to eq 'application/json'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#experiment_archive' do
|
||||
context 'in HTML format' do
|
||||
let(:params) do
|
||||
{ id: projects.first.id,
|
||||
view_mode: :archived,
|
||||
project: { name: 'test project A1', team_id: team.id,
|
||||
visibility: 'visible' } }
|
||||
end
|
||||
|
||||
it 'returns success response' do
|
||||
get :show, params: params
|
||||
expect(response).to have_http_status(:success)
|
||||
expect(response.media_type).to eq 'text/html'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -72,7 +72,7 @@ describe ReportsController, type: :controller do
|
|||
|
||||
describe 'DELETE destroy' do
|
||||
let(:action) { delete :destroy, params: params }
|
||||
let(:params) { { report_ids: "[#{report.id}]" } }
|
||||
let(:params) { { report_ids: [report.id] } }
|
||||
|
||||
it 'calls create activity service' do
|
||||
expect(Activities::CreateActivityService).to receive(:call)
|
||||
|
|
|
@ -15,10 +15,15 @@ describe RepositoriesController, type: :controller do
|
|||
|
||||
it 'correct JSON format' do
|
||||
repository
|
||||
|
||||
action
|
||||
|
||||
parsed_response = JSON.parse(response.body)
|
||||
expect(parsed_response[0].keys).to contain_exactly(
|
||||
'DT_RowId', '1', '2', '3', '4', '5', '6', '7', '8', 'repositoryUrl', 'DT_RowAttr'
|
||||
expect(parsed_response['data'][0].keys).to contain_exactly(
|
||||
'id', 'type', 'attributes'
|
||||
)
|
||||
expect(parsed_response['data'][0]['attributes'].keys).to contain_exactly(
|
||||
'name', 'code', 'nr_of_rows', 'shared', 'shared_label', 'ishared', 'team', 'created_at', 'created_by', 'archived_on', 'archived_by', 'urls', 'shared_read', 'shared_write', 'shareable_write'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -40,36 +40,18 @@ describe ExperimentsController, type: :controller do
|
|||
team_role: :normal_user
|
||||
}
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :get, :new do
|
||||
let(:testable) { project }
|
||||
let(:permissions) { [ProjectPermissions::EXPERIMENTS_CREATE] }
|
||||
let(:action_params) { { project_id: project.id } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :post, :create do
|
||||
let(:testable) { project }
|
||||
let(:permissions) { [ProjectPermissions::EXPERIMENTS_CREATE] }
|
||||
let(:action_params) { { project_id: project.id, experiment: { name: 'Test' } } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :get, :show do
|
||||
let(:testable) { experiment }
|
||||
let(:permissions) { [ExperimentPermissions::READ] }
|
||||
let(:action_params) { { id: experiment.id } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :get, :canvas do
|
||||
let(:testable) { experiment }
|
||||
let(:permissions) { [ExperimentPermissions::READ] }
|
||||
let(:action_params) { { id: experiment.id } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :get, :edit do
|
||||
let(:testable) { experiment }
|
||||
let(:permissions) { [ExperimentPermissions::MANAGE] }
|
||||
let(:action_params) { { id: experiment.id } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :put, :update do
|
||||
let(:testable) { experiment }
|
||||
let(:permissions) { [ExperimentPermissions::MANAGE, ExperimentPermissions::MANAGE] }
|
||||
|
@ -96,24 +78,12 @@ describe ExperimentsController, type: :controller do
|
|||
let(:custom_response_status) { :unprocessable_entity }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :get, :clone_modal do
|
||||
let(:testable) { experiment }
|
||||
let(:permissions) { [ExperimentPermissions::READ] }
|
||||
let(:action_params) { { id: experiment.id } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :post, :clone do
|
||||
let(:testable) { experiment }
|
||||
let(:permissions) { [ExperimentPermissions::READ] }
|
||||
let(:action_params) { { id: experiment.id } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :get, :move_modal do
|
||||
let(:testable) { experiment }
|
||||
let(:permissions) { [ExperimentPermissions::MANAGE] }
|
||||
let(:action_params) { { ids: [experiment.id] } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :post, :move do
|
||||
let(:testable) { experiment }
|
||||
let(:permissions) { [ExperimentPermissions::MANAGE] }
|
||||
|
@ -131,11 +101,5 @@ describe ExperimentsController, type: :controller do
|
|||
let(:permissions) { [ExperimentPermissions::READ] }
|
||||
let(:action_params) { { id: experiment.id } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :get, :sidebar do
|
||||
let(:testable) { experiment }
|
||||
let(:permissions) { [ExperimentPermissions::READ] }
|
||||
let(:action_params) { { id: experiment.id } }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,15 +6,12 @@ describe ProjectsController, type: :controller do
|
|||
include PermissionExtends
|
||||
|
||||
it_behaves_like "a controller with authentication", {
|
||||
sidebar: { id: 1 },
|
||||
edit: { id: 1 },
|
||||
archive_group: { id: 1 },
|
||||
restore_group: { id: 1 },
|
||||
create: { id: 1 },
|
||||
update: { id: 1 },
|
||||
show: { id: 1 },
|
||||
experiments_cards: { id: 1 },
|
||||
notifications: { id: 1 },
|
||||
permissions: { id: 1 },
|
||||
actions_dropdown: { id: 1 },
|
||||
view_type: { id: 1 }
|
||||
}, [:current_folder, :set_breadcrumbs_items, :create_tag]
|
||||
|
||||
login_user
|
||||
|
@ -26,12 +23,6 @@ describe ProjectsController, type: :controller do
|
|||
skip_my_module: true
|
||||
}
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :get, :sidebar do
|
||||
let(:testable) { project }
|
||||
let(:permissions) { [ProjectPermissions::READ] }
|
||||
let(:action_params) { { id: project.id } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :put, :update do
|
||||
let(:testable) { project }
|
||||
let(:permissions) { [ProjectPermissions::MANAGE] }
|
||||
|
@ -51,29 +42,5 @@ describe ProjectsController, type: :controller do
|
|||
let(:action_params) { { projects_ids: [project.id] } }
|
||||
let(:custom_response_status) { :unprocessable_entity }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :get, :show do
|
||||
let(:testable) { project }
|
||||
let(:permissions) { [ProjectPermissions::READ] }
|
||||
let(:action_params) { { id: project.id } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :get, :experiments_cards do
|
||||
let(:testable) { project }
|
||||
let(:permissions) { [ProjectPermissions::READ] }
|
||||
let(:action_params) { { id: project.id } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :get, :notifications do
|
||||
let(:testable) { project }
|
||||
let(:permissions) { [ProjectPermissions::READ] }
|
||||
let(:action_params) { { id: project.id } }
|
||||
end
|
||||
|
||||
it_behaves_like "a controller action with permissions checking", :put, :view_type do
|
||||
let(:testable) { project }
|
||||
let(:permissions) { [ProjectPermissions::READ] }
|
||||
let(:action_params) { { id: project.id } }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -46,9 +46,8 @@ RSpec.describe 'Api::V1::TaskAssignmentsController', type: :request do
|
|||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
[JSON.parse(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@user,
|
||||
each_serializer: Api::V1::UserSerializer)
|
||||
serialized_user = ActiveModelSerializers::SerializableResource
|
||||
.new(@user, serializer: Api::V1::UserSerializer)
|
||||
.to_json
|
||||
)['data']]
|
||||
)
|
||||
|
|
|
@ -1,170 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe ExperimentsOverviewService do
|
||||
EXPERIMENTS_CNT = 26
|
||||
time = Time.new(2019, 8, 1, 14, 35, 0)
|
||||
let!(:user) { create :user }
|
||||
let!(:project) { create :project, created_by: user }
|
||||
before do
|
||||
@experiments_overview = ExperimentsOverviewService.new(project, user, params)
|
||||
end
|
||||
|
||||
let!(:experiment_1) do
|
||||
create :experiment, name: 'test experiment D', project: project,
|
||||
archived: false, created_at: time.advance(hours: 2)
|
||||
end
|
||||
let!(:experiment_2) do
|
||||
create :experiment, name: 'test experiment B', project: project,
|
||||
archived: true, archived_on: time.advance(hours: 9), archived_by: user, created_at: time
|
||||
end
|
||||
let!(:experiment_3) do
|
||||
create :experiment, name: 'test experiment C', project: project,
|
||||
archived: false, created_at: time.advance(hours: 3)
|
||||
end
|
||||
let!(:experiment_4) do
|
||||
create :experiment, name: 'test experiment A', project: project,
|
||||
archived: true, archived_on: time.advance(hours: 8), archived_by: user,
|
||||
created_at: time.advance(hours: 1)
|
||||
end
|
||||
let!(:experiment_5) do
|
||||
create :experiment, name: 'test experiment E', project: project,
|
||||
archived: true, archived_on: time.advance(hours: 10), archived_by: user,
|
||||
created_at: time.advance(hours: 5)
|
||||
end
|
||||
let!(:experiment_6) do
|
||||
create :experiment, name: 'test experiment F', project: project,
|
||||
archived: false, created_at: time.advance(hours: 4)
|
||||
end
|
||||
(7..EXPERIMENTS_CNT).each do |i|
|
||||
let!("experiment_#{i}") do
|
||||
create :experiment, name: "test experiment #{(64 + i).chr}",
|
||||
project: project, created_at: time.advance(hours: 6, minutes: i)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#experiments' do
|
||||
let(:params) { {} }
|
||||
|
||||
context "with request parameters { filter: 'active' }" do
|
||||
let(:params) { { view_mode: 'active' } }
|
||||
|
||||
it 'returns all active experiments' do
|
||||
experiments = @experiments_overview.experiments
|
||||
expect(experiments.length).to eq EXPERIMENTS_CNT - 3
|
||||
expect(experiments.uniq.length).to eq experiments.length
|
||||
expect(experiments).to include(experiment_1, experiment_3)
|
||||
expect(experiments).not_to include(experiment_2, experiment_4, experiment_5)
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'old' }" do
|
||||
let(:params) { super().merge(sort: 'old') }
|
||||
|
||||
it 'returns all active experiments, sorted by ascending creation time attribute' do
|
||||
experiments = @experiments_overview.experiments
|
||||
expect(experiments.length).to eq EXPERIMENTS_CNT - 3
|
||||
expect(experiments.uniq.length).to eq experiments.length
|
||||
expect(experiments.first(2)).to eq [experiment_1, experiment_3]
|
||||
expect(experiments).not_to include(experiment_2, experiment_4, experiment_5)
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'new' }" do
|
||||
let(:params) { super().merge(sort: 'new') }
|
||||
|
||||
it 'returns all active experiments, sorted by descending creation time attribute' do
|
||||
experiments = @experiments_overview.experiments
|
||||
expect(experiments.length).to eq EXPERIMENTS_CNT - 3
|
||||
expect(experiments.uniq.length).to eq experiments.length
|
||||
expect(experiments.last(2)).to eq [experiment_3, experiment_1]
|
||||
expect(experiments).not_to include(experiment_2, experiment_4, experiment_5)
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'atoz' }" do
|
||||
let(:params) { super().merge(sort: 'atoz') }
|
||||
|
||||
it 'returns all active experiments, sorted by ascending name attribute' do
|
||||
experiments = @experiments_overview.experiments
|
||||
expect(experiments.length).to eq EXPERIMENTS_CNT - 3
|
||||
expect(experiments.uniq.length).to eq experiments.length
|
||||
expect(experiments.first(2)).to eq [experiment_3, experiment_1]
|
||||
expect(experiments).not_to include(experiment_2, experiment_4, experiment_5)
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'ztoa' }" do
|
||||
let(:params) { super().merge(sort: 'ztoa') }
|
||||
|
||||
it 'returns all active experiments, sorted by descending name attribute' do
|
||||
experiments = @experiments_overview.experiments
|
||||
expect(experiments.length).to eq EXPERIMENTS_CNT - 3
|
||||
expect(experiments.uniq.length).to eq experiments.length
|
||||
expect(experiments.last(2)).to eq [experiment_1, experiment_3]
|
||||
expect(experiments).not_to include(experiment_2, experiment_4, experiment_5)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { filter: 'archived' }" do
|
||||
let(:params) { super().merge(view_mode: 'archived') }
|
||||
|
||||
it 'returns all archived experiments' do
|
||||
experiments = @experiments_overview.experiments
|
||||
expect(experiments.length).to eq 3
|
||||
expect(experiments.uniq.length).to eq experiments.length
|
||||
expect(experiments).to include(experiment_2, experiment_4, experiment_5)
|
||||
expect(experiments).not_to include(experiment_1, experiment_3)
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'old' }" do
|
||||
let(:params) { super().merge(sort: 'old') }
|
||||
|
||||
it 'returns all archived experiments, sorted by ascending creation time attribute' do
|
||||
experiments = @experiments_overview.experiments
|
||||
expect(experiments.length).to eq 3
|
||||
expect(experiments.uniq.length).to eq experiments.length
|
||||
expect(experiments.first(3)).to eq [experiment_2, experiment_4, experiment_5]
|
||||
expect(experiments).not_to include(experiment_1, experiment_3, experiment_6)
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'new' }" do
|
||||
let(:params) { super().merge(sort: 'new') }
|
||||
|
||||
it 'returns all archived experiments, sorted by descending creation time attribute' do
|
||||
experiments = @experiments_overview.experiments
|
||||
expect(experiments.length).to eq 3
|
||||
expect(experiments.uniq.length).to eq experiments.length
|
||||
expect(experiments.last(3)).to eq [experiment_5, experiment_4, experiment_2]
|
||||
expect(experiments).not_to include(experiment_1, experiment_3, experiment_6)
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'atoz' }" do
|
||||
let(:params) { super().merge(sort: 'atoz') }
|
||||
|
||||
it 'returns all archived experiments, sorted by ascending name attribute' do
|
||||
experiments = @experiments_overview.experiments
|
||||
expect(experiments.length).to eq 3
|
||||
expect(experiments.uniq.length).to eq experiments.length
|
||||
expect(experiments.first(3)).to eq [experiment_4, experiment_2, experiment_5]
|
||||
expect(experiments).not_to include(experiment_1, experiment_3, experiment_6)
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'ztoa' }" do
|
||||
let(:params) { super().merge(sort: 'ztoa') }
|
||||
|
||||
it 'returns all archived experiments, sorted by descending name attribute' do
|
||||
experiments = @experiments_overview.experiments
|
||||
expect(experiments.length).to eq 3
|
||||
expect(experiments.uniq.length).to eq experiments.length
|
||||
expect(experiments.last(3)).to eq [experiment_5, experiment_2, experiment_4]
|
||||
expect(experiments).not_to include(experiment_1, experiment_3, experiment_6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
69
spec/services/lists/experiments_service_spec.rb
Normal file
69
spec/services/lists/experiments_service_spec.rb
Normal file
|
@ -0,0 +1,69 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Lists::ExperimentsService do
|
||||
let!(:user) { create(:user) }
|
||||
let!(:project) { create(:project, created_by: user) }
|
||||
let!(:experiments) { create_list(:experiment, 5, project: project, created_by: user) }
|
||||
let!(:archived_experiments) { create_list(:experiment, 5, :archived, project: project, created_by: user) }
|
||||
let(:raw_data) { project.experiments }
|
||||
let(:params) {{ page: 1, per_page: 10, search: '', project: project } }
|
||||
let(:service) { described_class.new(raw_data, params, user:) }
|
||||
|
||||
describe '#fetch_records' do
|
||||
context 'when view_mode is archived' do
|
||||
before do
|
||||
params[:view_mode] = 'archived'
|
||||
end
|
||||
|
||||
it 'fetches only archived records' do
|
||||
expect(service.call).to all(be_archived)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when view_mode is active' do
|
||||
it 'fetches only active records' do
|
||||
expect(service.call).to all(be_active)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#filter_records' do
|
||||
let(:filters) { {} }
|
||||
|
||||
before do
|
||||
params[:filters] = filters
|
||||
end
|
||||
|
||||
context 'when search param is present' do
|
||||
it 'filters records by search param' do
|
||||
params[:search] = 'Experiment-2'
|
||||
Experiment.second.update!(description: 'Experiment-2 description')
|
||||
Experiment.third.update!(description: 'Experiment-2 description')
|
||||
|
||||
service.call do |record|
|
||||
expect(record.description).to include('description')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when query filter is present' do
|
||||
let(:filters) { { query: 'Experiment-1' } }
|
||||
|
||||
it 'filters records by search query' do
|
||||
service.call do |record|
|
||||
expect(record.name).to include('Experiment-1')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when created_at_from filter is present' do
|
||||
let(:filters) { { created_at_from: 1.day.ago } }
|
||||
|
||||
it 'filters records created after the specified date' do
|
||||
expect(service.call.pluck(:created_at)).to all(be > 1.day.ago)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
62
spec/services/lists/my_module_service_spec.rb
Normal file
62
spec/services/lists/my_module_service_spec.rb
Normal file
|
@ -0,0 +1,62 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Lists::MyModulesService do
|
||||
let!(:user) { create(:user) }
|
||||
let!(:project) { create(:project, created_by: user) }
|
||||
let!(:experiment) { create(:experiment, project: project, created_by: user) }
|
||||
let!(:my_modules) { create_list(:my_module, 5, experiment: experiment) }
|
||||
let!(:archived_my_modules) { create_list(:my_module, 5, :archived, experiment: experiment) }
|
||||
let(:raw_data) { experiment.my_modules }
|
||||
let(:params) {{ page: 1, per_page: 10, search: '', experiment: experiment } }
|
||||
let(:service) { described_class.new(raw_data, params, user:) }
|
||||
|
||||
describe '#fetch_records' do
|
||||
context 'when view_mode is archived' do
|
||||
before do
|
||||
params[:view_mode] = 'archived'
|
||||
end
|
||||
|
||||
it 'fetches only archived records' do
|
||||
expect(service.call).to all(be_archived)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when view_mode is active' do
|
||||
it 'fetches only active records' do
|
||||
expect(service.call).to all(be_active)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#filter_records' do
|
||||
let(:filters) { {} }
|
||||
|
||||
before do
|
||||
params[:filters] = filters
|
||||
end
|
||||
|
||||
context 'when search param is present' do
|
||||
it 'filters records by search param' do
|
||||
params[:search] = 'Module-2'
|
||||
MyModule.second.update!(description: 'Module-2 description')
|
||||
MyModule.third.update!(description: 'Module-2 description')
|
||||
|
||||
service.call do |record|
|
||||
expect(record.description).to include('description')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when query filter is present' do
|
||||
let(:filters) { { query: 'Module-1' } }
|
||||
|
||||
it 'filters records by search query' do
|
||||
service.call do |record|
|
||||
expect(record.name).to include('Module-1')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
65
spec/services/lists/projects_service_spec.rb
Normal file
65
spec/services/lists/projects_service_spec.rb
Normal file
|
@ -0,0 +1,65 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Lists::ProjectsService do
|
||||
let!(:team) { create(:team) }
|
||||
let!(:user) { create(:user) }
|
||||
let!(:folder) { create(:project_folder) }
|
||||
let!(:projects) { create_list(:project, 5, team: team) }
|
||||
let!(:archived_projects) { create_list(:project, 5, :archived, team: team) }
|
||||
let(:params) {{ page: 1, per_page: 10, search: '', team: team } }
|
||||
let(:service) { described_class.new(team, user, folder, params) }
|
||||
|
||||
describe '#call' do
|
||||
context 'when view_mode is archived' do
|
||||
before do
|
||||
params[:view_mode] = 'archived'
|
||||
end
|
||||
|
||||
it 'fetches only archived projects' do
|
||||
expect(service.call).to all(be_archived)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when view_mode is active' do
|
||||
it 'fetches only active projects' do
|
||||
expect(service.call).to all(be_active)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when search param is present' do
|
||||
it 'filters projects by search param' do
|
||||
params[:search] = 'Project-2'
|
||||
Project.second.update!(name: 'Project-2 name')
|
||||
Project.third.update!(name: 'Project-3 name')
|
||||
|
||||
service.call.each do |record|
|
||||
expect(record.name).to include('name')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when query filter is present' do
|
||||
let(:filters) { { query: 'Project-1' } }
|
||||
|
||||
it 'filters projects by search query' do
|
||||
params[:filters] = filters
|
||||
|
||||
service.call.each do |record|
|
||||
expect(record.name).to include('Project-1')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when created_at_from filter is present' do
|
||||
let(:filters) { { created_at_from: 1.day.ago } }
|
||||
|
||||
it 'filters projects created after the specified date' do
|
||||
params[:filters] = filters
|
||||
|
||||
expect(service.call.pluck(:created_at)).to all(be > 1.day.ago)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,198 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe ProjectsOverviewService do
|
||||
PROJECTS_CNT = 26
|
||||
time = Time.new(2015, 8, 1, 14, 35, 0)
|
||||
let!(:user) { create :user }
|
||||
let!(:another_user) { create :user }
|
||||
let!(:team) { create :team, created_by: user }
|
||||
let!(:another_team) { create :team, created_by: another_user }
|
||||
before do
|
||||
@projects_overview = ProjectsOverviewService.new(team, user, nil, params)
|
||||
end
|
||||
|
||||
let!(:project_1) do
|
||||
create :project, name: 'test project D', visibility: 1, team: team,
|
||||
archived: false, created_at: time.advance(hours: 2), created_by: user
|
||||
end
|
||||
let!(:project_2) do
|
||||
create :project, name: 'test project B', visibility: 1, team: team,
|
||||
archived: true, created_at: time, created_by: user
|
||||
end
|
||||
let!(:project_3) do
|
||||
create :project, name: 'test project C', visibility: 1, team: team,
|
||||
archived: false, created_at: time.advance(hours: 3), created_by: user
|
||||
end
|
||||
let!(:project_4) do
|
||||
create :project, name: 'test project A', visibility: 1, team: team,
|
||||
archived: true, created_at: time.advance(hours: 1), created_by: user
|
||||
end
|
||||
let!(:project_5) do
|
||||
create :project, name: 'test project E', visibility: 1, team: team,
|
||||
archived: true, created_at: time.advance(hours: 5), created_by: user
|
||||
end
|
||||
let!(:project_6) do
|
||||
create :project, name: 'test project F', visibility: 0, team: another_team,
|
||||
archived: false, created_at: time.advance(hours: 4), created_by: another_user
|
||||
end
|
||||
|
||||
(7..PROJECTS_CNT).each do |i|
|
||||
let!("project_#{i}") do
|
||||
create :project, name: "test project #{(64 + i).chr}",
|
||||
visibility: 1,
|
||||
team: team, archived: i % 2,
|
||||
created_at: time.advance(hours: 6, minutes: i),
|
||||
created_by: user
|
||||
end
|
||||
end
|
||||
|
||||
describe '#project_cards' do
|
||||
let(:params) { {} }
|
||||
|
||||
context 'with request parameters { }' do
|
||||
it 'returns all projects' do
|
||||
projects = @projects_overview.project_cards
|
||||
expect(projects).to include(project_1, project_2, project_3, project_4,
|
||||
project_5)
|
||||
expect(projects).not_to include project_6
|
||||
expect(projects.length).to eq PROJECTS_CNT - 1
|
||||
expect(projects.uniq.length).to eq projects.length
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { filter: 'active' }" do
|
||||
let(:params) { { view_mode: 'active' } }
|
||||
|
||||
it 'returns all active projects' do
|
||||
projects = @projects_overview.project_cards
|
||||
expect(projects.length).to eq PROJECTS_CNT / 2 - 1
|
||||
expect(projects.uniq.length).to eq projects.length
|
||||
expect(projects).to include(project_1, project_3)
|
||||
expect(projects).not_to include(project_2, project_4, project_5,
|
||||
project_6)
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'old' }" do
|
||||
let(:params) { super().merge(sort: 'old') }
|
||||
|
||||
it 'returns all active projects, sorted by ascending creation ' \
|
||||
'time attribute' do
|
||||
projects = @projects_overview.project_cards
|
||||
expect(projects.length).to eq PROJECTS_CNT / 2 - 1
|
||||
expect(projects.uniq.length).to eq projects.length
|
||||
expect(projects.first(2)).to eq [project_1, project_3]
|
||||
expect(projects).not_to include(project_2, project_4, project_5,
|
||||
project_6)
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'new' }" do
|
||||
let(:params) { super().merge(sort: 'new') }
|
||||
|
||||
it 'returns all active projects, sorted by descending creation ' \
|
||||
'time attribute' do
|
||||
projects = @projects_overview.project_cards
|
||||
expect(projects.length).to eq PROJECTS_CNT / 2 - 1
|
||||
expect(projects.uniq.length).to eq projects.length
|
||||
expect(projects.last(2)).to eq [project_3, project_1]
|
||||
expect(projects).not_to include(project_2, project_4, project_5,
|
||||
project_6)
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'atoz' }" do
|
||||
let(:params) { super().merge(sort: 'atoz') }
|
||||
|
||||
it 'returns all active projects, sorted by ascending name ' \
|
||||
'attribute' do
|
||||
projects = @projects_overview.project_cards
|
||||
expect(projects.length).to eq PROJECTS_CNT / 2 - 1
|
||||
expect(projects.uniq.length).to eq projects.length
|
||||
expect(projects.first(2)).to eq [project_3, project_1]
|
||||
expect(projects).not_to include(project_2, project_4, project_5,
|
||||
project_6)
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'ztoa' }" do
|
||||
let(:params) { super().merge(sort: 'ztoa') }
|
||||
|
||||
it 'returns all active projects, sorted by descending name ' \
|
||||
' attribute' do
|
||||
projects = @projects_overview.project_cards
|
||||
expect(projects.length).to eq PROJECTS_CNT / 2 - 1
|
||||
expect(projects.uniq.length).to eq projects.length
|
||||
expect(projects.last(2)).to eq [project_1, project_3]
|
||||
expect(projects).not_to include(project_2, project_4, project_5,
|
||||
project_6)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { filter: 'archived' }" do
|
||||
let(:params) { super().merge(view_mode: 'archived') }
|
||||
|
||||
it 'returns all archived projects' do
|
||||
projects = @projects_overview.project_cards
|
||||
expect(projects.length).to eq PROJECTS_CNT / 2
|
||||
expect(projects.uniq.length).to eq projects.length
|
||||
expect(projects).to include(project_2, project_4, project_5)
|
||||
expect(projects).not_to include(project_1, project_3, project_6)
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'old' }" do
|
||||
let(:params) { super().merge(sort: 'old') }
|
||||
|
||||
it 'returns all archived projects, sorted by ascending creation ' \
|
||||
'time attribute' do
|
||||
projects = @projects_overview.project_cards
|
||||
expect(projects.length).to eq PROJECTS_CNT / 2
|
||||
expect(projects.uniq.length).to eq projects.length
|
||||
expect(projects.first(3)).to eq [project_2, project_4, project_5]
|
||||
expect(projects).not_to include(project_1, project_3, project_6)
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'new' }" do
|
||||
let(:params) { super().merge(sort: 'new') }
|
||||
|
||||
it 'returns all archived projects, sorted by descending creation ' \
|
||||
'time attribute' do
|
||||
projects = @projects_overview.project_cards
|
||||
expect(projects.length).to eq PROJECTS_CNT / 2
|
||||
expect(projects.uniq.length).to eq projects.length
|
||||
expect(projects.last(3)).to eq [project_5, project_4, project_2]
|
||||
expect(projects).not_to include(project_1, project_3, project_6)
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'atoz' }" do
|
||||
let(:params) { super().merge(sort: 'atoz') }
|
||||
|
||||
it 'returns all archived projects, sorted by ascending name ' \
|
||||
' attribute' do
|
||||
projects = @projects_overview.project_cards
|
||||
expect(projects.length).to eq PROJECTS_CNT / 2
|
||||
expect(projects.uniq.length).to eq projects.length
|
||||
expect(projects.first(3)).to eq [project_4, project_2, project_5]
|
||||
expect(projects).not_to include(project_1, project_3, project_6)
|
||||
end
|
||||
end
|
||||
|
||||
context "with request parameters { sort: 'ztoa' }" do
|
||||
let(:params) { super().merge(sort: 'ztoa') }
|
||||
|
||||
it 'returns all archived projects, sorted by descending name ' \
|
||||
' attribute' do
|
||||
projects = @projects_overview.project_cards
|
||||
expect(projects.length).to eq PROJECTS_CNT / 2
|
||||
expect(projects.uniq.length).to eq projects.length
|
||||
expect(projects.last(3)).to eq [project_5, project_2, project_4]
|
||||
expect(projects).not_to include(project_1, project_3, project_6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -18,7 +18,7 @@ describe SmartAnnotations::HtmlPreview do
|
|||
it 'returns a html snippet' do
|
||||
snippet = subject.html(nil, 'prj', project)
|
||||
expect(snippet).to eq(
|
||||
"<a class='sa-link' href='/projects/#{project.id}'>" \
|
||||
"<a class='sa-link' href='/projects/#{project.id}/experiments'>" \
|
||||
"<span class='sa-type'>Prj</span>my project</a>"
|
||||
)
|
||||
end
|
||||
|
|
|
@ -25,7 +25,7 @@ describe SmartAnnotations::TagToHtml do
|
|||
describe 'Parsed text' do
|
||||
it 'returns a existing string with smart annotation' do
|
||||
expect(subject.html).to eq(
|
||||
"My annotation of <a class='sa-link' href='/projects/#{project.id}'>" \
|
||||
"My annotation of <a class='sa-link' href='/projects/#{project.id}/experiments'>" \
|
||||
"<span class='sa-type'>Prj</span>my project</a>"
|
||||
)
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue