Fix tests after table revamp [SCI-10271] (#7220)

This commit is contained in:
Soufiane 2024-03-11 12:08:42 +00:00 committed by GitHub
parent d004b1e7a0
commit a9537f06dd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 244 additions and 580 deletions

View file

@ -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

View file

@ -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"

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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']]
)

View file

@ -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

View 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

View 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

View 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

View file

@ -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

View file

@ -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

View file

@ -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