mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-10-10 05:46:47 +08:00
65 lines
1.8 KiB
Ruby
65 lines
1.8 KiB
Ruby
# 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
|