Skip to content

Commit

Permalink
Merge pull request opf#17506 from opf/subject-enterprise-banner
Browse files Browse the repository at this point in the history
Add an enterprise banner on top of automatic subject configuration
  • Loading branch information
NobodysNightmare authored Jan 9, 2025
2 parents 06344e1 + 6acc8c8 commit 2648cad
Show file tree
Hide file tree
Showing 8 changed files with 111 additions and 3 deletions.
7 changes: 4 additions & 3 deletions app/components/enterprise_edition/banner_component.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@
# ++

module EnterpriseEdition
# Add a general description of component here
# Add additional usage considerations or best practices that may aid the user to use the component correctly.
# @accessibility Add any accessibility considerations
# A banner indicating that a given feature requires the enterprise edition of OpenProject.
# This component uses conventional names for translation keys or URL look-ups based on the feature_key passed in.
# It will only be rendered if necessary.
class BannerComponent < ApplicationComponent
include OpPrimer::ComponentHelpers

Expand All @@ -50,6 +50,7 @@ def initialize(feature_key,
**system_arguments)
@system_arguments = system_arguments
@system_arguments[:tag] = "div"
@system_arguments[:test_selector] = "op-ee-banner-#{feature_key.to_s.tr('_', '-')}"
super

@feature_key = feature_key
Expand Down
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
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class SubjectConfigurationForm < ApplicationForm
checked: has_pattern?,
label: I18n.t("types.edit.subject_configuration.automatically_generated_subjects.label"),
caption: I18n.t("types.edit.subject_configuration.automatically_generated_subjects.caption"),
disabled: !EnterpriseToken.active? && !has_pattern?,
data: { action: "admin--subject-configuration#showPatternInput" }
)
end
Expand Down
2 changes: 2 additions & 0 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1909,6 +1909,8 @@ en:
upsale:
title: "Enterprise add-on"
link_title: "More information"
automatic_subject_generation:
description: "Create automatically generated subjects using referenced attributes and text."
customize_life_cycle:
description: "Create and organize different project stages and gates than the ones provided by PM2 project cycle planning."
form_configuration:
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
Expand Up @@ -95,6 +95,7 @@
it "renders the component" do
render_component_in_mo

expect(page).to have_test_selector("op-ee-banner-some-enterprise-feature")
expect(page).to have_css ".op-ee-banner--title-container", text: title
expect(page).to have_css ".op-ee-banner--description-container", text: description
expect(page).to have_link link_title, href:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# 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(type))
end

let(:type) { create(:type) }

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", :aggregate_failures do
render_component

expect(page.find("input[type=radio][value=auto]")).not_to be_disabled
expect(page.find("input[type=radio][value=manual]")).not_to be_disabled
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 only automatic mode selector", :aggregate_failures do
render_component

expect(page.find("input[type=radio][value=auto]")).to be_disabled
expect(page.find("input[type=radio][value=manual]")).not_to be_disabled
end

context "and when the subject is already automatically generated" do
let(:type) { create(:type, patterns: { subject: { blueprint: "Hello world", enabled: true } }) }

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", :aggregate_failures do
render_component

expect(page.find("input[type=radio][value=auto]")).not_to be_disabled
expect(page.find("input[type=radio][value=manual]")).not_to be_disabled
end
end
end
end

0 comments on commit 2648cad

Please sign in to comment.