Skip to content

Commit

Permalink
[TAN-3332] Add tests of new method in finder service + reduce accepta…
Browse files Browse the repository at this point in the history
…nce tests
  • Loading branch information
jinjagit committed Dec 12, 2024
1 parent fb9ae41 commit 5ba6173
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 44 deletions.
5 changes: 5 additions & 0 deletions back/app/services/projects_finder_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,11 @@ def followed_by_user
.order('subquery.latest_follower_created_at DESC')
end

# Returns an ActiveRecord collection of published projects, visible to user, that are also
# If :areas param: Returns all non-draft projects that are visible to user, for the selected areas.
# Else: Returns all non-draft projects that are visible to user, for the areas the user follows or for all-areas.
# Ordered by created_at, newest first.
# # => [Project]
def projects_for_areas
@projects = @projects.not_draft

Expand Down
45 changes: 1 addition & 44 deletions back/spec/acceptance/projects_mini_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@
let!(:area1) { create(:area) }
let!(:area2) { create(:area) }
let!(:project_with_areas) { create(:project_with_active_ideation_phase) }
let!(:areas_project1) { create(:areas_project, project: project_with_areas, area: area1) }
let!(:_areas_project1) { create(:areas_project, project: project_with_areas, area: area1) }
let!(:_areas_project2) { create(:areas_project, project: project_with_areas, area: area2) }

let!(:project_for_all_areas) { create(:project_with_active_ideation_phase, include_all_areas: true) }
Expand All @@ -362,32 +362,6 @@
expect(project_ids).to match_array [project_with_areas.id, project_for_all_areas.id]
end

example 'Orders projects by created_at DESC', document: false do
project2 = create(:project)
project3 = create(:project)
create(:areas_project, project: project2, area: area1)
create(:areas_project, project: project3, area: area1)

project_with_areas.update!(created_at: 4.days.ago)
project2.update!(created_at: 1.day.ago)
project3.update!(created_at: 3.days.ago)
project_for_all_areas.update!(created_at: 2.days.ago)

do_request areas: [area1.id]
expect(status).to eq 200

project_ids = json_response[:data].pluck(:id)
expect(project_ids).to eq [project2.id, project_for_all_areas.id, project3.id, project_with_areas.id]
end

example_request 'Does not return duplicate projects when more than one areas_project matches', document: false do
do_request areas: [area1.id, area2.id]
expect(status).to eq 200

project_ids = json_response[:data].pluck(:id)
expect(project_ids).to match_array [project_with_areas.id, project_for_all_areas.id]
end

example_request 'Returns projects for followed areas & for all areas when areas param is nil', document: false do
create(:follower, followable: area1, user: @user)

Expand All @@ -396,23 +370,6 @@

expect(json_response[:data].pluck(:id)).to match_array [project_for_all_areas.id, project_with_areas.id]
end

context 'when admin' do
before do
@user = create(:admin)
header_token_for @user
end

example 'Does not include draft projects', document: false do
project_with_areas.update!(admin_publication_attributes: { publication_status: 'draft' })

do_request areas: [area1.id]
expect(status).to eq 200

project_ids = json_response[:data].pluck(:id)
expect(project_ids).to eq [project_for_all_areas.id]
end
end
end

get 'web_api/v1/projects/for_topics' do
Expand Down
58 changes: 58 additions & 0 deletions back/spec/services/projects_finder_service_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -401,4 +401,62 @@
end
end
end

describe 'projects_for_areas' do
let!(:area1) { create(:area) }
let!(:area2) { create(:area) }
let!(:project_with_areas) { create(:project_with_active_ideation_phase) }
let!(:_areas_project1) { create(:areas_project, project: project_with_areas, area: area1) }
let!(:_areas_project2) { create(:areas_project, project: project_with_areas, area: area2) }

let!(:project_for_all_areas) { create(:project_with_active_ideation_phase, include_all_areas: true) }

let!(:_project_without_area) { create(:project) }

it 'Lists projects for a given area OR for all areas' do
result = service.new(Project.all, user, { areas: [area1.id] }).projects_for_areas

expect(Project.count).to eq 3
expect(result).to match_array [project_with_areas, project_for_all_areas]
end

it 'Orders projects by created_at DESC' do
project2 = create(:project)
project3 = create(:project)
create(:areas_project, project: project2, area: area1)
create(:areas_project, project: project3, area: area1)

project_with_areas.update!(created_at: 4.days.ago)
project2.update!(created_at: 1.day.ago)
project3.update!(created_at: 3.days.ago)
project_for_all_areas.update!(created_at: 2.days.ago)

result = service.new(Project.all, user, { areas: [area1.id] }).projects_for_areas

expect(result).to eq [project2, project_for_all_areas, project3, project_with_areas]
end

it 'Does not return duplicate projects when more than one areas_project matches' do
result = service.new(Project.all, user, { areas: [area1.id, area2.id] }).projects_for_areas

expect(result).to eq [project_for_all_areas, project_with_areas]
end

it 'Returns projects for followed areas & for all areas when areas param is nil' do
create(:follower, followable: area1, user: user)

result = service.new(Project.all, user, {}).projects_for_areas

expect(result).to match_array [project_with_areas, project_for_all_areas]
end

it 'Does not include draft projects, even for an admin' do
user = create(:admin)
project_with_areas.update!(admin_publication_attributes: { publication_status: 'draft' })

result = service.new(Project.all, user, { areas: [area1.id] }).projects_for_areas

expect(result).to eq [project_for_all_areas]
end
end
end

0 comments on commit 5ba6173

Please sign in to comment.