From a35414f6b51774df9f2773bfd5c8b2d4a858c752 Mon Sep 17 00:00:00 2001
From: Bartek Wajda <bartlomiej.wajda@ibexa.co>
Date: Tue, 17 Jan 2023 11:20:24 +0100
Subject: [PATCH 1/9] IBX-4629: Implement Meta fieldgroups

---
 .../Configuration/Parser/AdminUiForms.php     | 19 ++++++++
 .../Resources/config/admin_ui_forms.yaml      |  2 +
 .../content/components/meta_fields.html.twig  |  2 +-
 .../ContentEditMetaFieldsComponent.php        | 20 ++++++--
 .../SetViewParametersListener.php             | 13 ++++-
 .../GroupedNonMetaFormFieldsProvider.php      | 23 ++++++++-
 src/lib/Menu/ContentEditAnchorMenuBuilder.php | 20 +++++++-
 .../Configuration/Parser/AdminUiFormsTest.php | 41 ++++++++++++++++
 .../SetViewParametersListenerTest.php         | 47 ++++++++++++++-----
 9 files changed, 168 insertions(+), 19 deletions(-)

diff --git a/src/bundle/DependencyInjection/Configuration/Parser/AdminUiForms.php b/src/bundle/DependencyInjection/Configuration/Parser/AdminUiForms.php
index b58add3a4d..100136773e 100644
--- a/src/bundle/DependencyInjection/Configuration/Parser/AdminUiForms.php
+++ b/src/bundle/DependencyInjection/Configuration/Parser/AdminUiForms.php
@@ -29,6 +29,7 @@ class AdminUiForms extends AbstractParser
 {
     public const FORM_TEMPLATES_PARAM = 'admin_ui_forms.content_edit_form_templates';
     public const FIELD_TYPES_PARAM = 'admin_ui_forms.content_edit.fieldtypes';
+    public const META_FIELDGROUP_LIST_PARAM = 'admin_ui_forms.content_edit.meta_fieldgroup_list';
     public const CONTENT_TYPE_FIELD_TYPES_PARAM = 'admin_ui_forms.content_type_edit.field_types';
     public const CONTENT_TYPE_DEFAULT_META_FIELD_TYPE_GROUP_PARAM =
         'admin_ui_forms.content_type_edit.default_meta_field_type_group';
@@ -87,6 +88,12 @@ public function addSemanticConfig(NodeBuilder $nodeBuilder)
                                     ->end()
                                 ->end()
                             ->end()
+                            ->arrayNode('meta_fieldgroup_list')
+                                ->performNoDeepMerging()
+                                ->scalarPrototype()->end()
+                                ->info('List of field groups that would be placed under a meta section in a content form')
+                                ->defaultValue(['metadata'])
+                            ->end()
                         ->end()
                     ->end()
                     ->arrayNode('content_type_edit')
@@ -156,6 +163,12 @@ public function mapConfig(
             unset($scopeSettings['admin_ui_forms']['content_edit']['fieldtypes']);
         }
 
+        if (!empty($scopeSettings['admin_ui_forms']['content_edit']['meta_fieldgroup_list'])) {
+            $scopeSettings['admin_ui_forms.content_edit.meta_fieldgroup_list'] =
+                $scopeSettings['admin_ui_forms']['content_edit']['meta_fieldgroup_list'];
+            unset($scopeSettings['admin_ui_forms']['content_edit']['meta_fieldgroup_list']);
+        }
+
         if (!empty($scopeSettings['admin_ui_forms']['content_type_edit']['field_types'])) {
             $scopeSettings['admin_ui_forms.content_type_edit.field_types'] =
                 $scopeSettings['admin_ui_forms']['content_type_edit']['field_types'];
@@ -178,6 +191,11 @@ public function mapConfig(
             $currentScope,
             $scopeSettings['admin_ui_forms.content_edit.fieldtypes'] ?? []
         );
+        $contextualizer->setContextualParameter(
+            self::META_FIELDGROUP_LIST_PARAM,
+            $currentScope,
+            $scopeSettings['admin_ui_forms.content_edit.meta_fieldgroup_list'] ?? []
+        );
         $contextualizer->setContextualParameter(
             self::CONTENT_TYPE_FIELD_TYPES_PARAM,
             $currentScope,
@@ -197,6 +215,7 @@ public function postMap(array $config, ContextualizerInterface $contextualizer)
     {
         $contextualizer->mapConfigArray('admin_ui_forms.content_edit_form_templates', $config);
         $contextualizer->mapConfigArray('admin_ui_forms.content_edit.fieldtypes', $config);
+        $contextualizer->mapConfigArray('admin_ui_forms.content_edit.meta_fieldgroup_list', $config);
         $contextualizer->mapConfigArray('admin_ui_forms.content_type_edit.field_types', $config);
         $contextualizer->mapSetting('admin_ui_forms.content_type_edit.default_meta_field_type_group', $config);
     }
diff --git a/src/bundle/Resources/config/admin_ui_forms.yaml b/src/bundle/Resources/config/admin_ui_forms.yaml
index 83e09af8c5..c9e26dfab4 100644
--- a/src/bundle/Resources/config/admin_ui_forms.yaml
+++ b/src/bundle/Resources/config/admin_ui_forms.yaml
@@ -2,6 +2,8 @@ system:
     admin_group:
         admin_ui_forms:
             content_edit:
+                meta_fieldgroup_list:
+                    - metadata
                 form_templates:
                     - { template: '@ibexadesign/content/form_fields.html.twig', priority: 0 }
 
diff --git a/src/bundle/Resources/views/themes/admin/content/components/meta_fields.html.twig b/src/bundle/Resources/views/themes/admin/content/components/meta_fields.html.twig
index 2915273f34..2f82bd5cf2 100644
--- a/src/bundle/Resources/views/themes/admin/content/components/meta_fields.html.twig
+++ b/src/bundle/Resources/views/themes/admin/content/components/meta_fields.html.twig
@@ -5,7 +5,7 @@
 {% block sections %}
     {% for identifier in meta_fields %}
         {% embed '@ibexadesign/ui/component/anchor_navigation/section.html.twig' with {'form': form, 'identifier': identifier} %}
-            {% set data_id = 'ibexa-edit-content-sections-meta-' ~ identifier %}
+            {% set data_id = '#ibexa-edit-content-sections-meta-' ~ identifier %}
             {% block content %}
                 {% from '@ibexadesign/content/edit_macros.html.twig' import render_form_field %}
 
diff --git a/src/lib/Component/Content/ContentEditMetaFieldsComponent.php b/src/lib/Component/Content/ContentEditMetaFieldsComponent.php
index b72a34ddb0..227a51d439 100644
--- a/src/lib/Component/Content/ContentEditMetaFieldsComponent.php
+++ b/src/lib/Component/Content/ContentEditMetaFieldsComponent.php
@@ -10,6 +10,7 @@
 
 use Ibexa\Contracts\AdminUi\Component\Renderable;
 use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
+use Ibexa\Core\Repository\Values\ContentType\FieldDefinition;
 use Twig\Environment;
 
 class ContentEditMetaFieldsComponent implements Renderable
@@ -39,17 +40,30 @@ public function render(array $parameters = []): string
         $contentType = $parameters['content_type'];
 
         $metaFieldTypeIdentifiers = $this->getMetaFieldTypeIdentifiers();
+        $metaFieldGroups = $this->configResolver->getParameter(
+            'admin_ui_forms.content_edit.meta_fieldgroup_list'
+        );
+        $metaFieldDefinitionCollection = $contentType->fieldDefinitions->filter(
+            static fn (FieldDefinition $field): bool => true === in_array($field->fieldGroup, $metaFieldGroups),
+        );
 
-        if (empty($metaFieldTypeIdentifiers)) {
+        if (empty($metaFieldTypeIdentifiers) && $metaFieldDefinitionCollection->isEmpty()) {
             return self::NO_CONTENT;
         }
 
-        $parameters['meta_fields'] = [];
+        $metaFields = [];
+
+        foreach ($metaFieldDefinitionCollection as $fieldDefinition) {
+            $metaFields[] = $fieldDefinition->identifier;
+        }
+
         foreach ($metaFieldTypeIdentifiers as $identifier) {
             $fields = $contentType->getFieldDefinitionsOfType($identifier);
-            $parameters['meta_fields'] = array_merge($parameters['meta_fields'], array_column($fields->toArray(), 'identifier'));
+            $metaFields = array_merge($metaFields, array_column($fields->toArray(), 'identifier'));
         }
 
+        $parameters['meta_fields'] = array_unique($metaFields);
+
         return $this->twig->render(
             '@ibexadesign/content/components/meta_fields.html.twig',
             $parameters
diff --git a/src/lib/EventListener/SetViewParametersListener.php b/src/lib/EventListener/SetViewParametersListener.php
index 4761e6d5be..d46a9b0975 100644
--- a/src/lib/EventListener/SetViewParametersListener.php
+++ b/src/lib/EventListener/SetViewParametersListener.php
@@ -27,6 +27,7 @@
 use Ibexa\Core\MVC\Symfony\View\View;
 use Ibexa\Core\MVC\Symfony\View\ViewEvents;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\Form\FormInterface;
 
 /**
  * @todo It should use ViewEvents::FILTER_VIEW_PARAMETERS event instead.
@@ -276,7 +277,17 @@ private function getIgnoredContentFields(array $fieldsData): array
             $ignoredFieldIdentifiers[] = $fieldIdentifier;
         }
 
-        return $ignoredFieldIdentifiers;
+        $metaFieldGroups = $this->configResolver->getParameter(
+            'admin_ui_forms.content_edit.meta_fieldgroup_list'
+        );
+        $metaFieldIdentifiers = array_keys(
+            array_filter(
+                $fieldsData,
+                static fn (FormInterface $field): bool => true === in_array($field->getData()->fieldDefinition->fieldGroup, $metaFieldGroups)
+            )
+        );
+
+        return array_merge($ignoredFieldIdentifiers, $metaFieldIdentifiers);
     }
 }
 
diff --git a/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php b/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
index 90f90b73df..55a62ccf59 100644
--- a/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
+++ b/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
@@ -10,6 +10,7 @@
 
 use Ibexa\Contracts\ContentForms\Content\Form\Provider\GroupedContentFormFieldsProviderInterface;
 use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
+use Symfony\Component\Form\FormInterface;
 
 final class GroupedNonMetaFormFieldsProvider implements GroupedContentFormFieldsProviderInterface
 {
@@ -28,16 +29,26 @@ public function __construct(
     public function getGroupedFields(array $fieldsDataForm): array
     {
         $identifiers = $this->getMetaFields();
+        $metaFieldGroups = $this->getMetaFieldGroups();
+
+        $metaFieldIdentifiers = array_keys(
+            array_filter(
+                $fieldsDataForm,
+                static fn (FormInterface $field): bool => true === in_array($field->getData()->fieldDefinition->fieldGroup, $metaFieldGroups)
+            )
+        );
 
         $groupedFields = $this->innerGroupedContentFormFieldsProvider->getGroupedFields($fieldsDataForm);
         foreach ($groupedFields as $group => $fields) {
             $groupedFields[$group] = array_filter(
                 $fields,
-                static function (string $fieldIdentifier) use ($fieldsDataForm, $identifiers): bool {
+                static function (string $fieldIdentifier) use ($fieldsDataForm, $identifiers, $metaFieldIdentifiers): bool {
                     $fieldData = $fieldsDataForm[$fieldIdentifier]->getNormData();
                     $fieldTypeIdentifier = $fieldData->fieldDefinition->fieldTypeIdentifier;
+                    $fieldIdentifier = $fieldData->fieldDefinition->identifier;
 
-                    return !in_array($fieldTypeIdentifier, $identifiers, true);
+                    return !in_array($fieldTypeIdentifier, $identifiers, true)
+                        && !in_array($fieldIdentifier, $metaFieldIdentifiers);
                 }
             );
         }
@@ -59,4 +70,12 @@ private function getMetaFields(): array
             )
         );
     }
+
+    /**
+     * @return array<string>
+     */
+    private function getMetaFieldGroups(): array
+    {
+        return $this->configResolver->getParameter('admin_ui_forms.content_edit.meta_fieldgroup_list');
+    }
 }
diff --git a/src/lib/Menu/ContentEditAnchorMenuBuilder.php b/src/lib/Menu/ContentEditAnchorMenuBuilder.php
index 58fc73090f..cfc63531f2 100644
--- a/src/lib/Menu/ContentEditAnchorMenuBuilder.php
+++ b/src/lib/Menu/ContentEditAnchorMenuBuilder.php
@@ -126,8 +126,24 @@ private function getMetaFieldItems(ContentType $contentType): array
             static fn (array $config): bool => true === $config['meta']
         ));
 
+        $metaFieldGroups = $this->configResolver->getParameter(
+            'admin_ui_forms.content_edit.meta_fieldgroup_list'
+        );
+        $metaFieldDefinitionCollection = $contentType->fieldDefinitions->filter(
+            static fn (FieldDefinition $field): bool => true === in_array($field->fieldGroup, $metaFieldGroups),
+        );
+
         $items = [];
         $order = 0;
+        foreach ($metaFieldDefinitionCollection as $fieldDefinition) {
+            $order += self::ITEM_ORDER_SPAN;
+            $items[$fieldDefinition->identifier] = $this->createSecondLevelItem(
+                $fieldDefinition->identifier,
+                $fieldDefinition,
+                $order
+            );
+        }
+
         foreach ($metaFieldTypeIdentifiers as $metaFieldTypeIdentifier) {
             if (false === $contentType->hasFieldDefinitionOfType($metaFieldTypeIdentifier)) {
                 continue;
@@ -137,7 +153,9 @@ private function getMetaFieldItems(ContentType $contentType): array
             foreach ($fieldDefinitions as $fieldDefinition) {
                 $fieldDefIdentifier = $fieldDefinition->identifier;
                 $order += self::ITEM_ORDER_SPAN;
-                $items[$fieldDefIdentifier] = $this->createSecondLevelItem($fieldDefIdentifier, $fieldDefinition, $order);
+                if (!isset($items[$fieldDefIdentifier])) {
+                    $items[$fieldDefIdentifier] = $this->createSecondLevelItem($fieldDefIdentifier, $fieldDefinition, $order);
+                }
             }
         }
 
diff --git a/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php b/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php
index 0aa1755b1f..1a78e5b947 100644
--- a/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php
+++ b/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php
@@ -116,6 +116,47 @@ public function testContentEditFieldTypesAreMapped(): void
 
         $this->parser->mapConfig($scopeSettings, $currentScope, $this->contextualizer);
     }
+
+    /**
+     * Test 'meta_fieldgroup_list' fieldtype settings are mapped.
+     */
+    public function testContentEditMetaFieldgroupListIsMapped(): void
+    {
+        $scopeSettings = [
+            'admin_ui_forms' => [
+                'content_edit' => [
+                    'meta_fieldgroup_list' => [
+                        'metadata',
+                        'seo',
+                    ],
+                ],
+            ],
+        ];
+        $currentScope = 'admin_group';
+
+        $this->contextualizer
+            ->expects($this->atLeast(2))
+            ->method('setContextualParameter')
+            ->withConsecutive(
+                [
+                    AdminUiForms::FORM_TEMPLATES_PARAM,
+                    $currentScope,
+                    [],
+                ],
+                [
+                    AdminUiForms::FIELD_TYPES_PARAM,
+                    $currentScope,
+                    [],
+                ],
+                [
+                    AdminUiForms::META_FIELDGROUP_LIST_PARAM,
+                    $currentScope,
+                    ['metadata', 'seo'],
+                ],
+            );
+
+        $this->parser->mapConfig($scopeSettings, $currentScope, $this->contextualizer);
+    }
 }
 
 class_alias(AdminUiFormsTest::class, 'EzSystems\EzPlatformAdminUiBundle\Tests\DependencyInjection\Configuration\Parser\AdminUiFormsTest');
diff --git a/tests/lib/EventListener/SetViewParametersListenerTest.php b/tests/lib/EventListener/SetViewParametersListenerTest.php
index b1a3ef8c53..9efc4be3b2 100644
--- a/tests/lib/EventListener/SetViewParametersListenerTest.php
+++ b/tests/lib/EventListener/SetViewParametersListenerTest.php
@@ -75,13 +75,17 @@ public function setUp(): void
         $this->configResolver = $this->createMock(ConfigResolverInterface::class);
         $this->configResolver
             ->method('getParameter')
-            ->with('admin_ui_forms.content_edit.fieldtypes')
-            ->willReturn(
+            ->withConsecutive(
+                ['admin_ui_forms.content_edit.fieldtypes'],
+                ['admin_ui_forms.content_edit.meta_fieldgroup_list']
+            )
+            ->willReturnOnConsecutiveCalls(
                 [
                     'ibexa_taxonomy_entry_assignment' => [
                         'meta' => true,
                     ],
-                ]
+                ],
+                ['metadata']
             );
 
         $this->groupedContentFormFieldsProvider = $this->createMock(GroupedContentFormFieldsProviderInterface::class);
@@ -227,15 +231,35 @@ public function testSetUserUpdateViewTemplateParameters(): void
     public function testSetContentFieldsParameters(): void
     {
         $fields = [
-            'name' => 'ezstring',
-            'short_name' => 'ezstring',
-            'description' => 'ezrichtext',
-            'tags' => 'ibexa_taxonomy_entry_assignment',
+            'name' => [
+                'type' => 'ezstring',
+                'group' => 'content',
+            ],
+            'short_name' => [
+                'type' => 'ezstring',
+                'group' => 'content',
+            ],
+            'description' => [
+                'type' => 'ezrichtext',
+                'group' => 'content',
+            ],
+            'tags' => [
+                'type' => 'ibexa_taxonomy_entry_assignment',
+                'group' => 'content',
+            ],
+            'metadata_field' => [
+                'type' => 'ezstring',
+                'group' => 'metadata',
+            ],
         ];
 
         $fieldsDataChildren = [];
-        foreach ($fields as $identifier => $type) {
-            $fieldsDataChildren[$identifier] = $this->createFieldMock($identifier, $type);
+        foreach ($fields as $identifier => $data) {
+            $fieldsDataChildren[$identifier] = $this->createFieldMock(
+                $identifier,
+                $data['type'],
+                $data['group']
+            );
         }
 
         $fieldsDataForm = $this->createMock(FormInterface::class);
@@ -255,7 +279,7 @@ public function testSetContentFieldsParameters(): void
         $groupedFields = [
             'Content' => ['name', 'short_name', 'description'],
         ];
-        $ignoredContentFields = ['tags'];
+        $ignoredContentFields = ['tags', 'metadata_field'];
 
         $this->groupedContentFormFieldsProvider
             ->method('getGroupedFields')
@@ -347,7 +371,7 @@ private function generateUser(int $ownerId): APIUser
     /**
      * @return \Ibexa\Contracts\Core\Repository\Values\Content\Field|\PHPUnit\Framework\MockObject\MockObject
      */
-    private function createFieldMock(string $identifier, string $type): MockObject
+    private function createFieldMock(string $identifier, string $type, string $fieldGroup = 'content'): MockObject
     {
         $data = new FieldData([
             'field' => new Field([
@@ -356,6 +380,7 @@ private function createFieldMock(string $identifier, string $type): MockObject
             ]),
             'fieldDefinition' => new FieldDefinition([
                 'fieldTypeIdentifier' => $type,
+                'fieldGroup' => $fieldGroup,
             ]),
         ]);
 

From 1feec11581a1483dbd793904e9028e83c7e03402 Mon Sep 17 00:00:00 2001
From: Bartek Wajda <bartlomiej.wajda@ibexa.co>
Date: Tue, 17 Jan 2023 11:35:34 +0100
Subject: [PATCH 2/9] IBX-4629: CS

---
 src/lib/EventListener/SetViewParametersListener.php        | 3 ++-
 src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php | 6 +++++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/lib/EventListener/SetViewParametersListener.php b/src/lib/EventListener/SetViewParametersListener.php
index d46a9b0975..3a4ae8be0a 100644
--- a/src/lib/EventListener/SetViewParametersListener.php
+++ b/src/lib/EventListener/SetViewParametersListener.php
@@ -283,7 +283,8 @@ private function getIgnoredContentFields(array $fieldsData): array
         $metaFieldIdentifiers = array_keys(
             array_filter(
                 $fieldsData,
-                static fn (FormInterface $field): bool => true === in_array($field->getData()->fieldDefinition->fieldGroup, $metaFieldGroups)
+                static fn (FormInterface $field): bool => true
+                    === in_array($field->getData()->fieldDefinition->fieldGroup, $metaFieldGroups)
             )
         );
 
diff --git a/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php b/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
index 55a62ccf59..02beec74ad 100644
--- a/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
+++ b/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
@@ -42,7 +42,11 @@ public function getGroupedFields(array $fieldsDataForm): array
         foreach ($groupedFields as $group => $fields) {
             $groupedFields[$group] = array_filter(
                 $fields,
-                static function (string $fieldIdentifier) use ($fieldsDataForm, $identifiers, $metaFieldIdentifiers): bool {
+                static function (string $fieldIdentifier) use (
+                    $fieldsDataForm,
+                    $identifiers,
+                    $metaFieldIdentifiers
+                ): bool {
                     $fieldData = $fieldsDataForm[$fieldIdentifier]->getNormData();
                     $fieldTypeIdentifier = $fieldData->fieldDefinition->fieldTypeIdentifier;
                     $fieldIdentifier = $fieldData->fieldDefinition->identifier;

From 14ed3f1fab027ebbd7fbbe5cc4d61fbe411926e2 Mon Sep 17 00:00:00 2001
From: Bartek Wajda <bartlomiej.wajda@ibexa.co>
Date: Tue, 17 Jan 2023 11:39:37 +0100
Subject: [PATCH 3/9] IBX-4629: CS

---
 src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php b/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
index 02beec74ad..0ea40bfc49 100644
--- a/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
+++ b/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
@@ -34,7 +34,8 @@ public function getGroupedFields(array $fieldsDataForm): array
         $metaFieldIdentifiers = array_keys(
             array_filter(
                 $fieldsDataForm,
-                static fn (FormInterface $field): bool => true === in_array($field->getData()->fieldDefinition->fieldGroup, $metaFieldGroups)
+                static fn (FormInterface $field): bool => true
+                    === in_array($field->getData()->fieldDefinition->fieldGroup, $metaFieldGroups)
             )
         );
 

From 3f03c20dbac00c3ca0925d76c8c065eee592724e Mon Sep 17 00:00:00 2001
From: Bartek Wajda <bartlomiej.wajda@ibexa.co>
Date: Wed, 18 Jan 2023 14:11:08 +0100
Subject: [PATCH 4/9] IBX-4629: Applied review remarks

---
 .../Configuration/Parser/AdminUiForms.php     | 18 +++++------
 .../Resources/config/admin_ui_forms.yaml      |  2 +-
 .../ContentEditMetaFieldsComponent.php        | 32 ++++++++++++-------
 .../SetViewParametersListener.php             |  2 +-
 .../GroupedNonMetaFormFieldsProvider.php      |  2 +-
 src/lib/Menu/ContentEditAnchorMenuBuilder.php |  2 +-
 .../Configuration/Parser/AdminUiFormsTest.php |  6 ++--
 .../SetViewParametersListenerTest.php         |  2 +-
 8 files changed, 38 insertions(+), 28 deletions(-)

diff --git a/src/bundle/DependencyInjection/Configuration/Parser/AdminUiForms.php b/src/bundle/DependencyInjection/Configuration/Parser/AdminUiForms.php
index 100136773e..dbbb5ece64 100644
--- a/src/bundle/DependencyInjection/Configuration/Parser/AdminUiForms.php
+++ b/src/bundle/DependencyInjection/Configuration/Parser/AdminUiForms.php
@@ -29,7 +29,7 @@ class AdminUiForms extends AbstractParser
 {
     public const FORM_TEMPLATES_PARAM = 'admin_ui_forms.content_edit_form_templates';
     public const FIELD_TYPES_PARAM = 'admin_ui_forms.content_edit.fieldtypes';
-    public const META_FIELDGROUP_LIST_PARAM = 'admin_ui_forms.content_edit.meta_fieldgroup_list';
+    public const META_FIELD_GROUPS_LIST_PARAM = 'admin_ui_forms.content_edit.meta_field_groups_list';
     public const CONTENT_TYPE_FIELD_TYPES_PARAM = 'admin_ui_forms.content_type_edit.field_types';
     public const CONTENT_TYPE_DEFAULT_META_FIELD_TYPE_GROUP_PARAM =
         'admin_ui_forms.content_type_edit.default_meta_field_type_group';
@@ -88,7 +88,7 @@ public function addSemanticConfig(NodeBuilder $nodeBuilder)
                                     ->end()
                                 ->end()
                             ->end()
-                            ->arrayNode('meta_fieldgroup_list')
+                            ->arrayNode('meta_field_groups_list')
                                 ->performNoDeepMerging()
                                 ->scalarPrototype()->end()
                                 ->info('List of field groups that would be placed under a meta section in a content form')
@@ -163,10 +163,10 @@ public function mapConfig(
             unset($scopeSettings['admin_ui_forms']['content_edit']['fieldtypes']);
         }
 
-        if (!empty($scopeSettings['admin_ui_forms']['content_edit']['meta_fieldgroup_list'])) {
-            $scopeSettings['admin_ui_forms.content_edit.meta_fieldgroup_list'] =
-                $scopeSettings['admin_ui_forms']['content_edit']['meta_fieldgroup_list'];
-            unset($scopeSettings['admin_ui_forms']['content_edit']['meta_fieldgroup_list']);
+        if (!empty($scopeSettings['admin_ui_forms']['content_edit']['meta_field_groups_list'])) {
+            $scopeSettings['admin_ui_forms.content_edit.meta_field_groups_list'] =
+                $scopeSettings['admin_ui_forms']['content_edit']['meta_field_groups_list'];
+            unset($scopeSettings['admin_ui_forms']['content_edit']['meta_field_groups_list']);
         }
 
         if (!empty($scopeSettings['admin_ui_forms']['content_type_edit']['field_types'])) {
@@ -192,9 +192,9 @@ public function mapConfig(
             $scopeSettings['admin_ui_forms.content_edit.fieldtypes'] ?? []
         );
         $contextualizer->setContextualParameter(
-            self::META_FIELDGROUP_LIST_PARAM,
+            self::META_FIELD_GROUPS_LIST_PARAM,
             $currentScope,
-            $scopeSettings['admin_ui_forms.content_edit.meta_fieldgroup_list'] ?? []
+            $scopeSettings['admin_ui_forms.content_edit.meta_field_groups_list'] ?? []
         );
         $contextualizer->setContextualParameter(
             self::CONTENT_TYPE_FIELD_TYPES_PARAM,
@@ -215,7 +215,7 @@ public function postMap(array $config, ContextualizerInterface $contextualizer)
     {
         $contextualizer->mapConfigArray('admin_ui_forms.content_edit_form_templates', $config);
         $contextualizer->mapConfigArray('admin_ui_forms.content_edit.fieldtypes', $config);
-        $contextualizer->mapConfigArray('admin_ui_forms.content_edit.meta_fieldgroup_list', $config);
+        $contextualizer->mapConfigArray('admin_ui_forms.content_edit.meta_field_groups_list', $config);
         $contextualizer->mapConfigArray('admin_ui_forms.content_type_edit.field_types', $config);
         $contextualizer->mapSetting('admin_ui_forms.content_type_edit.default_meta_field_type_group', $config);
     }
diff --git a/src/bundle/Resources/config/admin_ui_forms.yaml b/src/bundle/Resources/config/admin_ui_forms.yaml
index c9e26dfab4..8667e680f2 100644
--- a/src/bundle/Resources/config/admin_ui_forms.yaml
+++ b/src/bundle/Resources/config/admin_ui_forms.yaml
@@ -2,7 +2,7 @@ system:
     admin_group:
         admin_ui_forms:
             content_edit:
-                meta_fieldgroup_list:
+                meta_field_groups_list:
                     - metadata
                 form_templates:
                     - { template: '@ibexadesign/content/form_fields.html.twig', priority: 0 }
diff --git a/src/lib/Component/Content/ContentEditMetaFieldsComponent.php b/src/lib/Component/Content/ContentEditMetaFieldsComponent.php
index 227a51d439..a444ab21e1 100644
--- a/src/lib/Component/Content/ContentEditMetaFieldsComponent.php
+++ b/src/lib/Component/Content/ContentEditMetaFieldsComponent.php
@@ -9,6 +9,8 @@
 namespace Ibexa\AdminUi\Component\Content;
 
 use Ibexa\Contracts\AdminUi\Component\Renderable;
+use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType;
+use Ibexa\Contracts\Core\Repository\Values\ContentType\FieldDefinitionCollection;
 use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
 use Ibexa\Core\Repository\Values\ContentType\FieldDefinition;
 use Twig\Environment;
@@ -40,22 +42,13 @@ public function render(array $parameters = []): string
         $contentType = $parameters['content_type'];
 
         $metaFieldTypeIdentifiers = $this->getMetaFieldTypeIdentifiers();
-        $metaFieldGroups = $this->configResolver->getParameter(
-            'admin_ui_forms.content_edit.meta_fieldgroup_list'
-        );
-        $metaFieldDefinitionCollection = $contentType->fieldDefinitions->filter(
-            static fn (FieldDefinition $field): bool => true === in_array($field->fieldGroup, $metaFieldGroups),
-        );
+        $metaFieldDefinitionCollection = $this->getMetaFieldDefinitionCollection($contentType);
 
         if (empty($metaFieldTypeIdentifiers) && $metaFieldDefinitionCollection->isEmpty()) {
             return self::NO_CONTENT;
         }
 
-        $metaFields = [];
-
-        foreach ($metaFieldDefinitionCollection as $fieldDefinition) {
-            $metaFields[] = $fieldDefinition->identifier;
-        }
+        $metaFields = $this->mapMetaFieldDefinitionCollectionToIdentifiers($metaFieldDefinitionCollection);
 
         foreach ($metaFieldTypeIdentifiers as $identifier) {
             $fields = $contentType->getFieldDefinitionsOfType($identifier);
@@ -84,4 +77,21 @@ private function getMetaFieldTypeIdentifiers(): array
             )
         );
     }
+
+    private function getMetaFieldDefinitionCollection(ContentType $contentType): FieldDefinitionCollection
+    {
+        $metaFieldGroups = $this->configResolver->getParameter(
+            'admin_ui_forms.content_edit.meta_field_groups_list'
+        );
+
+        return $contentType->fieldDefinitions->filter(
+            static fn (FieldDefinition $field): bool => true === in_array($field->fieldGroup, $metaFieldGroups),
+        );
+    }
+
+    private function mapMetaFieldDefinitionCollectionToIdentifiers(
+        FieldDefinitionCollection $metaFieldDefinitionCollection
+    ): array {
+        return array_column($metaFieldDefinitionCollection->toArray(), 'identifier');
+    }
 }
diff --git a/src/lib/EventListener/SetViewParametersListener.php b/src/lib/EventListener/SetViewParametersListener.php
index 3a4ae8be0a..fcc6013a59 100644
--- a/src/lib/EventListener/SetViewParametersListener.php
+++ b/src/lib/EventListener/SetViewParametersListener.php
@@ -278,7 +278,7 @@ private function getIgnoredContentFields(array $fieldsData): array
         }
 
         $metaFieldGroups = $this->configResolver->getParameter(
-            'admin_ui_forms.content_edit.meta_fieldgroup_list'
+            'admin_ui_forms.content_edit.meta_field_groups_list'
         );
         $metaFieldIdentifiers = array_keys(
             array_filter(
diff --git a/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php b/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
index 0ea40bfc49..0a827fab4b 100644
--- a/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
+++ b/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
@@ -81,6 +81,6 @@ private function getMetaFields(): array
      */
     private function getMetaFieldGroups(): array
     {
-        return $this->configResolver->getParameter('admin_ui_forms.content_edit.meta_fieldgroup_list');
+        return $this->configResolver->getParameter('admin_ui_forms.content_edit.meta_field_groups_list');
     }
 }
diff --git a/src/lib/Menu/ContentEditAnchorMenuBuilder.php b/src/lib/Menu/ContentEditAnchorMenuBuilder.php
index cfc63531f2..b1e514ba88 100644
--- a/src/lib/Menu/ContentEditAnchorMenuBuilder.php
+++ b/src/lib/Menu/ContentEditAnchorMenuBuilder.php
@@ -127,7 +127,7 @@ private function getMetaFieldItems(ContentType $contentType): array
         ));
 
         $metaFieldGroups = $this->configResolver->getParameter(
-            'admin_ui_forms.content_edit.meta_fieldgroup_list'
+            'admin_ui_forms.content_edit.meta_field_groups_list'
         );
         $metaFieldDefinitionCollection = $contentType->fieldDefinitions->filter(
             static fn (FieldDefinition $field): bool => true === in_array($field->fieldGroup, $metaFieldGroups),
diff --git a/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php b/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php
index 1a78e5b947..23b0d92a54 100644
--- a/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php
+++ b/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php
@@ -118,14 +118,14 @@ public function testContentEditFieldTypesAreMapped(): void
     }
 
     /**
-     * Test 'meta_fieldgroup_list' fieldtype settings are mapped.
+     * Test 'meta_field_groups_list' fieldtype settings are mapped.
      */
     public function testContentEditMetaFieldgroupListIsMapped(): void
     {
         $scopeSettings = [
             'admin_ui_forms' => [
                 'content_edit' => [
-                    'meta_fieldgroup_list' => [
+                    'meta_field_groups_list' => [
                         'metadata',
                         'seo',
                     ],
@@ -149,7 +149,7 @@ public function testContentEditMetaFieldgroupListIsMapped(): void
                     [],
                 ],
                 [
-                    AdminUiForms::META_FIELDGROUP_LIST_PARAM,
+                    AdminUiForms::META_FIELD_GROUPS_LIST_PARAM,
                     $currentScope,
                     ['metadata', 'seo'],
                 ],
diff --git a/tests/lib/EventListener/SetViewParametersListenerTest.php b/tests/lib/EventListener/SetViewParametersListenerTest.php
index 9efc4be3b2..9a6bb0023f 100644
--- a/tests/lib/EventListener/SetViewParametersListenerTest.php
+++ b/tests/lib/EventListener/SetViewParametersListenerTest.php
@@ -77,7 +77,7 @@ public function setUp(): void
             ->method('getParameter')
             ->withConsecutive(
                 ['admin_ui_forms.content_edit.fieldtypes'],
-                ['admin_ui_forms.content_edit.meta_fieldgroup_list']
+                ['admin_ui_forms.content_edit.meta_field_groups_list']
             )
             ->willReturnOnConsecutiveCalls(
                 [

From a26caca647290538cc29f01d80281a8c674cb877 Mon Sep 17 00:00:00 2001
From: Bartek Wajda <bartlomiej.wajda@ibexa.co>
Date: Thu, 19 Jan 2023 15:34:25 +0100
Subject: [PATCH 5/9] IBX-4629: Applied review remarks

---
 .../Content/ContentEditMetaFieldsComponent.php         |  2 +-
 src/lib/EventListener/SetViewParametersListener.php    |  7 +++++--
 .../Form/Provider/GroupedNonMetaFormFieldsProvider.php |  9 ++++++---
 src/lib/Menu/ContentEditAnchorMenuBuilder.php          | 10 ++++++----
 .../Configuration/Parser/AdminUiFormsTest.php          |  6 +++---
 5 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/src/lib/Component/Content/ContentEditMetaFieldsComponent.php b/src/lib/Component/Content/ContentEditMetaFieldsComponent.php
index a444ab21e1..dddf5972e6 100644
--- a/src/lib/Component/Content/ContentEditMetaFieldsComponent.php
+++ b/src/lib/Component/Content/ContentEditMetaFieldsComponent.php
@@ -85,7 +85,7 @@ private function getMetaFieldDefinitionCollection(ContentType $contentType): Fie
         );
 
         return $contentType->fieldDefinitions->filter(
-            static fn (FieldDefinition $field): bool => true === in_array($field->fieldGroup, $metaFieldGroups),
+            static fn (FieldDefinition $field): bool => in_array($field->fieldGroup, $metaFieldGroups, true),
         );
     }
 
diff --git a/src/lib/EventListener/SetViewParametersListener.php b/src/lib/EventListener/SetViewParametersListener.php
index fcc6013a59..627a68181a 100644
--- a/src/lib/EventListener/SetViewParametersListener.php
+++ b/src/lib/EventListener/SetViewParametersListener.php
@@ -283,8 +283,11 @@ private function getIgnoredContentFields(array $fieldsData): array
         $metaFieldIdentifiers = array_keys(
             array_filter(
                 $fieldsData,
-                static fn (FormInterface $field): bool => true
-                    === in_array($field->getData()->fieldDefinition->fieldGroup, $metaFieldGroups)
+                static fn (FormInterface $field): bool => in_array(
+                    $field->getData()->fieldDefinition->fieldGroup,
+                    $metaFieldGroups,
+                    true
+                )
             )
         );
 
diff --git a/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php b/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
index 0a827fab4b..7563d5ce5f 100644
--- a/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
+++ b/src/lib/Form/Provider/GroupedNonMetaFormFieldsProvider.php
@@ -34,8 +34,11 @@ public function getGroupedFields(array $fieldsDataForm): array
         $metaFieldIdentifiers = array_keys(
             array_filter(
                 $fieldsDataForm,
-                static fn (FormInterface $field): bool => true
-                    === in_array($field->getData()->fieldDefinition->fieldGroup, $metaFieldGroups)
+                static fn (FormInterface $field): bool => in_array(
+                    $field->getData()->fieldDefinition->fieldGroup,
+                    $metaFieldGroups,
+                    true
+                )
             )
         );
 
@@ -53,7 +56,7 @@ static function (string $fieldIdentifier) use (
                     $fieldIdentifier = $fieldData->fieldDefinition->identifier;
 
                     return !in_array($fieldTypeIdentifier, $identifiers, true)
-                        && !in_array($fieldIdentifier, $metaFieldIdentifiers);
+                        && !in_array($fieldIdentifier, $metaFieldIdentifiers, true);
                 }
             );
         }
diff --git a/src/lib/Menu/ContentEditAnchorMenuBuilder.php b/src/lib/Menu/ContentEditAnchorMenuBuilder.php
index b1e514ba88..06896a46e4 100644
--- a/src/lib/Menu/ContentEditAnchorMenuBuilder.php
+++ b/src/lib/Menu/ContentEditAnchorMenuBuilder.php
@@ -130,7 +130,7 @@ private function getMetaFieldItems(ContentType $contentType): array
             'admin_ui_forms.content_edit.meta_field_groups_list'
         );
         $metaFieldDefinitionCollection = $contentType->fieldDefinitions->filter(
-            static fn (FieldDefinition $field): bool => true === in_array($field->fieldGroup, $metaFieldGroups),
+            static fn (FieldDefinition $field): bool => in_array($field->fieldGroup, $metaFieldGroups, true),
         );
 
         $items = [];
@@ -153,9 +153,11 @@ private function getMetaFieldItems(ContentType $contentType): array
             foreach ($fieldDefinitions as $fieldDefinition) {
                 $fieldDefIdentifier = $fieldDefinition->identifier;
                 $order += self::ITEM_ORDER_SPAN;
-                if (!isset($items[$fieldDefIdentifier])) {
-                    $items[$fieldDefIdentifier] = $this->createSecondLevelItem($fieldDefIdentifier, $fieldDefinition, $order);
-                }
+                $items[$fieldDefIdentifier] ??= $this->createSecondLevelItem(
+                    $fieldDefIdentifier,
+                    $fieldDefinition,
+                    $order
+                );
             }
         }
 
diff --git a/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php b/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php
index 23b0d92a54..4d81dc2bc3 100644
--- a/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php
+++ b/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php
@@ -58,7 +58,7 @@ public function testContentEditFormTemplatesAreMapped()
         ];
 
         $this->contextualizer
-            ->expects($this->atLeast(2))
+            ->expects(self::atLeast(2))
             ->method('setContextualParameter')
             ->withConsecutive(
                 [
@@ -99,7 +99,7 @@ public function testContentEditFieldTypesAreMapped(): void
         ];
 
         $this->contextualizer
-            ->expects($this->atLeast(2))
+            ->expects(self::atLeast(2))
             ->method('setContextualParameter')
             ->withConsecutive(
                 [
@@ -135,7 +135,7 @@ public function testContentEditMetaFieldgroupListIsMapped(): void
         $currentScope = 'admin_group';
 
         $this->contextualizer
-            ->expects($this->atLeast(2))
+            ->expects(self::atLeast(2))
             ->method('setContextualParameter')
             ->withConsecutive(
                 [

From 47ffdffece70371ecc6301d58675863be848992f Mon Sep 17 00:00:00 2001
From: Bartek Wajda <bartlomiej.wajda@ibexa.co>
Date: Tue, 24 Jan 2023 12:41:04 +0100
Subject: [PATCH 6/9] IBX-4629: Added missing PHPDoc

---
 src/lib/Component/Content/ContentEditMetaFieldsComponent.php | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/lib/Component/Content/ContentEditMetaFieldsComponent.php b/src/lib/Component/Content/ContentEditMetaFieldsComponent.php
index dddf5972e6..087d1b9c24 100644
--- a/src/lib/Component/Content/ContentEditMetaFieldsComponent.php
+++ b/src/lib/Component/Content/ContentEditMetaFieldsComponent.php
@@ -89,6 +89,9 @@ private function getMetaFieldDefinitionCollection(ContentType $contentType): Fie
         );
     }
 
+    /**
+     * @return array<string>
+     */
     private function mapMetaFieldDefinitionCollectionToIdentifiers(
         FieldDefinitionCollection $metaFieldDefinitionCollection
     ): array {

From a4ad45cc1273a7148d703c96759b338a2e46b2cd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Szo=C5=82tysek?= <michal.szoltysek@ez.no>
Date: Fri, 27 Jan 2023 16:34:28 +0100
Subject: [PATCH 7/9] IBX-4629: Updated tests

---
 .../BrowserContext/ContentUpdateContext.php     | 17 +++++++++++++++++
 src/lib/Behat/Page/ContentUpdateItemPage.php    | 12 ++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/src/lib/Behat/BrowserContext/ContentUpdateContext.php b/src/lib/Behat/BrowserContext/ContentUpdateContext.php
index 8a5efeb33c..7ee326e3c4 100644
--- a/src/lib/Behat/BrowserContext/ContentUpdateContext.php
+++ b/src/lib/Behat/BrowserContext/ContentUpdateContext.php
@@ -59,6 +59,14 @@ public function theFieldCannotBeEditedDueToLimitation(string $fieldName, string
         $this->contentUpdateItemPage->verifyFieldCannotBeEditedDueToLimitation($fieldName);
     }
 
+    /**
+     * @When the :fieldName field cannot be edited due to limitation
+     */
+    public function FieldCannotBeEditedDueToLimitation(string $fieldName): void
+    {
+        $this->contentUpdateItemPage->verifyFieldCannotBeEditedDueToLimitation($fieldName);
+    }
+
     /**
      * @When I set content fields for user
      */
@@ -114,6 +122,15 @@ public function iSwitchToContentTab(string $tabName)
         $this->contentUpdateItemPage->switchToFieldGroup($tabName);
     }
 
+    /**
+     * @When I switch to :tabName field tab
+     */
+    public function iSwitchToContentGroup(string $tabName)
+    {
+        $this->contentUpdateItemPage->verifyIsLoaded();
+        $this->contentUpdateItemPage->switchToFieldTab($tabName);
+    }
+
     /**
      * @When I wait for Content Item to be autosaved
      */
diff --git a/src/lib/Behat/Page/ContentUpdateItemPage.php b/src/lib/Behat/Page/ContentUpdateItemPage.php
index 57f4c336dc..9a54836121 100644
--- a/src/lib/Behat/Page/ContentUpdateItemPage.php
+++ b/src/lib/Behat/Page/ContentUpdateItemPage.php
@@ -100,6 +100,7 @@ protected function specifyLocators(): array
             new VisibleCSSLocator('noneditableFieldClass', 'ibexa-field-edit--eznoneditable'),
             new VisibleCSSLocator('fieldOfType', '.ibexa-field-edit--%s'),
             new VisibleCSSLocator('navigationTabs', '.ibexa-anchor-navigation-menu__sections-item-btn'),
+            new VisibleCSSLocator('navigationGroups', '.ibexa-anchor-navigation-menu__section-groups-item'),
             new VisibleCSSLocator('autosaveIsOnInfo', '.ibexa-autosave__status-on'),
             new VisibleCSSLocator('autosaveSavedInfo', '.ibexa-autosave__status-saved'),
             new VisibleCSSLocator('autosaveIsOffInfo', '.ibexa-autosave__status-off'),
@@ -189,6 +190,17 @@ public function switchToFieldGroup(string $tabName): void
             ->waitUntilCondition(new ElementHasTextCondition($this->getHTMLPage(), new VisibleCSSLocator('activeSection', '.ibexa-anchor-navigation-menu__sections-item-btn--active'), $tabName));
     }
 
+    public function switchToFieldTab(string $tabName): void
+    {
+        $this->getHTMLPage()->setTimeout(3)
+            ->findAll($this->getLocator('navigationGroups'))
+            ->getByCriterion(new ElementTextCriterion($tabName))
+            ->click();
+        $this->getHTMLPage()
+            ->setTimeout(10)
+            ->waitUntilCondition(new ElementHasTextCondition($this->getHTMLPage(), new VisibleCSSLocator('activeSection', '.ibexa-anchor-navigation-menu__section-groups-item--active'), $tabName));
+    }
+
     public function verifyFieldCannotBeEditedDueToLimitation(string $fieldName)
     {
         $activeSections = $this->getHTMLPage()->findAll(new VisibleCSSLocator('activeSection', '.ibexa-anchor-navigation-menu__sections-item-btn--active'));

From be2686eeac20117049d82f576e056f3528bd3b33 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Szo=C5=82tysek?= <michal.szoltysek@ez.no>
Date: Fri, 27 Jan 2023 18:01:03 +0100
Subject: [PATCH 8/9] IBX-4629: Fixed locator

---
 src/lib/Behat/Page/ContentUpdateItemPage.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/lib/Behat/Page/ContentUpdateItemPage.php b/src/lib/Behat/Page/ContentUpdateItemPage.php
index 9a54836121..409880bd57 100644
--- a/src/lib/Behat/Page/ContentUpdateItemPage.php
+++ b/src/lib/Behat/Page/ContentUpdateItemPage.php
@@ -203,7 +203,7 @@ public function switchToFieldTab(string $tabName): void
 
     public function verifyFieldCannotBeEditedDueToLimitation(string $fieldName)
     {
-        $activeSections = $this->getHTMLPage()->findAll(new VisibleCSSLocator('activeSection', '.ibexa-anchor-navigation-menu__sections-item-btn--active'));
+        $activeSections = $this->getHTMLPage()->findAll(new VisibleCSSLocator('activeSection', '.ibexa-anchor-navigation-menu__section-groups-item--active'));
         $fieldLocator = new VisibleCSSLocator('', sprintf($this
             ->getLocator('fieldGroupNthField')->getSelector(), $activeSections->single()->getAttribute('data-target-id'), $this->getFieldPosition($fieldName)));
         $this->getHTMLPage()->find($fieldLocator)->assert()->hasClass('ibexa-field-edit--disabled');

From 3d204bc22e65edf59c3bfc23fef8abce2341e703 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Szo=C5=82tysek?= <michal.szoltysek@ez.no>
Date: Mon, 30 Jan 2023 16:04:00 +0100
Subject: [PATCH 9/9] IBX-4629: Removed redundant step

---
 src/lib/Behat/BrowserContext/ContentUpdateContext.php | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/src/lib/Behat/BrowserContext/ContentUpdateContext.php b/src/lib/Behat/BrowserContext/ContentUpdateContext.php
index 7ee326e3c4..c8f18480e7 100644
--- a/src/lib/Behat/BrowserContext/ContentUpdateContext.php
+++ b/src/lib/Behat/BrowserContext/ContentUpdateContext.php
@@ -50,19 +50,10 @@ public function verifyFieldIsNotEditable(string $fieldName): void
         Assert::assertEquals(NonEditableField::EXPECTED_NON_EDITABLE_TEXT, $field->getValue()[0]);
     }
 
-    /**
-     * @When the :fieldName field in :fieldGroup field group cannot be edited due to limitation
-     */
-    public function theFieldCannotBeEditedDueToLimitation(string $fieldName, string $fieldGroup): void
-    {
-        $this->contentUpdateItemPage->switchToFieldGroup($fieldGroup);
-        $this->contentUpdateItemPage->verifyFieldCannotBeEditedDueToLimitation($fieldName);
-    }
-
     /**
      * @When the :fieldName field cannot be edited due to limitation
      */
-    public function FieldCannotBeEditedDueToLimitation(string $fieldName): void
+    public function fieldCannotBeEditedDueToLimitation(string $fieldName): void
     {
         $this->contentUpdateItemPage->verifyFieldCannotBeEditedDueToLimitation($fieldName);
     }