diff --git a/docs/installation-and-operations/installation/README.md b/docs/installation-and-operations/installation/README.md index 26e3702d8054..b446ad3df95b 100644 --- a/docs/installation-and-operations/installation/README.md +++ b/docs/installation-and-operations/installation/README.md @@ -6,15 +6,15 @@ sidebar_navigation: # Installing OpenProject -OpenProject can be setup in three different ways: +OpenProject can be setup in these different ways: -| Topic | Content | -| ------------------------------------------------ | ------------------------------------------------------------ | -| [Installation with DEB/RPM packages](./packaged) | This is the recommended way to install OpenProject | -| [Installation with Docker](./docker) | This allows to setup OpenProject in an isolated manner using Docker | -| [Installation with Kubernetes](./kubernetes) | This allows to setup OpenProject using Kubernetes | -| [Installation with Helm charts](./helm-chart) | This allows to setup OpenProject using Helm charts | -| [Other](misc/) | Extra information on installing OpenProject on specific platforms such as Kubernetes. | +| Topic | Content | +| ---------------------------------------------------- | ------------------------------------------------------------------------------------- | +| [Installation with DEB/RPM packages](./packaged) | This is the recommended way to install OpenProject | +| [Installation with Docker Compose](./docker-compose) | This allows to setup OpenProject in an isolated manner using Docker Compose | +| [Installation with single Docker container](./docker)| This allows to setup OpenProject in a single Docker container | +| [Installation with Helm charts](./helm-chart) | This allows to setup OpenProject using Helm charts | +| [Other](misc/) | Extra information on installing OpenProject on specific platforms such as Kubernetes. | > **NOTE: We recommend using the DEB/RPM package installation.** diff --git a/docs/installation-and-operations/installation/docker/README.md b/docs/installation-and-operations/installation/docker/README.md index 27bcdcecbe9f..08a051a153e8 100644 --- a/docs/installation-and-operations/installation/docker/README.md +++ b/docs/installation-and-operations/installation/docker/README.md @@ -1,10 +1,10 @@ --- sidebar_navigation: - title: Docker + title: Docker (all-in-one) priority: 300 --- -# Install OpenProject with Docker +# OpenProject on Docker all-in-one container [Docker](https://www.docker.com) is a way to distribute self-contained applications easily. We provide a Docker image for the Community edition that you can very easily install and upgrade on your servers. However, contrary to the manual or package-based installation, your machine needs to have the Docker Engine @@ -12,7 +12,7 @@ installed first, which usually requires a recent operating system. Please see th *** -**Supported architectures** +## Supported architectures Starting with OpenProject 12.5.6 we publish our containers for three architectures. @@ -24,75 +24,24 @@ The OpenProject **BIM Edition** is only supported on AMD64, however. *** -**Limitations** +## Limitations Note that the docker container setup does not allow for integration of repositories within OpenProject. You can reference external repositories, but cannot set them up through OpenProject itself. For that feature to work, you need to use the packaged installation method. -**Overview** +## Overview OpenProject's docker setup can be launched in two ways: -1. Multiple containers (recommended), each with a single process inside, using a Compose file. Allows to easily choose which services you want to run, and simplifies scaling and monitoring aspects. +### One container per process (recommend) -2. One container with all the processes inside. Easy but not recommended for production. This is the legacy behavior. +This is the recommended approach for using OpenProject with Docker, where each component has a single container inside, orchestrated using a Compose file. Allows to easily choose which services you want to run, and simplifies scaling and monitoring aspects. -## One container per process (recommended) +Please follow the [OpenProject for Docker compose](../docker-compose/) documentation for this installation method -### Quick Start - -First, you must clone the [openproject-deploy](https://github.com/opf/openproject-deploy/tree/stable/14/compose) repository: - -```shell -git clone https://github.com/opf/openproject-deploy --depth=1 --branch=stable/14 openproject -``` - -Then, change into the compose folder, this folder will be the location where you enter all following commands: - -```shell -cd openproject/compose -``` - -Make sure you are using the latest version of the Docker images: - -```shell -docker-compose pull -``` - -Launch the containers: - -```shell -OPENPROJECT_HTTPS=false docker-compose up -d -``` - -After a while, OpenProject should be up and running on `http://localhost:8080`. The default username and password is login: `admin`, and password: `admin`. You need to explicitly disable HTTPS mode on startup as OpenProject assumes it's running behind HTTPS in production by default. - -> **Note:** The `docker-compose.yml` file present in the repository can be adjusted to your convenience. With each pull it will be overwritten. Best practice is to use the file `docker-compose.override.yml` for that case. For instance you could mount specific configuration files, override environment variables, or switch off services you don't need. Please refer to the official [Docker Compose documentation](https://docs.docker.com/compose/extends/) for more details. - -You can stop the Compose stack by running: - -```shell -docker-compose stop -``` - -You can stop and remove all containers by running: - -```shell -docker-compose down -``` - -This will not remove your data which is persisted in named volumes, likely called `compose_opdata` (for attachments) and `compose_pgdata` (for the database). The exact name depends on the name of the directory where your `docker-compose.yml` and/or you `docker-compose.override.yml` files are stored (`compose` in this case). - -If you want to start from scratch and remove the existing data you will have to remove these volumes via -`docker volume rm compose_opdata compose_pgdata`. - -### Configuration - -Please see the [advanced configuration guide's docker paragraphs](../../configuration/#docker) - -#### BIM edition +### Single docker container -In order to install or change to BIM inside a Docker environment, please navigate to the [Docker Installation for OpenProject BIM](../../bim-edition/#docker-installation-openproject-bim) paragraph at the BIM edition documentation. +This guide will show you to install OpenProject in one container with all the processes inside. This allows for a very quick start but is not recommended for production as it hinders upgradability of the different components such as the database. ## All-in-one container diff --git a/docs/installation-and-operations/installation/kubernetes/README.md b/docs/installation-and-operations/installation/kubernetes/README.md index a57325d7300b..3238db6e304b 100644 --- a/docs/installation-and-operations/installation/kubernetes/README.md +++ b/docs/installation-and-operations/installation/kubernetes/README.md @@ -7,6 +7,6 @@ sidebar_navigation: # Kubernetes Kubernetes is a container orchestration tool. As such it can use the -OpenProject docker container in the same manner as shown in the [docker section](../docker/#one-container-per-process-recommended). +OpenProject docker container in the same manner as shown in the [docker section](../docker/). -In the [openproject-deploy](https://github.com/opf/openproject-deploy/blob/stable/14/kubernetes/README.md) repository we provide further information and an exemplary set of YAML files defining a complete OpenProject setup on Kubernetes. +If you'd like to run OpenProject on Kubernetes, please take a look at the [OpenProject helm chart](../helm-chart). diff --git a/docs/installation-and-operations/installation/misc/README.md b/docs/installation-and-operations/installation/misc/README.md index f0e8ce1b4c5f..b73e67d0c498 100644 --- a/docs/installation-and-operations/installation/misc/README.md +++ b/docs/installation-and-operations/installation/misc/README.md @@ -12,7 +12,7 @@ The respective sections explain everything you need to know. To make things easier here we give further instructions on how to get up and running with OpenProject on different platforms which use either the docker container or the package: -* [Kubernetes](../kubernetes) +* [Kubernetes using the OpenProject Helm chart](../helm-chart) * [Synology](../synology) * [Manual (not recommended)](../manual) diff --git a/docs/installation-and-operations/installation/synology/README.md b/docs/installation-and-operations/installation/synology/README.md index ee8431a6d286..d0ca8080b429 100644 --- a/docs/installation-and-operations/installation/synology/README.md +++ b/docs/installation-and-operations/installation/synology/README.md @@ -5,7 +5,7 @@ sidebar_navigation: false # Synology Synology offers NAS devices that come with a UI for starting docker containers on them. -This means OpenProject has to be used exactly as described in the [docker](../docker/#one-container-per-process-recommended) section. +This means OpenProject has to be used exactly as described in the [docker](../docker/) section. ## Launching the container diff --git a/docs/installation-and-operations/misc/migration-to-postgresql13/README.md b/docs/installation-and-operations/misc/migration-to-postgresql13/README.md index d5d093d3a2c5..ab0fa2450f63 100644 --- a/docs/installation-and-operations/misc/migration-to-postgresql13/README.md +++ b/docs/installation-and-operations/misc/migration-to-postgresql13/README.md @@ -160,7 +160,7 @@ sudo yum remove pgsql10 ## Compose-based docker installation -> Please follow this section only if you have installed OpenProject using [this procedure](../../installation/docker/#one-container-per-process-recommended). +> Please follow this section only if you have installed OpenProject using [this procedure](../../installation/docker/). > Before attempting the upgrade, please ensure you have performed a backup of your installation by following the [backup guide](../../operation/backing-up/). You can find the upgrade instructions for your docker-compose setup in the [openproject-deploy](https://github.com/opf/openproject-deploy/blob/stable/14/compose/control/README.md#upgrade) repository. diff --git a/docs/installation-and-operations/operation/restoring/README.md b/docs/installation-and-operations/operation/restoring/README.md index 82e1ddf22bab..8b5ffa236e49 100644 --- a/docs/installation-and-operations/operation/restoring/README.md +++ b/docs/installation-and-operations/operation/restoring/README.md @@ -246,7 +246,7 @@ You may need to create the `files` directory if it doesn't exist yet. #### 4) Start OpenProject -Start the container as described in the [installation section](../../installation/docker/#one-container-per-process-recommended) +Start the container as described in the [installation section](../../installation/docker/) mounting `/var/lib/openproject/pgdata` (and `/var/lib/openproject/assets/` for attachments). ## Changing the database schema from cloud to on-premises diff --git a/docs/installation-and-operations/operation/upgrading/README.md b/docs/installation-and-operations/operation/upgrading/README.md index 4be46a4a2428..f752714d9832 100644 --- a/docs/installation-and-operations/operation/upgrading/README.md +++ b/docs/installation-and-operations/operation/upgrading/README.md @@ -159,7 +159,7 @@ sudo chown -R 102 /volume1/openproject/* ``` After that it's simply a matter of launching the new container mounted with the copied `pgdata` and `assets` folders -as described in the [installation section](../../installation/docker/#one-container-per-process-recommended). +as described in the [installation section](../../installation/docker/). ## Upgrade notes from 9.x diff --git a/docs/release-notes/14-5-0/README.md b/docs/release-notes/14-5-0/README.md index 66d0e3c8876e..ef89c4690755 100644 --- a/docs/release-notes/14-5-0/README.md +++ b/docs/release-notes/14-5-0/README.md @@ -108,12 +108,12 @@ In this release, the dynamic bootstrapping of Angular components has been remove - Feature: PDF export of meeting agenda and meeting \[[#22517](https://community.openproject.org/wp/22517)\] -- Feature: Work packages export modal with settings & Job status modal \[[#48274](https://community.openproject.org/wp/48274)\] +- Feature: Work packages export modal with settings & Job status modal \[[#48274](https://community.openproject.org/wp/48274)\] - Feature: Enable a storage for multiple projects at once \[[#49212](https://community.openproject.org/wp/49212)\] -- Feature: Update PageHeaders & SubHeaders in the My account pages \[[#53807](https://community.openproject.org/wp/53807)\] -- Feature: Update PageHeaders & SubHeaders in the Admin pages \[[#53808](https://community.openproject.org/wp/53808)\] +- Feature: Update PageHeaders & SubHeaders in the My account pages \[[#53807](https://community.openproject.org/wp/53807)\] +- Feature: Update PageHeaders & SubHeaders in the Admin pages \[[#53808](https://community.openproject.org/wp/53808)\] - Feature: Always visible text filter in project list \[[#55234](https://community.openproject.org/wp/55234)\] -- Feature: Meetings: Disable by default "Send out invitation emails upon creation" \[[#56275](https://community.openproject.org/wp/56275)\] +- Feature: Meetings: Disable by default "Send out invitation emails upon creation" \[[#56275](https://community.openproject.org/wp/56275)\] - Feature: Create 14.5 release teaser \[[#56535](https://community.openproject.org/wp/56535)\] - Feature: Make Project List and header view turbo aware \[[#56557](https://community.openproject.org/wp/56557)\] - Feature: Release custom field columns/filters in project lists to Community Edition \[[#56573](https://community.openproject.org/wp/56573)\] @@ -123,7 +123,7 @@ In this release, the dynamic bootstrapping of Angular components has been remove - Feature: Change the styling of the split screen layout in the notification center \[[#56866](https://community.openproject.org/wp/56866)\] - Feature: Rename actions in work package dropdown menu \[[#56900](https://community.openproject.org/wp/56900)\] - Feature: Add numbers to tabs in new notification split screen \[[#56918](https://community.openproject.org/wp/56918)\] -- Feature: Clarify meaning of "Send e-mails" settings in meetings creation form \[[#57261](https://community.openproject.org/wp/57261)\] +- Feature: Clarify meaning of "Send e-mails" settings in meetings creation form \[[#57261](https://community.openproject.org/wp/57261)\] - Feature: Captcha support for CloudFlare Turnstile \[[#57328](https://community.openproject.org/wp/57328)\] - Feature: Full height split screen for notifications \[[#57341](https://community.openproject.org/wp/57341)\] - Feature: Administration for workflows: Uncheck box by default to display all statuses \[[#57421](https://community.openproject.org/wp/57421)\] @@ -135,16 +135,15 @@ In this release, the dynamic bootstrapping of Angular components has been remove - Bugfix: GitLab integration pipeline status not updated \[[#54122](https://community.openproject.org/wp/54122)\] - Bugfix: Wrong date format in notification email \[[#54136](https://community.openproject.org/wp/54136)\] - Bugfix: Sort order of wiki pages in side-menu wrong / inconsistent \[[#54450](https://community.openproject.org/wp/54450)\] -- Bugfix: Contents being lost and updated to 'undefined' in wikis, documents and work packages \[[#54796](https://community.openproject.org/wp/54796)\] +- Bugfix: Contents being lost and updated to 'undefined' in wikis, documents and work packages \[[#54796](https://community.openproject.org/wp/54796)\] - Bugfix: Gantt PDF export shows superfluous hyphen (-) when start or finish date is missing \[[#55088](https://community.openproject.org/wp/55088)\] -- Bugfix: Project attributes: Fix phrasing of "required" and "visible" options \[[#55299](https://community.openproject.org/wp/55299)\] -- Bugfix: Budget: Groups and placeholder users saved as "deleted user" \[[#55974](https://community.openproject.org/wp/55974)\] +- Bugfix: Inbound Mail can't update accountable fields \[[#55206](https://community.openproject.org/wp/55206)\] +- Bugfix: Project attributes: Fix phrasing of "required" and "visible" options \[[#55299](https://community.openproject.org/wp/55299)\] +- Bugfix: Budget: Groups and placeholder users saved as "deleted user" \[[#55974](https://community.openproject.org/wp/55974)\] - Bugfix: Direct upgrade from OpenProject 11 to 14 db migration RemoveDestroyedHelpTexts not working \[[#56043](https://community.openproject.org/wp/56043)\] -- Bugfix: Authorization::UnknownPermissionError happened in GET::API::V3::Root#/ \[[#56064](https://community.openproject.org/wp/56064)\] -- Bugfix: Project selector loses current project switching to "Favorites" selection and then back to "All" \[[#56144](https://community.openproject.org/wp/56144)\] +- Bugfix: Project selector loses current project switching to "Favorites" selection and then back to "All" \[[#56144](https://community.openproject.org/wp/56144)\] - Bugfix: Send invitation button broken when user tries to reinvite themselves \[[#56235](https://community.openproject.org/wp/56235)\] - Bugfix: Breadcrumb and menu structure is inconsistent for Billing administration \[[#56643](https://community.openproject.org/wp/56643)\] -- Bugfix: Meeting timestamp in edit form not the same as in details \[[#56771](https://community.openproject.org/wp/56771)\] - Bugfix: Internal error when trying to change 2FA settings that are enforced through ENV \[[#56821](https://community.openproject.org/wp/56821)\] - Bugfix: FixDeletedDataJournals migration can fail sometimes \[[#56846](https://community.openproject.org/wp/56846)\] - Bugfix: Backlogs and GitHub have unnecessarily nested menu nodes \[[#56920](https://community.openproject.org/wp/56920)\] @@ -155,29 +154,40 @@ In this release, the dynamic bootstrapping of Angular components has been remove - Bugfix: Some status indicators are missing a border \[[#57031](https://community.openproject.org/wp/57031)\] - Bugfix: New status field rendering not vertically aligned correctly in notification center \[[#57033](https://community.openproject.org/wp/57033)\] - Bugfix: DB Migration 9.x to 14.3.0 Fails on Migrating to MyProjectPageToGrid \[[#57036](https://community.openproject.org/wp/57036)\] -- Bugfix: Switching tab in the notification center looses the current filters \[[#57067](https://community.openproject.org/wp/57067)\] -- Bugfix: Nextcloud "recheck connection" checks for GroupFolderApp though AMPF is deactivated \[[#57068](https://community.openproject.org/wp/57068)\] +- Bugfix: Switching tab in the notification center loses the current filters \[[#57067](https://community.openproject.org/wp/57067)\] +- Bugfix: Nextcloud "recheck connection" checks for GroupFolderApp though AMPF is deactivated \[[#57068](https://community.openproject.org/wp/57068)\] - Bugfix: In the calendar widget on the My Page page, meetings are displayed with the wrong time \[[#57078](https://community.openproject.org/wp/57078)\] - Bugfix: Default user avatar is too big for work package table rendering (safari) \[[#57093](https://community.openproject.org/wp/57093)\] - Bugfix: OpenProject Dark Mode: CKEditor using too light colours e.g. for pressed buttons \[[#57103](https://community.openproject.org/wp/57103)\] - Bugfix: Cannot download 2FA backup codes \[[#57146](https://community.openproject.org/wp/57146)\] - Bugfix: OpenProject Dark Mode: diff view for description (and large text fields) not matching \[[#57151](https://community.openproject.org/wp/57151)\] - Bugfix: Project filter in notification center is not correctly highlighted \[[#57154](https://community.openproject.org/wp/57154)\] -- Bugfix: Time and cost report : text of unit cost activity is displayed with html tag \[[#57198](https://community.openproject.org/wp/57198)\] +- Bugfix: Time and cost report : text of unit cost activity is displayed with html tag '<i>' \[[#57198](https://community.openproject.org/wp/57198)\] - Bugfix: Meeting selection in work packages highly confusing \[[#57205](https://community.openproject.org/wp/57205)\] - Bugfix: Attachment headlines are semi-transparent and overlapped by content \[[#57209](https://community.openproject.org/wp/57209)\] -- Bugfix: Webhook doesn't log all errors \[[#57277](https://community.openproject.org/wp/57277)\] +- Bugfix: Webhook doesn't log all errors \[[#57277](https://community.openproject.org/wp/57277)\] - Bugfix: Notifications for date alerts show name of a person \[[#57279](https://community.openproject.org/wp/57279)\] - Bugfix: OpenProject Dark Mode: reiterate hover/active button colour \[[#57282](https://community.openproject.org/wp/57282)\] -- Bugfix: Sorting by custom field has strong impact on performance for the project list \[[#57305](https://community.openproject.org/wp/57305)\] - Bugfix: Robots follow action links unnecessarily \[[#57316](https://community.openproject.org/wp/57316)\] - Bugfix: Some previews in the Lookbook do not work \[[#57322](https://community.openproject.org/wp/57322)\] - Bugfix: Number of meeting participants does not add up \[[#57392](https://community.openproject.org/wp/57392)\] -- Bugfix: 'Buy now' button is misplaced \[[#57394](https://community.openproject.org/wp/57394)\] +- Bugfix: 'Buy now' button is misplaced \[[#57394](https://community.openproject.org/wp/57394)\] +- Bugfix: Color gradient gone in gantt charts for work packages with only start or due date \[[#57395](https://community.openproject.org/wp/57395)\] - Bugfix: Sorting by link custom field causes exception \[[#57401](https://community.openproject.org/wp/57401)\] - Bugfix: Non-working days are not correctly highlighted in the Gantt chart \[[#57414](https://community.openproject.org/wp/57414)\] - Bugfix: If user has LDAP and identity provider connection, my account shows duplicate instructions \[[#57521](https://community.openproject.org/wp/57521)\] -- Feature: Introduce a standardized component for PageHeaders & SubHeaders \[[#52399](https://community.openproject.org/wp/52399)\] +- Bugfix: Code snippet WYSIWYG editor missing from meetings \[[#57525](https://community.openproject.org/wp/57525)\] +- Bugfix: Add to meeting button is chopped of in the work package meetings tab \[[#57545](https://community.openproject.org/wp/57545)\] +- Bugfix: User account without any projects receives a Error 403 not authorized error when accessing the Activities page \[[#57585](https://community.openproject.org/wp/57585)\] +- Bugfix: New mobile split screen scrolls horizontally \[[#57620](https://community.openproject.org/wp/57620)\] +- Bugfix: Comment text editor does not take spacing in account \[[#57642](https://community.openproject.org/wp/57642)\] +- Bugfix: Column ordering broken on project list \[[#57644](https://community.openproject.org/wp/57644)\] +- Bugfix: Deploy status check runs into GitHub API rate limit \[[#57657](https://community.openproject.org/wp/57657)\] +- Bugfix: Error pages not styled correctly \[[#57658](https://community.openproject.org/wp/57658)\] +- Bugfix: Back navigation broken on notifications split view \[[#57682](https://community.openproject.org/wp/57682)\] +- Bugfix: Notification center split screen: tab nav is hidden behind the top banner \[[#57686](https://community.openproject.org/wp/57686)\] +- Bugfix: The wrong next notification is selected when marking one as read \[[#57713](https://community.openproject.org/wp/57713)\] +- Feature: Introduce a standardized component for PageHeaders & SubHeaders \[[#52399](https://community.openproject.org/wp/52399)\] diff --git a/frontend/src/stimulus/controllers/dynamic/admin/roles.controller.ts b/frontend/src/stimulus/controllers/dynamic/admin/roles.controller.ts index 4f1b52e20d49..da3b6092fde1 100644 --- a/frontend/src/stimulus/controllers/dynamic/admin/roles.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/admin/roles.controller.ts @@ -54,8 +54,17 @@ export default class RolesController extends Controller { } globalRoleValueChanged() { - this.memberAttributesTarget.hidden = this.globalRoleValue; - this.memberPermissionsTarget.hidden = this.globalRoleValue; - this.globalPermissionsTarget.hidden = !this.globalRoleValue; + this.toggleEnabled(this.memberAttributesTarget, !this.globalRoleValue); + this.toggleEnabled(this.memberPermissionsTarget, !this.globalRoleValue); + this.toggleEnabled(this.globalPermissionsTarget, this.globalRoleValue); + } + + toggleEnabled(target:HTMLElement, enabled:boolean) { + target.hidden = !enabled; + target + .querySelectorAll('input,select') + .forEach((input:HTMLInputElement) => { + input.disabled = !enabled; + }); } } diff --git a/modules/budgets/app/components/budgets/actual_labor_budget_items_component.rb b/modules/budgets/app/components/budgets/actual_labor_budget_items_component.rb index 08c79608ace6..e449c10c873b 100644 --- a/modules/budgets/app/components/budgets/actual_labor_budget_items_component.rb +++ b/modules/budgets/app/components/budgets/actual_labor_budget_items_component.rb @@ -58,7 +58,7 @@ def entry_hours(work_package, entry) end def entry_user(entry) - helpers.avatar(entry.principal, hide_name: false, size: :mini) + helpers.avatar(entry.user, hide_name: false, size: :mini) end def entry_costs(entry) diff --git a/modules/budgets/spec/components/budgets/actual_labor_budget_items_component_spec.rb b/modules/budgets/spec/components/budgets/actual_labor_budget_items_component_spec.rb new file mode 100644 index 000000000000..e371a9e801a9 --- /dev/null +++ b/modules/budgets/spec/components/budgets/actual_labor_budget_items_component_spec.rb @@ -0,0 +1,64 @@ +#-- 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 "rails_helper" + +RSpec.describe Budgets::ActualLaborBudgetItemsComponent, type: :component do + let(:project) do + create( + :project, + enabled_module_names: %i[costs work_package_tracking budgets], + members: { + user => member_role + } + ) + end + + let(:member_role) { create(:project_role, name: "Member", permissions: [:view_time_entries]) } + let(:budget) { create :budget, project: } + let(:work_package) { create :work_package, project:, budget:, author: user } + let(:user) { create :user } + + subject do + described_class.new budget:, project: + end + + before do + login_as user + end + + describe "with time entries" do + let!(:time_entry) { create :time_entry, work_package:, user: } + + it "renders the link to the time entry's user's avatar" do + rendered = render_inline(subject) + + expect(rendered).to have_css("opce-principal[data-title='\"#{user.name}\"']") + end + end +end diff --git a/script/docs/check_links b/script/docs/check_links index 9bb54e765ced..553eab0878a7 100755 --- a/script/docs/check_links +++ b/script/docs/check_links @@ -141,6 +141,7 @@ class DocsChecker @docs.push( { path: "#{@root_path}/api/v3/spec.json", anchors: [], links: [] }, { path: "#{@root_path}/api/v3/spec.yml", anchors: [], links: [] }, + { path: "#{@root_path}/installation-and-operations/installation/docker-compose", anchors: [], links: [] }, { path: "#{@root_path}/installation-and-operations/installation/helm-chart", anchors: [], links: [] }, { path: "#{@root_path}/development/translate-openproject/fair-language", anchors: [], links: [] } ) diff --git a/spec/features/global_roles/global_role_crud_spec.rb b/spec/features/global_roles/global_role_crud_spec.rb index 7fbcb68b527f..0731870ec1d1 100644 --- a/spec/features/global_roles/global_role_crud_spec.rb +++ b/spec/features/global_roles/global_role_crud_spec.rb @@ -62,4 +62,18 @@ # Then I should see "Successful creation." expect(page).to have_text "Successful creation." end + + context "with a non-member using dependent project permissions" do + let!(:non_member) { create(:non_member, permissions: %i[view_project_attributes]) } + + it "can still create it (Regression #57906)" do + # When I go to the new page of "Role" + visit new_role_path + check "Global role" + fill_in "Name", with: "Manager" + click_on "Create" + # Then I should see "Successful creation." + expect(page).to have_text "Successful creation." + end + end end