Skip to content

Commit d9d757d

Browse files
Copilotmyabc
andcommitted
Add sprint/type filters to TaskBoards::CreateService queries
Co-authored-by: myabc <755+myabc@users.noreply.github.com>
1 parent b94a116 commit d9d757d

File tree

3 files changed

+33
-10
lines changed

3 files changed

+33
-10
lines changed

modules/backlogs/app/controllers/rb_taskboards_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def show
4040
private
4141

4242
def load_or_create_board
43-
result = TaskBoards::CreateService.ensure(user: current_user, project: @project, name: @sprint.board_name)
43+
result = TaskBoards::CreateService.ensure(user: current_user, project: @project, sprint: @sprint, name: @sprint.board_name)
4444

4545
if result.success?
4646
@board = result.result

modules/backlogs/app/services/task_boards/create_service.rb

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@
2929
#++
3030

3131
class TaskBoards::CreateService
32-
def self.ensure(user:, project:, name:)
32+
def self.ensure(user:, project:, sprint:, name:)
3333
board = ::Boards::Grid.find_by(project:, name:)
3434
return ServiceResult.success(result: board) if board
3535

36-
new(user:).call(project:, name:)
36+
new(user:).call(project:, sprint:, name:)
3737
rescue ActiveRecord::RecordNotUnique
3838
ServiceResult.success(result: ::Boards::Grid.find_by!(project:, name:))
3939
end
@@ -44,16 +44,16 @@ def initialize(user:)
4444
@user = user
4545
end
4646

47-
def call(project:, name:)
48-
create(project:, name:)
47+
def call(project:, sprint:, name:)
48+
create(project:, sprint:, name:)
4949
end
5050

5151
private
5252

53-
def create(project:, name:)
53+
def create(project:, sprint:, name:)
5454
ApplicationRecord.transaction do
5555
statuses = Type.find(Task.type).statuses
56-
queries = create_queries(statuses, project:)
56+
queries = create_queries(statuses, project:, sprint:)
5757
widgets = build_widgets(queries)
5858

5959
grid = ::Boards::Grid.create!(
@@ -86,12 +86,14 @@ def build_widgets(queries)
8686
end
8787
end
8888

89-
def create_queries(statuses, project:)
89+
def create_queries(statuses, project:, sprint:)
9090
statuses.map do |status|
9191
Query.new_default(project:, user:).tap do |query|
9292
query.name = status.name
9393
query.public = true
9494
query.add_filter("status_id", "=", [status.id])
95+
query.add_filter("version_id", "=", [sprint.id.to_s])
96+
query.add_filter("type_id", "=", [Task.type.to_s])
9597
query.sort_criteria = [[:manual_sorting, "asc"]]
9698
query.save!
9799
end

modules/backlogs/spec/services/task_boards/create_service_spec.rb

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
RSpec.describe TaskBoards::CreateService do
3434
let(:user) { create(:user) }
3535
let(:project) { create(:project) }
36+
let(:sprint) { create(:sprint, project:) }
3637
let(:type_task) { create(:type_task) }
3738
let(:status1) { create(:status) }
3839
let(:status2) { create(:status) }
@@ -47,7 +48,7 @@
4748
end
4849

4950
describe ".ensure" do
50-
subject(:result) { described_class.ensure(user:, project:, name: "Test Board") }
51+
subject(:result) { described_class.ensure(user:, project:, sprint:, name: "Test Board") }
5152

5253
context "when a board with the given name already exists" do
5354
let!(:existing_board) { create(:board_grid_with_query, project:, name: "Test Board") }
@@ -91,7 +92,7 @@
9192
end
9293

9394
describe "#call" do
94-
subject(:result) { instance.call(project:, name: "Test Board") }
95+
subject(:result) { instance.call(project:, sprint:, name: "Test Board") }
9596

9697
context "when successful" do
9798
it { is_expected.to be_success }
@@ -115,6 +116,26 @@
115116
"attribute" => "status"
116117
)
117118
end
119+
120+
it "filters each query by the sprint version" do
121+
result.result.widgets.each do |widget|
122+
query = Query.find(widget.options[:query_id])
123+
version_filter = query.filters.find { |f| f.field.to_s == "version_id" }
124+
expect(version_filter).not_to be_nil
125+
expect(version_filter.operator).to eq("=")
126+
expect(version_filter.values).to eq([sprint.id.to_s])
127+
end
128+
end
129+
130+
it "filters each query by the task type" do
131+
result.result.widgets.each do |widget|
132+
query = Query.find(widget.options[:query_id])
133+
type_filter = query.filters.find { |f| f.field.to_s == "type_id" }
134+
expect(type_filter).not_to be_nil
135+
expect(type_filter.operator).to eq("=")
136+
expect(type_filter.values).to eq([type_task.id.to_s])
137+
end
138+
end
118139
end
119140

120141
context "when grid creation fails" do

0 commit comments

Comments
 (0)