Skip to content

Commit 1afca52

Browse files
pabloelcolombianoishanvyas22
authored andcommitted
PB-41252 fixes the rendering of entities when the v5 flag is down
1 parent 16f88f6 commit 1afca52

File tree

5 files changed

+45
-20
lines changed

5 files changed

+45
-20
lines changed

plugins/PassboltCe/Metadata/src/Service/Folders/MetadataFoldersRenderService.php

+9-5
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,21 @@ public function renderFolder(array $folder, bool $isV5): array
4848
public function renderFolders(array $folders): array
4949
{
5050
$isV5Enabled = Configure::read('passbolt.v5.enabled');
51-
foreach ($folders as $key => &$folder) {
51+
$result = [];
52+
53+
foreach ($folders as $folder) {
5254
// For performance reason, the detection of a v5 resource is made on the
5355
// presence of metadata
5456
$isV5 = !empty($folder['metadata']);
57+
58+
// Do not return v5 resource if v5 flag is disabled
5559
if ($isV5 && !$isV5Enabled) {
56-
unset($folders[$key]);
57-
} else {
58-
$folder = $this->renderFolder($folder, $isV5);
60+
continue;
5961
}
62+
63+
$result[] = $this->renderFolder($folder, $isV5);
6064
}
6165

62-
return $folders;
66+
return $result;
6367
}
6468
}

plugins/PassboltCe/Metadata/src/Service/MetadataResourcesRenderService.php

+9-5
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,21 @@ public function renderResource(array $resource, bool $isV5): array
4848
public function renderResources(array $resources): array
4949
{
5050
$isV5Enabled = Configure::read('passbolt.v5.enabled');
51-
foreach ($resources as $i => &$resource) {
51+
$result = [];
52+
53+
foreach ($resources as $resource) {
5254
// For performance reason, the detection of a v5 resource is made on the
5355
// presence of metadata
5456
$isResourceV5 = !empty($resource[MetadataResourceDto::METADATA]);
57+
58+
// Do not return v5 resource if v5 flag is disabled
5559
if ($isResourceV5 && !$isV5Enabled) {
56-
unset($resources[$i]);
57-
} else {
58-
$resource = $this->renderResource($resource, $isResourceV5);
60+
continue;
5961
}
62+
63+
$result[] = $this->renderResource($resource, $isResourceV5);
6064
}
6165

62-
return $resources;
66+
return $result;
6367
}
6468
}

plugins/PassboltCe/Metadata/tests/TestCase/Controller/Folders/MetadataFoldersIndexControllerTest.php

+21
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
use App\Test\Factory\GpgkeyFactory;
2121
use App\Test\Factory\UserFactory;
2222
use App\Test\Lib\AppIntegrationTestCaseV5;
23+
use Cake\Core\Configure;
2324
use Passbolt\Folders\FoldersPlugin;
2425
use Passbolt\Folders\Test\Factory\FolderFactory;
26+
use Passbolt\Metadata\Model\Dto\MetadataFolderDto;
2527
use Passbolt\Metadata\Test\Factory\MetadataKeyFactory;
2628
use Passbolt\Metadata\Test\Utility\GpgMetadataKeysTestTrait;
2729

@@ -286,4 +288,23 @@ public function testMetadataFoldersIndexController_Success_FilterHasParent()
286288
$this->assertSame($metadata, $result['metadata']);
287289
$this->assertSame($parentFolder->get('id'), $result['folder_parent_id']);
288290
}
291+
292+
public function testMetadataFoldersIndexController_Metadata_Disabled_Success(): void
293+
{
294+
Configure::write('passbolt.v5.enabled', false);
295+
296+
$user = $this->logInAsUser();
297+
FolderFactory::make(3)->withPermissionsFor([$user])->persist();
298+
FolderFactory::make(3)->withPermissionsFor([$user])->v5Fields([
299+
'metadata' => 'foo',
300+
])->persist();
301+
302+
$this->getJson('/folders.json?sort=Folders.modified');
303+
$this->assertSuccess();
304+
$response = (array)json_decode(json_encode($this->_responseJsonBody), true);
305+
$this->assertCount(3, $response);
306+
$this->assertSame([0, 1, 2], array_keys($response));
307+
$folderV4 = array_pop($response);
308+
$this->assertArrayHasAttributes(MetadataFolderDto::V4_META_PROPS, $folderV4);
309+
}
289310
}

plugins/PassboltCe/Metadata/tests/TestCase/Controller/Resources/MetadataResourcesIndexControllerTest.php

+6-5
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,14 @@ public function testMetadataResourcesIndexController_Metadata_Disabled_Success()
5656
Configure::write('passbolt.v5.enabled', false);
5757

5858
$user = $this->logInAsUser();
59-
ResourceFactory::make()->withPermissionsFor([$user])->persist();
60-
ResourceFactory::make()->withPermissionsFor([$user])->v5Fields()->persist();
59+
ResourceFactory::make(3)->withPermissionsFor([$user])->persist();
60+
ResourceFactory::make(3)->withPermissionsFor([$user])->v5Fields()->persist();
6161

62-
$this->getJson('/resources.json');
62+
$this->getJson('/resources.json?sort=Resources.modified');
6363
$this->assertSuccess();
64-
$response = json_decode(json_encode($this->_responseJsonBody), true);
65-
$this->assertCount(1, $response);
64+
$response = (array)json_decode(json_encode($this->_responseJsonBody), true);
65+
$this->assertCount(3, $response);
66+
$this->assertSame([0, 1, 2], array_keys($response));
6667
$resourceV4 = array_pop($response);
6768
$this->assertArrayHasAttributes(MetadataResourceDto::V4_META_PROPS, $resourceV4);
6869
}

psalm-baseline-v5-upgrade.xml

-5
Original file line numberDiff line numberDiff line change
@@ -495,11 +495,6 @@
495495
<code><![CDATA[MetadataTypesSettingsFactory]]></code>
496496
</MethodSignatureMismatch>
497497
</file>
498-
<file src="plugins/PassboltCe/Metadata/tests/TestCase/Controller/Resources/MetadataResourcesIndexControllerTest.php">
499-
<InvalidArgument>
500-
<code><![CDATA[$response]]></code>
501-
</InvalidArgument>
502-
</file>
503498
<file src="plugins/PassboltCe/Mobile/src/Model/Table/TransfersTable.php">
504499
<ImplementedParamTypeMismatch>
505500
<code><![CDATA[\Passbolt\Mobile\Model\Entity\Transfer get($primaryKey, ?array $options = [])]]></code>

0 commit comments

Comments
 (0)