Eric Schubert
a1f622b271
[ #75749 ] fix test selector again
2026-06-12 11:21:33 +02:00
Eric Schubert
e37d910c98
[ #75749 ] fixed ckeditor page object
2026-06-09 15:36:07 +02:00
Henriette Darge
396de9362f
[74625] Make project hierarchy collapsable in the global project selector ( #23137 )
...
* Use new async FilterableTreeView for global project selector
* Remove replaced angular component
* Fine tune sorting and expansion state of the new project selector
* Update primer to 0.86.1
* Add workspace information and filter results hierarchy information to project selector
* Include review feedback: Harmonize I18n keys, fix visible scope, use guarded local storage
* Add a turboFrame in the project select overlay to only load the projects when it is actually opened
* Restore BIM tab styles which were broken for a while already but the new project selector changes made it so bad that the test broke because the plus icon was overlapping the checkbox
* Clarify spec expectation
2026-06-08 08:14:47 +02:00
ulferts
6ab4d02059
attempt to fix flickering activity spec
...
rspec ./spec/features/activities/work_package/activities_spec.rb:678
The attempt is to have the frontend wait for the turbo stream response rather than a fixed timeout.
The removed wait_for seems to be non-functional.
2026-06-04 16:43:50 +02:00
Oliver Günther
11dc79a74d
Merge remote-tracking branch 'origin/release/17.5' into dev
2026-06-02 16:22:39 +02:00
Behrokh Satarnejad
74183943d5
Use test selectors instead of text selector
2026-06-01 18:58:47 +02:00
OpenProject Actions CI
3e02e2863f
Merge branch 'release/17.5' into dev
2026-05-28 12:18:34 +00:00
Henriette Darge
c74076a173
Merge pull request #23373 from opf/bug/64359-work-package-configuration-dialog-s-highlighting-tab-has-no-space-between-radio-buttons-and-labels
...
[64359] Work package configuration dialog's highlighting tab has no space between radio buttons and labels
2026-05-28 14:13:29 +02:00
OpenProject Actions CI
49b802ca02
Merge branch 'release/17.5' into dev
2026-05-28 08:51:09 +00:00
Oliver Günther
b0905e35b7
Merge pull request #23392 from opf/fix/ldap-seeder-aliases
...
Fix LDAP seeder not using env aliases and underscores
2026-05-28 08:56:14 +02:00
Oliver Günther
a058f227f3
Add retry block on button save click
2026-05-28 08:32:49 +02:00
Oliver Günther
a1505dc0f5
Merge remote-tracking branch 'origin/release/17.5' into dev
2026-05-27 09:58:01 +02:00
Oliver Günther
46a4dbd1e6
Fix highlighting spec flakyness
...
The failing spec in this run
https://github.com/opf/openproject/actions/runs/26492229079/job/78012301717?pr=23371
was caused by the dialog not being open in the right tab.
Adding an expectation to it hopefully fixes it
2026-05-27 08:53:53 +02:00
Alexander Brandon Coles
c776be17cc
Make WP query history filter checks idempotent
...
Turbo can restore the query filter pane as either open or closed during
browser history traversal. Use an idempotent helper before asserting
restored filters so the spec checks the query state instead of depending
on the current pane visibility.
2026-05-26 23:17:42 +02:00
David F
88a29a0aff
Turn checkbox filters into toggle switch. wp/74380
2026-05-26 08:14:56 +02:00
David F
683bda80b4
Clean up some CSS and JS. wp/74380
2026-05-26 08:14:56 +02:00
David F
8403bb74f2
Generalize datetime helper for advanced filters. wp/74380
2026-05-26 08:14:56 +02:00
David F
0f1daad3ee
Fix advanced filters specs with date range picker. wp/74380
2026-05-26 08:14:56 +02:00
David F
527379c9a2
Fix most tests for advanced filters. wp/74380
2026-05-26 08:14:56 +02:00
David F
fe39ccec97
Improve input group markup for advanced filters. wp/74380
2026-05-26 08:14:56 +02:00
David F
1ce489a2e0
Turn partials into form components. wp/74380
2026-05-26 08:14:56 +02:00
Behrokh Satarnejad
d924c255cf
[69524] Primerize Types form configuration page ( #22854 )
...
* Create the section component
* Create the form configuration component
* Create a controller
* change form template
* Use primer dialog for reset to defaults button
* show WP configuration modal while creating a related WPs table
* Fix the drag and drop functionality without save button
* Fix renaming functionality
* Use generic drag and drop in form configuration and move all client side action handling to server side
* Fix embedded query form configuration regressions
* Add data test selectors to all elements that we used for test
* update the current tests with the new implementations and design
* Add new tests for new controller of sections and rows
* WP quesry row should only have edit quesry action
* Update transformer spec regarding the new changes
* Fix the failing test in reset form configuration and some tests for actions
* Fix rubocop errors
* Fix eslint errors
* Add spec for removing a section
* Use condensed border boxes
* fix failing specs
* fix failing specs
* Switch the buttons in form configuration component
* Create the section at the top of the list
* Instead of using UUID, use the name of the group as the key
* Add missing check for EE for section actions
* Remove angular components
* Use action list instead of a border box for left side panel
* Reduce the margin between the right side panel and sub header, add some space to the query table left side, span to the whole available space
* Show validation errors while updating and creating a section
* Use a danger dialog for reset to default
* Add a confirmation for removing the section
* Align items in the row
* Use test_selector instead of data-test-selector
* Create move_action in rb file
* Create move_action in rb file
* Simplify section component
* Simplify form configuration component
* Remove dialog for rename and delete section on missing EE
* Create a component for inactive attribute list
* Create a separate component for reset dialog
* Remove EE feedback dialog
* Remove form partial which is not needed anymore
* Remove unused js strings
* Update using update_via_turbo
* Remove form configuration rows controller
* Create a blanksalte component
* Fix failing specs
* Fix failing specs
* Fix failing specs
* Remove unused translation strings
* Align form configuration section routes with actual create flow
* Change section to group
* Change section to group in services and controllers
* Change section to group in en.yml
* Fix rubocop errors
* Move the query group persistence assertion from the JS feature spec
to the synchronous form configuration groups controller spec.
* Reuse query service result in embedded query build
* Keep inactive attribute filter after turbo list refresh
* Extract form configuration group edit state into form model
* Fix the failing test
* Potential fix for pull request finding 'CodeQL / Potentially uninitialized local variable'
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
* Rename inactive attribute component inputs
* Refine reset dialog wording for form configuration
* Use direct Turbo action for adding attribute groups
* Reuse generic filter-list controller for inactive attributes
* Remove focus impelementation in ts
* Group form configuration Stimulus controllers under one namespace
* Use turbo request service in form configuration controller
* Clarify legacy group key normalization in form config contract
* Replace inactive attribute list wrapper via turbo stream
* Extract duplicate untitled group key generation into Type::FormGroup.next_untitled_key
* Auto-generate untitled group name on create instead of returning an error
* Avoid mixed return types in form config group create service
* Extract shared form configuration group service behavior into concern
* Fix spacing for the last group and italic font for the placeholder rows
* Replace Angular no-results component with Primer Banner on form configuration page
* Hide dropped element immediately to prevent flickering before Turbo Stream response
* Reload type before rendering create error to prevent duplicate groups
* Await service initialization before use to prevent potential race condition
* Replace sleep calls with deterministic waits in form configuration spec
* Handle malformed JSON and invalid query errors gracefully in form configuration update
* Make query group label a clickable button and empty group hint italic
---------
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-05-13 12:56:18 +02:00
ulferts
eaf26e4918
attempt to fix flickering activities spec
...
rspec ./spec/features/activities/work_package/activities_spec.rb:678
2026-05-08 11:14:03 +02:00
Oliver Günther
5bf27bb868
Merge remote-tracking branch 'origin/release/17.4' into dev
2026-05-05 12:29:43 +02:00
Oliver Günther
e9702547af
Retry CKEditor setData event in case it's not initialized yet ( #23059 )
...
* Retry CKEditor setData event in case it's not initialized yet
set_markdown dispatches a op:ckeditor:setData custom event immediately after .ck-content appeared in the DOM.
But the eventlistener for this event is registered inside an async .then() callback in ckeditor-setup.service.ts.
The event listener may not yet be registered at that point, causing inserted text to "vanish" and not be saved at all
* Use updated dataset attribute to know it was updated without checking text
2026-05-05 12:28:35 +02:00
Tomas Hykel
db6f4734ad
fix: Remove flakiness from a WP activities spec
2026-04-27 21:40:04 +02:00
Oliver Günther
d29f0bb7b3
Adapt styles and class expectations
2026-04-27 13:53:03 +02:00
Alexander Brandon Coles
4e99a964d6
Merge branch 'dev' into code-maintenance/73798-remove-scrum_projects-feature-flag
2026-04-20 08:40:52 +01:00
Oliver Günther
99e515c034
Try to fix ./modules/my_page/spec/features/my/my_page_spec.rb:103
2026-04-20 07:34:47 +02:00
Oliver Günther
2898a1d0ff
Delete dialog primer
2026-04-19 21:10:41 +02:00
Alexander Brandon Coles
712fdbceba
Harden feature test support helpers
...
Stabilize shared ng-select interactions for Cuprite and reuse open
dropdowns safely in modal-based flows. Also keep filter clearing
safe when no value is selected and refresh the My Page drop target
after drag-induced DOM updates.
2026-04-17 10:15:39 +01:00
Alexander Brandon Coles
8d72592230
Improve sprint filter support in WP filter helper
...
Add `clear_filter_value` to clear an ng-select filter's current
selection without removing the filter row, allowing a new value
to be set in place.
Refactor `insert_autocomplete_item` to accept a filter `id` string
rather than a pre-captured element, so the ng-select node is
re-queried on each call. This avoids stale element references
after `clear_filter_value` causes the DOM to re-render.
2026-04-17 09:39:52 +01:00
Alexander Brandon Coles
ccccead89f
Merge branch 'dev' into merge-release/17.3-20260411112919
...
# Conflicts:
# config/locales/crowdin/af.yml
# config/locales/crowdin/ar.yml
# config/locales/crowdin/az.yml
# config/locales/crowdin/be.yml
# config/locales/crowdin/bg.yml
# config/locales/crowdin/ca.yml
# config/locales/crowdin/ckb-IR.yml
# config/locales/crowdin/cs.yml
# config/locales/crowdin/da.yml
# config/locales/crowdin/de.yml
# config/locales/crowdin/el.yml
# config/locales/crowdin/eo.yml
# config/locales/crowdin/es.yml
# config/locales/crowdin/et.yml
# config/locales/crowdin/eu.yml
# config/locales/crowdin/fa.yml
# config/locales/crowdin/fi.yml
# config/locales/crowdin/fil.yml
# config/locales/crowdin/fr.yml
# config/locales/crowdin/he.yml
# config/locales/crowdin/hi.yml
# config/locales/crowdin/hr.yml
# config/locales/crowdin/hu.yml
# config/locales/crowdin/id.yml
# config/locales/crowdin/it.yml
# config/locales/crowdin/ja.yml
# config/locales/crowdin/js-af.yml
# config/locales/crowdin/js-ar.yml
# config/locales/crowdin/js-az.yml
# config/locales/crowdin/js-be.yml
# config/locales/crowdin/js-bg.yml
# config/locales/crowdin/js-ca.yml
# config/locales/crowdin/js-ckb-IR.yml
# config/locales/crowdin/js-cs.yml
# config/locales/crowdin/js-da.yml
# config/locales/crowdin/js-de.yml
# config/locales/crowdin/js-el.yml
# config/locales/crowdin/js-eo.yml
# config/locales/crowdin/js-es.yml
# config/locales/crowdin/js-et.yml
# config/locales/crowdin/js-eu.yml
# config/locales/crowdin/js-fa.yml
# config/locales/crowdin/js-fi.yml
# config/locales/crowdin/js-fil.yml
# config/locales/crowdin/js-fr.yml
# config/locales/crowdin/js-he.yml
# config/locales/crowdin/js-hi.yml
# config/locales/crowdin/js-hr.yml
# config/locales/crowdin/js-hu.yml
# config/locales/crowdin/js-id.yml
# config/locales/crowdin/js-it.yml
# config/locales/crowdin/js-ja.yml
# config/locales/crowdin/js-ka.yml
# config/locales/crowdin/js-kk.yml
# config/locales/crowdin/js-ko.yml
# config/locales/crowdin/js-lt.yml
# config/locales/crowdin/js-lv.yml
# config/locales/crowdin/js-mn.yml
# config/locales/crowdin/js-ms.yml
# config/locales/crowdin/js-ne.yml
# config/locales/crowdin/js-nl.yml
# config/locales/crowdin/js-no.yml
# config/locales/crowdin/js-pl.yml
# config/locales/crowdin/js-pt-BR.yml
# config/locales/crowdin/js-pt-PT.yml
# config/locales/crowdin/js-ro.yml
# config/locales/crowdin/js-ru.yml
# config/locales/crowdin/js-rw.yml
# config/locales/crowdin/js-si.yml
# config/locales/crowdin/js-sk.yml
# config/locales/crowdin/js-sl.yml
# config/locales/crowdin/js-sr.yml
# config/locales/crowdin/js-sv.yml
# config/locales/crowdin/js-th.yml
# config/locales/crowdin/js-tr.yml
# config/locales/crowdin/js-uk.yml
# config/locales/crowdin/js-uz.yml
# config/locales/crowdin/js-vi.yml
# config/locales/crowdin/js-zh-CN.yml
# config/locales/crowdin/js-zh-TW.yml
# config/locales/crowdin/ka.yml
# config/locales/crowdin/kk.yml
# config/locales/crowdin/ko.yml
# config/locales/crowdin/lt.yml
# config/locales/crowdin/lv.yml
# config/locales/crowdin/mn.yml
# config/locales/crowdin/ms.yml
# config/locales/crowdin/ne.yml
# config/locales/crowdin/nl.yml
# config/locales/crowdin/no.yml
# config/locales/crowdin/pl.yml
# config/locales/crowdin/pt-BR.yml
# config/locales/crowdin/pt-PT.yml
# config/locales/crowdin/ro.yml
# config/locales/crowdin/ru.yml
# config/locales/crowdin/rw.yml
# config/locales/crowdin/si.yml
# config/locales/crowdin/sk.yml
# config/locales/crowdin/sl.yml
# config/locales/crowdin/sr.yml
# config/locales/crowdin/sv.yml
# config/locales/crowdin/th.yml
# config/locales/crowdin/tr.yml
# config/locales/crowdin/uk.yml
# config/locales/crowdin/uz.yml
# config/locales/crowdin/vi.yml
# config/locales/crowdin/zh-CN.yml
# config/locales/crowdin/zh-TW.yml
# modules/backlogs/config/locales/crowdin/af.yml
# modules/backlogs/config/locales/crowdin/ar.yml
# modules/backlogs/config/locales/crowdin/az.yml
# modules/backlogs/config/locales/crowdin/be.yml
# modules/backlogs/config/locales/crowdin/bg.yml
# modules/backlogs/config/locales/crowdin/ca.yml
# modules/backlogs/config/locales/crowdin/ckb-IR.yml
# modules/backlogs/config/locales/crowdin/cs.yml
# modules/backlogs/config/locales/crowdin/da.yml
# modules/backlogs/config/locales/crowdin/de.yml
# modules/backlogs/config/locales/crowdin/el.yml
# modules/backlogs/config/locales/crowdin/eo.yml
# modules/backlogs/config/locales/crowdin/es.yml
# modules/backlogs/config/locales/crowdin/et.yml
# modules/backlogs/config/locales/crowdin/eu.yml
# modules/backlogs/config/locales/crowdin/fa.yml
# modules/backlogs/config/locales/crowdin/fi.yml
# modules/backlogs/config/locales/crowdin/fil.yml
# modules/backlogs/config/locales/crowdin/fr.yml
# modules/backlogs/config/locales/crowdin/he.yml
# modules/backlogs/config/locales/crowdin/hi.yml
# modules/backlogs/config/locales/crowdin/hr.yml
# modules/backlogs/config/locales/crowdin/hu.yml
# modules/backlogs/config/locales/crowdin/id.yml
# modules/backlogs/config/locales/crowdin/it.yml
# modules/backlogs/config/locales/crowdin/ja.yml
# modules/backlogs/config/locales/crowdin/ka.yml
# modules/backlogs/config/locales/crowdin/kk.yml
# modules/backlogs/config/locales/crowdin/ko.yml
# modules/backlogs/config/locales/crowdin/lt.yml
# modules/backlogs/config/locales/crowdin/lv.yml
# modules/backlogs/config/locales/crowdin/mn.yml
# modules/backlogs/config/locales/crowdin/ms.yml
# modules/backlogs/config/locales/crowdin/ne.yml
# modules/backlogs/config/locales/crowdin/nl.yml
# modules/backlogs/config/locales/crowdin/no.yml
# modules/backlogs/config/locales/crowdin/pl.yml
# modules/backlogs/config/locales/crowdin/pt-BR.yml
# modules/backlogs/config/locales/crowdin/pt-PT.yml
# modules/backlogs/config/locales/crowdin/ro.yml
# modules/backlogs/config/locales/crowdin/ru.yml
# modules/backlogs/config/locales/crowdin/rw.yml
# modules/backlogs/config/locales/crowdin/si.yml
# modules/backlogs/config/locales/crowdin/sk.yml
# modules/backlogs/config/locales/crowdin/sl.yml
# modules/backlogs/config/locales/crowdin/sr.yml
# modules/backlogs/config/locales/crowdin/sv.yml
# modules/backlogs/config/locales/crowdin/th.yml
# modules/backlogs/config/locales/crowdin/tr.yml
# modules/backlogs/config/locales/crowdin/uk.yml
# modules/backlogs/config/locales/crowdin/uz.yml
# modules/backlogs/config/locales/crowdin/vi.yml
# modules/backlogs/config/locales/crowdin/zh-CN.yml
# modules/backlogs/config/locales/crowdin/zh-TW.yml
# modules/bim/config/locales/crowdin/fr.yml
# modules/budgets/config/locales/crowdin/cs.yml
# modules/costs/config/locales/crowdin/ja.yml
# modules/documents/config/locales/crowdin/af.yml
# modules/documents/config/locales/crowdin/ar.yml
# modules/documents/config/locales/crowdin/az.yml
# modules/documents/config/locales/crowdin/be.yml
# modules/documents/config/locales/crowdin/bg.yml
# modules/documents/config/locales/crowdin/ca.yml
# modules/documents/config/locales/crowdin/ckb-IR.yml
# modules/documents/config/locales/crowdin/cs.yml
# modules/documents/config/locales/crowdin/da.yml
# modules/documents/config/locales/crowdin/de.yml
# modules/documents/config/locales/crowdin/el.yml
# modules/documents/config/locales/crowdin/eo.yml
# modules/documents/config/locales/crowdin/es.yml
# modules/documents/config/locales/crowdin/et.yml
# modules/documents/config/locales/crowdin/eu.yml
# modules/documents/config/locales/crowdin/fa.yml
# modules/documents/config/locales/crowdin/fi.yml
# modules/documents/config/locales/crowdin/fil.yml
# modules/documents/config/locales/crowdin/fr.yml
# modules/documents/config/locales/crowdin/he.yml
# modules/documents/config/locales/crowdin/hi.yml
# modules/documents/config/locales/crowdin/hr.yml
# modules/documents/config/locales/crowdin/hu.yml
# modules/documents/config/locales/crowdin/id.yml
# modules/documents/config/locales/crowdin/it.yml
# modules/documents/config/locales/crowdin/ja.yml
# modules/documents/config/locales/crowdin/ka.yml
# modules/documents/config/locales/crowdin/kk.yml
# modules/documents/config/locales/crowdin/ko.yml
# modules/documents/config/locales/crowdin/lt.yml
# modules/documents/config/locales/crowdin/lv.yml
# modules/documents/config/locales/crowdin/mn.yml
# modules/documents/config/locales/crowdin/ms.yml
# modules/documents/config/locales/crowdin/ne.yml
# modules/documents/config/locales/crowdin/nl.yml
# modules/documents/config/locales/crowdin/no.yml
# modules/documents/config/locales/crowdin/pl.yml
# modules/documents/config/locales/crowdin/pt-BR.yml
# modules/documents/config/locales/crowdin/pt-PT.yml
# modules/documents/config/locales/crowdin/ro.yml
# modules/documents/config/locales/crowdin/ru.yml
# modules/documents/config/locales/crowdin/rw.yml
# modules/documents/config/locales/crowdin/si.yml
# modules/documents/config/locales/crowdin/sk.yml
# modules/documents/config/locales/crowdin/sl.yml
# modules/documents/config/locales/crowdin/sr.yml
# modules/documents/config/locales/crowdin/sv.yml
# modules/documents/config/locales/crowdin/th.yml
# modules/documents/config/locales/crowdin/tr.yml
# modules/documents/config/locales/crowdin/uk.yml
# modules/documents/config/locales/crowdin/uz.yml
# modules/documents/config/locales/crowdin/vi.yml
# modules/documents/config/locales/crowdin/zh-CN.yml
# modules/documents/config/locales/crowdin/zh-TW.yml
# modules/gitlab_integration/config/locales/crowdin/af.yml
# modules/gitlab_integration/config/locales/crowdin/ar.yml
# modules/gitlab_integration/config/locales/crowdin/az.yml
# modules/gitlab_integration/config/locales/crowdin/be.yml
# modules/gitlab_integration/config/locales/crowdin/bg.yml
# modules/gitlab_integration/config/locales/crowdin/ca.yml
# modules/gitlab_integration/config/locales/crowdin/ckb-IR.yml
# modules/gitlab_integration/config/locales/crowdin/cs.yml
# modules/gitlab_integration/config/locales/crowdin/da.yml
# modules/gitlab_integration/config/locales/crowdin/de.yml
# modules/gitlab_integration/config/locales/crowdin/el.yml
# modules/gitlab_integration/config/locales/crowdin/eo.yml
# modules/gitlab_integration/config/locales/crowdin/es.yml
# modules/gitlab_integration/config/locales/crowdin/et.yml
# modules/gitlab_integration/config/locales/crowdin/eu.yml
# modules/gitlab_integration/config/locales/crowdin/fa.yml
# modules/gitlab_integration/config/locales/crowdin/fi.yml
# modules/gitlab_integration/config/locales/crowdin/fil.yml
# modules/gitlab_integration/config/locales/crowdin/fr.yml
# modules/gitlab_integration/config/locales/crowdin/he.yml
# modules/gitlab_integration/config/locales/crowdin/hi.yml
# modules/gitlab_integration/config/locales/crowdin/hr.yml
# modules/gitlab_integration/config/locales/crowdin/hu.yml
# modules/gitlab_integration/config/locales/crowdin/id.yml
# modules/gitlab_integration/config/locales/crowdin/it.yml
# modules/gitlab_integration/config/locales/crowdin/ja.yml
# modules/gitlab_integration/config/locales/crowdin/ka.yml
# modules/gitlab_integration/config/locales/crowdin/kk.yml
# modules/gitlab_integration/config/locales/crowdin/ko.yml
# modules/gitlab_integration/config/locales/crowdin/lt.yml
# modules/gitlab_integration/config/locales/crowdin/lv.yml
# modules/gitlab_integration/config/locales/crowdin/mn.yml
# modules/gitlab_integration/config/locales/crowdin/ms.yml
# modules/gitlab_integration/config/locales/crowdin/ne.yml
# modules/gitlab_integration/config/locales/crowdin/nl.yml
# modules/gitlab_integration/config/locales/crowdin/no.yml
# modules/gitlab_integration/config/locales/crowdin/pl.yml
# modules/gitlab_integration/config/locales/crowdin/pt-BR.yml
# modules/gitlab_integration/config/locales/crowdin/pt-PT.yml
# modules/gitlab_integration/config/locales/crowdin/ro.yml
# modules/gitlab_integration/config/locales/crowdin/ru.yml
# modules/gitlab_integration/config/locales/crowdin/rw.yml
# modules/gitlab_integration/config/locales/crowdin/si.yml
# modules/gitlab_integration/config/locales/crowdin/sk.yml
# modules/gitlab_integration/config/locales/crowdin/sl.yml
# modules/gitlab_integration/config/locales/crowdin/sr.yml
# modules/gitlab_integration/config/locales/crowdin/sv.yml
# modules/gitlab_integration/config/locales/crowdin/th.yml
# modules/gitlab_integration/config/locales/crowdin/tr.yml
# modules/gitlab_integration/config/locales/crowdin/uk.yml
# modules/gitlab_integration/config/locales/crowdin/uz.yml
# modules/gitlab_integration/config/locales/crowdin/vi.yml
# modules/gitlab_integration/config/locales/crowdin/zh-CN.yml
# modules/gitlab_integration/config/locales/crowdin/zh-TW.yml
# modules/ldap_groups/config/locales/crowdin/af.yml
# modules/ldap_groups/config/locales/crowdin/ar.yml
# modules/ldap_groups/config/locales/crowdin/az.yml
# modules/ldap_groups/config/locales/crowdin/be.yml
# modules/ldap_groups/config/locales/crowdin/bg.yml
# modules/ldap_groups/config/locales/crowdin/ca.yml
# modules/ldap_groups/config/locales/crowdin/ckb-IR.yml
# modules/ldap_groups/config/locales/crowdin/cs.yml
# modules/ldap_groups/config/locales/crowdin/da.yml
# modules/ldap_groups/config/locales/crowdin/de.yml
# modules/ldap_groups/config/locales/crowdin/el.yml
# modules/ldap_groups/config/locales/crowdin/eo.yml
# modules/ldap_groups/config/locales/crowdin/es.yml
# modules/ldap_groups/config/locales/crowdin/et.yml
# modules/ldap_groups/config/locales/crowdin/eu.yml
# modules/ldap_groups/config/locales/crowdin/fa.yml
# modules/ldap_groups/config/locales/crowdin/fi.yml
# modules/ldap_groups/config/locales/crowdin/fil.yml
# modules/ldap_groups/config/locales/crowdin/fr.yml
# modules/ldap_groups/config/locales/crowdin/he.yml
# modules/ldap_groups/config/locales/crowdin/hi.yml
# modules/ldap_groups/config/locales/crowdin/hr.yml
# modules/ldap_groups/config/locales/crowdin/hu.yml
# modules/ldap_groups/config/locales/crowdin/id.yml
# modules/ldap_groups/config/locales/crowdin/it.yml
# modules/ldap_groups/config/locales/crowdin/ja.yml
# modules/ldap_groups/config/locales/crowdin/ka.yml
# modules/ldap_groups/config/locales/crowdin/kk.yml
# modules/ldap_groups/config/locales/crowdin/ko.yml
# modules/ldap_groups/config/locales/crowdin/lt.yml
# modules/ldap_groups/config/locales/crowdin/lv.yml
# modules/ldap_groups/config/locales/crowdin/mn.yml
# modules/ldap_groups/config/locales/crowdin/ms.yml
# modules/ldap_groups/config/locales/crowdin/ne.yml
# modules/ldap_groups/config/locales/crowdin/nl.yml
# modules/ldap_groups/config/locales/crowdin/no.yml
# modules/ldap_groups/config/locales/crowdin/pl.yml
# modules/ldap_groups/config/locales/crowdin/pt-BR.yml
# modules/ldap_groups/config/locales/crowdin/pt-PT.yml
# modules/ldap_groups/config/locales/crowdin/ro.yml
# modules/ldap_groups/config/locales/crowdin/ru.yml
# modules/ldap_groups/config/locales/crowdin/rw.yml
# modules/ldap_groups/config/locales/crowdin/si.yml
# modules/ldap_groups/config/locales/crowdin/sk.yml
# modules/ldap_groups/config/locales/crowdin/sl.yml
# modules/ldap_groups/config/locales/crowdin/sr.yml
# modules/ldap_groups/config/locales/crowdin/sv.yml
# modules/ldap_groups/config/locales/crowdin/th.yml
# modules/ldap_groups/config/locales/crowdin/tr.yml
# modules/ldap_groups/config/locales/crowdin/uk.yml
# modules/ldap_groups/config/locales/crowdin/uz.yml
# modules/ldap_groups/config/locales/crowdin/vi.yml
# modules/ldap_groups/config/locales/crowdin/zh-CN.yml
# modules/ldap_groups/config/locales/crowdin/zh-TW.yml
# modules/meeting/config/locales/crowdin/af.yml
# modules/meeting/config/locales/crowdin/ar.yml
# modules/meeting/config/locales/crowdin/az.yml
# modules/meeting/config/locales/crowdin/be.yml
# modules/meeting/config/locales/crowdin/bg.yml
# modules/meeting/config/locales/crowdin/ca.yml
# modules/meeting/config/locales/crowdin/ckb-IR.yml
# modules/meeting/config/locales/crowdin/cs.yml
# modules/meeting/config/locales/crowdin/da.yml
# modules/meeting/config/locales/crowdin/de.yml
# modules/meeting/config/locales/crowdin/el.yml
# modules/meeting/config/locales/crowdin/eo.yml
# modules/meeting/config/locales/crowdin/es.yml
# modules/meeting/config/locales/crowdin/et.yml
# modules/meeting/config/locales/crowdin/eu.yml
# modules/meeting/config/locales/crowdin/fa.yml
# modules/meeting/config/locales/crowdin/fi.yml
# modules/meeting/config/locales/crowdin/fil.yml
# modules/meeting/config/locales/crowdin/fr.yml
# modules/meeting/config/locales/crowdin/he.yml
# modules/meeting/config/locales/crowdin/hi.yml
# modules/meeting/config/locales/crowdin/hr.yml
# modules/meeting/config/locales/crowdin/hu.yml
# modules/meeting/config/locales/crowdin/id.yml
# modules/meeting/config/locales/crowdin/it.yml
# modules/meeting/config/locales/crowdin/ja.yml
# modules/meeting/config/locales/crowdin/ka.yml
# modules/meeting/config/locales/crowdin/kk.yml
# modules/meeting/config/locales/crowdin/ko.yml
# modules/meeting/config/locales/crowdin/lt.yml
# modules/meeting/config/locales/crowdin/lv.yml
# modules/meeting/config/locales/crowdin/mn.yml
# modules/meeting/config/locales/crowdin/ms.yml
# modules/meeting/config/locales/crowdin/ne.yml
# modules/meeting/config/locales/crowdin/nl.yml
# modules/meeting/config/locales/crowdin/no.yml
# modules/meeting/config/locales/crowdin/pl.yml
# modules/meeting/config/locales/crowdin/pt-BR.yml
# modules/meeting/config/locales/crowdin/pt-PT.yml
# modules/meeting/config/locales/crowdin/ro.yml
# modules/meeting/config/locales/crowdin/ru.yml
# modules/meeting/config/locales/crowdin/rw.yml
# modules/meeting/config/locales/crowdin/si.yml
# modules/meeting/config/locales/crowdin/sk.yml
# modules/meeting/config/locales/crowdin/sl.yml
# modules/meeting/config/locales/crowdin/sr.yml
# modules/meeting/config/locales/crowdin/sv.yml
# modules/meeting/config/locales/crowdin/th.yml
# modules/meeting/config/locales/crowdin/tr.yml
# modules/meeting/config/locales/crowdin/uk.yml
# modules/meeting/config/locales/crowdin/uz.yml
# modules/meeting/config/locales/crowdin/vi.yml
# modules/meeting/config/locales/crowdin/zh-CN.yml
# modules/meeting/config/locales/crowdin/zh-TW.yml
# modules/openid_connect/config/locales/crowdin/af.yml
# modules/openid_connect/config/locales/crowdin/ar.yml
# modules/openid_connect/config/locales/crowdin/az.yml
# modules/openid_connect/config/locales/crowdin/be.yml
# modules/openid_connect/config/locales/crowdin/bg.yml
# modules/openid_connect/config/locales/crowdin/ca.yml
# modules/openid_connect/config/locales/crowdin/ckb-IR.yml
# modules/openid_connect/config/locales/crowdin/cs.yml
# modules/openid_connect/config/locales/crowdin/da.yml
# modules/openid_connect/config/locales/crowdin/de.yml
# modules/openid_connect/config/locales/crowdin/el.yml
# modules/openid_connect/config/locales/crowdin/eo.yml
# modules/openid_connect/config/locales/crowdin/es.yml
# modules/openid_connect/config/locales/crowdin/et.yml
# modules/openid_connect/config/locales/crowdin/eu.yml
# modules/openid_connect/config/locales/crowdin/fa.yml
# modules/openid_connect/config/locales/crowdin/fi.yml
# modules/openid_connect/config/locales/crowdin/fil.yml
# modules/openid_connect/config/locales/crowdin/fr.yml
# modules/openid_connect/config/locales/crowdin/he.yml
# modules/openid_connect/config/locales/crowdin/hi.yml
# modules/openid_connect/config/locales/crowdin/hr.yml
# modules/openid_connect/config/locales/crowdin/hu.yml
# modules/openid_connect/config/locales/crowdin/id.yml
# modules/openid_connect/config/locales/crowdin/it.yml
# modules/openid_connect/config/locales/crowdin/ja.yml
# modules/openid_connect/config/locales/crowdin/ka.yml
# modules/openid_connect/config/locales/crowdin/kk.yml
# modules/openid_connect/config/locales/crowdin/ko.yml
# modules/openid_connect/config/locales/crowdin/lt.yml
# modules/openid_connect/config/locales/crowdin/lv.yml
# modules/openid_connect/config/locales/crowdin/mn.yml
# modules/openid_connect/config/locales/crowdin/ms.yml
# modules/openid_connect/config/locales/crowdin/ne.yml
# modules/openid_connect/config/locales/crowdin/nl.yml
# modules/openid_connect/config/locales/crowdin/no.yml
# modules/openid_connect/config/locales/crowdin/pl.yml
# modules/openid_connect/config/locales/crowdin/pt-BR.yml
# modules/openid_connect/config/locales/crowdin/pt-PT.yml
# modules/openid_connect/config/locales/crowdin/ro.yml
# modules/openid_connect/config/locales/crowdin/ru.yml
# modules/openid_connect/config/locales/crowdin/rw.yml
# modules/openid_connect/config/locales/crowdin/si.yml
# modules/openid_connect/config/locales/crowdin/sk.yml
# modules/openid_connect/config/locales/crowdin/sl.yml
# modules/openid_connect/config/locales/crowdin/sr.yml
# modules/openid_connect/config/locales/crowdin/sv.yml
# modules/openid_connect/config/locales/crowdin/th.yml
# modules/openid_connect/config/locales/crowdin/tr.yml
# modules/openid_connect/config/locales/crowdin/uk.yml
# modules/openid_connect/config/locales/crowdin/uz.yml
# modules/openid_connect/config/locales/crowdin/vi.yml
# modules/openid_connect/config/locales/crowdin/zh-CN.yml
# modules/openid_connect/config/locales/crowdin/zh-TW.yml
# modules/reporting/config/locales/crowdin/ro.yml
# modules/reporting/config/locales/crowdin/vi.yml
# modules/reporting/config/locales/crowdin/zh-TW.yml
# modules/storages/config/locales/crowdin/ja.yml
# modules/storages/config/locales/crowdin/js-ja.yml
# modules/team_planner/config/locales/crowdin/js-fr.yml
# modules/two_factor_authentication/config/locales/crowdin/af.yml
# modules/two_factor_authentication/config/locales/crowdin/ar.yml
# modules/two_factor_authentication/config/locales/crowdin/az.yml
# modules/two_factor_authentication/config/locales/crowdin/be.yml
# modules/two_factor_authentication/config/locales/crowdin/bg.yml
# modules/two_factor_authentication/config/locales/crowdin/ca.yml
# modules/two_factor_authentication/config/locales/crowdin/ckb-IR.yml
# modules/two_factor_authentication/config/locales/crowdin/cs.yml
# modules/two_factor_authentication/config/locales/crowdin/da.yml
# modules/two_factor_authentication/config/locales/crowdin/de.yml
# modules/two_factor_authentication/config/locales/crowdin/el.yml
# modules/two_factor_authentication/config/locales/crowdin/eo.yml
# modules/two_factor_authentication/config/locales/crowdin/es.yml
# modules/two_factor_authentication/config/locales/crowdin/et.yml
# modules/two_factor_authentication/config/locales/crowdin/eu.yml
# modules/two_factor_authentication/config/locales/crowdin/fa.yml
# modules/two_factor_authentication/config/locales/crowdin/fi.yml
# modules/two_factor_authentication/config/locales/crowdin/fil.yml
# modules/two_factor_authentication/config/locales/crowdin/fr.yml
# modules/two_factor_authentication/config/locales/crowdin/he.yml
# modules/two_factor_authentication/config/locales/crowdin/hi.yml
# modules/two_factor_authentication/config/locales/crowdin/hr.yml
# modules/two_factor_authentication/config/locales/crowdin/hu.yml
# modules/two_factor_authentication/config/locales/crowdin/id.yml
# modules/two_factor_authentication/config/locales/crowdin/it.yml
# modules/two_factor_authentication/config/locales/crowdin/ja.yml
# modules/two_factor_authentication/config/locales/crowdin/ka.yml
# modules/two_factor_authentication/config/locales/crowdin/kk.yml
# modules/two_factor_authentication/config/locales/crowdin/ko.yml
# modules/two_factor_authentication/config/locales/crowdin/lt.yml
# modules/two_factor_authentication/config/locales/crowdin/lv.yml
# modules/two_factor_authentication/config/locales/crowdin/mn.yml
# modules/two_factor_authentication/config/locales/crowdin/ms.yml
# modules/two_factor_authentication/config/locales/crowdin/ne.yml
# modules/two_factor_authentication/config/locales/crowdin/nl.yml
# modules/two_factor_authentication/config/locales/crowdin/no.yml
# modules/two_factor_authentication/config/locales/crowdin/pl.yml
# modules/two_factor_authentication/config/locales/crowdin/pt-BR.yml
# modules/two_factor_authentication/config/locales/crowdin/pt-PT.yml
# modules/two_factor_authentication/config/locales/crowdin/ro.yml
# modules/two_factor_authentication/config/locales/crowdin/ru.yml
# modules/two_factor_authentication/config/locales/crowdin/rw.yml
# modules/two_factor_authentication/config/locales/crowdin/si.yml
# modules/two_factor_authentication/config/locales/crowdin/sk.yml
# modules/two_factor_authentication/config/locales/crowdin/sl.yml
# modules/two_factor_authentication/config/locales/crowdin/sr.yml
# modules/two_factor_authentication/config/locales/crowdin/sv.yml
# modules/two_factor_authentication/config/locales/crowdin/th.yml
# modules/two_factor_authentication/config/locales/crowdin/tr.yml
# modules/two_factor_authentication/config/locales/crowdin/uk.yml
# modules/two_factor_authentication/config/locales/crowdin/uz.yml
# modules/two_factor_authentication/config/locales/crowdin/vi.yml
# modules/two_factor_authentication/config/locales/crowdin/zh-CN.yml
# modules/two_factor_authentication/config/locales/crowdin/zh-TW.yml
# modules/wikis/config/locales/crowdin/af.yml
# modules/wikis/config/locales/crowdin/ar.yml
# modules/wikis/config/locales/crowdin/az.yml
# modules/wikis/config/locales/crowdin/be.yml
# modules/wikis/config/locales/crowdin/bg.yml
# modules/wikis/config/locales/crowdin/ca.yml
# modules/wikis/config/locales/crowdin/ckb-IR.yml
# modules/wikis/config/locales/crowdin/cs.yml
# modules/wikis/config/locales/crowdin/da.yml
# modules/wikis/config/locales/crowdin/de.yml
# modules/wikis/config/locales/crowdin/el.yml
# modules/wikis/config/locales/crowdin/eo.yml
# modules/wikis/config/locales/crowdin/es.yml
# modules/wikis/config/locales/crowdin/et.yml
# modules/wikis/config/locales/crowdin/eu.yml
# modules/wikis/config/locales/crowdin/fa.yml
# modules/wikis/config/locales/crowdin/fi.yml
# modules/wikis/config/locales/crowdin/fil.yml
# modules/wikis/config/locales/crowdin/fr.yml
# modules/wikis/config/locales/crowdin/he.yml
# modules/wikis/config/locales/crowdin/hi.yml
# modules/wikis/config/locales/crowdin/hr.yml
# modules/wikis/config/locales/crowdin/hu.yml
# modules/wikis/config/locales/crowdin/id.yml
# modules/wikis/config/locales/crowdin/it.yml
# modules/wikis/config/locales/crowdin/ja.yml
# modules/wikis/config/locales/crowdin/ka.yml
# modules/wikis/config/locales/crowdin/kk.yml
# modules/wikis/config/locales/crowdin/ko.yml
# modules/wikis/config/locales/crowdin/lt.yml
# modules/wikis/config/locales/crowdin/lv.yml
# modules/wikis/config/locales/crowdin/mn.yml
# modules/wikis/config/locales/crowdin/ms.yml
# modules/wikis/config/locales/crowdin/ne.yml
# modules/wikis/config/locales/crowdin/nl.yml
# modules/wikis/config/locales/crowdin/no.yml
# modules/wikis/config/locales/crowdin/pl.yml
# modules/wikis/config/locales/crowdin/pt-BR.yml
# modules/wikis/config/locales/crowdin/pt-PT.yml
# modules/wikis/config/locales/crowdin/ro.yml
# modules/wikis/config/locales/crowdin/ru.yml
# modules/wikis/config/locales/crowdin/rw.yml
# modules/wikis/config/locales/crowdin/si.yml
# modules/wikis/config/locales/crowdin/sk.yml
# modules/wikis/config/locales/crowdin/sl.yml
# modules/wikis/config/locales/crowdin/sr.yml
# modules/wikis/config/locales/crowdin/sv.yml
# modules/wikis/config/locales/crowdin/th.yml
# modules/wikis/config/locales/crowdin/tr.yml
# modules/wikis/config/locales/crowdin/uk.yml
# modules/wikis/config/locales/crowdin/uz.yml
# modules/wikis/config/locales/crowdin/vi.yml
# modules/wikis/config/locales/crowdin/zh-CN.yml
# modules/wikis/config/locales/crowdin/zh-TW.yml
2026-04-11 13:33:28 +02:00
Oliver Günther
5041176e9e
Fix stale element in my_page_spec
...
Stale element reference during drag-and-drop. CDK drag restructures
the DOM between the click_and_hold and release phases,
invalidating the drop_area.native Selenium reference held from before the drag started.
2026-04-08 09:51:41 +02:00
Ivan Kuchin
8deb557630
wait after selecting work package type
2026-04-07 20:23:43 +02:00
Ivan Kuchin
6f512af3bb
wait more time for relations tab to load
2026-04-07 20:23:39 +02:00
Alexander Brandon Coles
ac3c717307
Fix zoneless CI failures
2026-04-06 14:21:44 +01:00
Henriette Darge
d8a5399ea8
Attempt to stabilise test by assuring that the turbo frame finished loading before clicking the field
2026-03-25 13:59:32 +01:00
Henriette Darge
adb88c979b
Some more test fixing.. There is light and the end of the tunnel :fingers_crossed:
2026-03-19 15:10:27 +01:00
Henriette Darge
ee83264379
Continue the endless journey of adapting the tests to the new inplaceEditFields.
2026-03-18 14:03:52 +01:00
Henriette Darge
a445cc196c
* Take care that newly created CF are also correctly registered
...
* Introduce spec helper for inplace edit fields
* Preserve system_arguments for calculated fields when they are updated
2026-03-17 15:13:21 +01:00
Christophe Bliard
b8b84bdd94
Make some meetings features specs faster
...
The "Filters" toggle is clicked regardless of whether the filters are
already open or not.
When already open, the toggle is clicked and the filters are closed.
This causes the method to wait 3 secs for the filters to be opened,
fail, and be retried and work, leading to 3 secs of extra wait time.
Now it exits early if the filters are already open => faster specs.
2026-03-11 12:14:34 +01:00
Ivan Kuchin
e13e4cd006
test readonly custom field modal from project overview
2026-03-05 17:39:00 +01:00
Ivan Kuchin
5a89078072
extract DialogComponent for shared behaviour between Edit and Show dialogs
2026-02-25 16:00:30 +01:00
Henriette Darge
cbeaa51970
Add comments and replace sleep timeouts
2026-02-24 10:20:08 +01:00
Behrokh Satarnejad
04aa644370
fix failures in tests
2026-02-17 08:42:47 +01:00
Klaus Zanders
af691683fa
Merge branch 'dev' into merge-release/17.0-20260127110839
2026-01-27 13:18:18 +01:00
Christophe Bliard
b1d3c14fb0
Fix flaky spec in progress_modal_spec
...
failing spec: spec/features/work_packages/progress_modal_spec.rb:195
failing run: https://github.com/opf/openproject/actions/runs/21204407008/job/60997306384
In the spec, another page is visited during the test, meaning the
internal ids of the capybara elements may not be the same as the ones
before the page is reloaded. This is a problem because the
`progress_popover` caches the container element, and it's not valid
anymore (it's stale).
One fix could be to create a new `progress_popover` instance after the other page is visited.
I found it better to be able to pass a lambda for the container element
to the `progress_popover` constructor, so that it always gets it afresh
and will never be stale.
2026-01-27 10:04:57 +01:00
Christophe Bliard
41d34f2563
Simpler fix than 84bbf8d
...
84bbf8d fixed the flaky spec
`spec/features/projects/life_cycle/overview_page/dialog/update_spec.rb:266`.
It was flaky because it was testing if a date in the date picker is
disabled, but this date could be in the previous month and thus not
visible.
The implemented fix in 84bbf8d was to show the date before testing it
right in the `expect_xxx` methods.
The problem is that it breaks the query/command segregation principle.
Better move the calendar to the correct date before doing assertions on
the dates being visible, so the `expect_xxx` methods actually do also
check that the date is visible, which is desired in some test scenarios.
2026-01-26 18:31:59 +01:00
Christophe Bliard
7c72f0c3a5
Fix slow tests when checking date visible in date picker
...
941096114c introduced `Components::Datepicker#displays_date?(date)` to
check if a date is visible in the date picker before doing some
assertions on it. Then 84bbf8d549 doubled down on it by calling it
inside each `#expect_non_working(date)`, `#expect_working(date)`,
`#expect_disabled(date)`, `#expect_not_disabled(date)` methods.
The problem is that `#displays_date?(date)` uses `has_css?` so it
returns immediately if the check is positive, but waits for 3 seconds
for the date to become visible if it's not yet. It's missing a `wait:
0`. And the css selector is wrong to: it searches for
`.flatpickr-day.flatpickr-disabled` instead of `.flatpickr-day`, so it
was returning false when the date was visible and enabled.
This commit fixes the problem by:
- Adding `wait: 0` to `has_css?`
- Changing the css selector to `.flatpickr-day`
- Add some `#expect_visible` calls to be sure the date picker is visible
before doing assertions with `wait: 0`
And same for `#has_previous_month_toggle?`: it missed a `wait: 0` for
the same reasons.
This makes for instance the 2 specs in
`spec/features/work_packages/datepicker/datepicker_follows_relation_spec.rb:84`
run in 11 seconds instead of 1 minute 27 seconds.
2026-01-26 18:29:32 +01:00