Skip to content

Commit

Permalink
include specs
Browse files Browse the repository at this point in the history
  • Loading branch information
brunopagno committed Nov 29, 2024
1 parent 4d71b90 commit 441f320
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 0 deletions.
61 changes: 61 additions & 0 deletions spec/models/custom_field/order_statements_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# frozen_string_literal: true

#-- copyright
# OpenProject is an open source project management software.
# Copyright (C) the OpenProject GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See COPYRIGHT and LICENSE files for more details.
#++

require "spec_helper"

RSpec.describe CustomField::OrderStatements do
# integration tests at spec/models/query/results_cf_sorting_integration_spec.rb
context "when hierarchy" do
subject(:custom_field) { create(:hierarchy_wp_custom_field) }

describe "#order_statement" do
it { expect(subject.order_statement).to eq("cf_order_#{custom_field.id}.value") }
end

describe "#order_join_statement" do
it do
expect(custom_field.order_join_statement).to eq(
<<-SQL.squish
LEFT OUTER JOIN (
SELECT DISTINCT ON (cv.customized_id) cv.customized_id , item.label "value"
FROM "custom_values" cv
INNER JOIN "hierarchical_items" item ON item.id = cv.value::bigint
WHERE cv.customized_type = 'WorkPackage'
AND cv.custom_field_id = #{custom_field.id}
AND cv.value IS NOT NULL
AND cv.value != ''
ORDER BY cv.customized_id, cv.id
) cf_order_#{custom_field.id} ON cf_order_#{custom_field.id}.customized_id = "work_packages".id
SQL
)
end
end
end
end
29 changes: 29 additions & 0 deletions spec/models/query/results_cf_sorting_integration_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -343,4 +343,33 @@ def wp_without_cf_value
end
end
end

context "for hierarchy format" do
include_examples "it sorts" do
let(:custom_field) { create(:hierarchy_wp_custom_field, hierarchy_root: nil) }
let(:root) { service.generate_root(custom_field).value! }
let(:service) { CustomFields::Hierarchy::HierarchicalItemService.new }

let!(:item_first) { service.insert_item(parent: root, label: "aa item").value! }
let!(:item_a) { service.insert_item(parent: root, label: "item_a").value! }
let!(:item_a1) { service.insert_item(parent: item_a, label: "item_a1").value! }
let!(:item_a2) { service.insert_item(parent: item_a, label: "item_a2").value! }
let!(:item_c) { service.insert_item(parent: root, label: "item_c").value! }
let!(:item_b) { service.insert_item(parent: root, label: "item_b").value! }
let!(:item_last) { service.insert_item(parent: root, label: "zz item").value! }

let(:work_packages) do
[
wp_without_cf_value,
wp_with_cf_value(item_first.id),
wp_with_cf_value(item_a.id),
wp_with_cf_value(item_a1.id),
wp_with_cf_value(item_a2.id),
wp_with_cf_value(item_b.id),
wp_with_cf_value(item_c.id),
wp_with_cf_value(item_last.id)
]
end
end
end
end

0 comments on commit 441f320

Please sign in to comment.