Skip to content

Commit

Permalink
Add an enterprise banner on top of automatic subject configuration
Browse files Browse the repository at this point in the history
We are making sure that users can revert back to manual subjects
at any time and even keep using the feature if it's still enabled
after their enterprise token expired. They will merely not be able
to set new types to automatic and have to live with an enterprise
banner being shown to them whenever they change the subject config.
  • Loading branch information
NobodysNightmare committed Dec 20, 2024
1 parent 54bd074 commit 9a8ad7b
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ See COPYRIGHT and LICENSE files for more details.
++#%>

<%=
render(EnterpriseEdition::BannerComponent.new(:automatic_subject_generation, mb: 3))
%>

<%=
primer_form_with(**form_options) do |f|
render(WorkPackages::Types::SubjectConfigurationForm.new(f))
Expand Down
2 changes: 2 additions & 0 deletions app/forms/work_packages/types/subject_configuration_form.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,15 @@ class SubjectConfigurationForm < ApplicationForm
group.radio_button(
value: "manual",
checked: !has_pattern?,
disabled: !EnterpriseToken.active? && !has_pattern?,
label: I18n.t("types.edit.subject_configuration.manually_editable_subjects.label"),
caption: I18n.t("types.edit.subject_configuration.manually_editable_subjects.caption"),
data: { action: "admin--subject-configuration#hidePatternInput" }
)
group.radio_button(
value: "auto",
checked: has_pattern?,
disabled: !EnterpriseToken.active? && !has_pattern?,
label: I18n.t("types.edit.subject_configuration.automatically_generated_subjects.label"),
caption: I18n.t("types.edit.subject_configuration.automatically_generated_subjects.caption"),
data: { action: "admin--subject-configuration#showPatternInput" }
Expand Down
2 changes: 2 additions & 0 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1903,6 +1903,8 @@ en:
upsale:
title: "Enterprise add-on"
link_title: "More information"
automatic_subject_generation:
description: "Create automatically generated subjects using referenced attributes and text."
form_configuration:
description: "Customize the form configuration with these additional add-ons:"
add_groups: "Add new attribute groups"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,7 @@ The **Activated for new projects by default** setting in the Types will only act
This can be also configured in the [project settings](../../../user-guide/projects/project-settings).

![activate projects for work package types](image-20200116150513323.png)

## Work package subject configuration (Enterprise add-on)

Under **Administration -> Work packages -> Types** on the tab **Subject configuration** you can choose whether work package subjects should be defined automatically.
3 changes: 3 additions & 0 deletions lib/open_project/static/links.rb
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,9 @@ def static_links
href: "https://www.openproject.org/docs/user-guide/time-and-costs/progress-tracking/"
},
enterprise_docs: {
automatic_subject_generation: {
href: "https://www.openproject.org/docs/system-admin-guide/manage-work-packages/work-package-types/#work-package-subject-configuration-enterprise-add-on"
},
form_configuration: {
href: "https://www.openproject.org/docs/system-admin-guide/manage-work-packages/work-package-types/#work-package-form-configuration-enterprise-add-on"
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# frozen_string_literal: true

# -- copyright
# OpenProject is an open source project management software.
# Copyright (C) 2010-2024 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 "rails_helper"

RSpec.describe WorkPackages::Types::SubjectConfigurationComponent, type: :component do
subject(:render_component) do
render_inline(described_class.new)
end

before do
allow(EnterpriseToken).to receive(:active?).and_return(true)
end

it "shows no enterprise banner" do
render_component

expect(page).not_to have_test_selector("op-ee-banner-automatic-subject-generation")
end

it "enables mode selectors" do
render_component

page.all("input[type=radio]").each { |e| expect(e).not_to be_disabled } # rubocop:disable Rails/FindEach
end

context "when enterprise edition is not activated" do
before do
allow(EnterpriseToken).to receive(:active?).and_return(false)
end

it "shows the enterprise banner" do
render_component

expect(page).to have_test_selector("op-ee-banner-automatic-subject-generation")
end

it "disables mode selectors" do
render_component

expect(page.all("input[type=radio]")).to all(be_disabled)
end

context "and when the subject is already automatically generated" do
before do
# TODO: once has_pattern? has a non-fake implementation, this should properly set
# the thing that influences has_pattern? (e.g. the backing database model)
allow(WorkPackages::Types::SubjectConfigurationForm).to receive(:new).and_return(
instance_double(WorkPackages::Types::SubjectConfigurationForm, has_pattern?: true).as_null_object
)
end

it "shows the enterprise banner" do
render_component

expect(page).to have_test_selector("op-ee-banner-automatic-subject-generation")
end

it "enables mode selectors" do
render_component

page.all("input[type=radio]").each { |e| expect(e).not_to be_disabled } # rubocop:disable Rails/FindEach
end
end
end
end

0 comments on commit 9a8ad7b

Please sign in to comment.