Skip to content

Commit

Permalink
ACP-4499: CI fix
Browse files Browse the repository at this point in the history
  • Loading branch information
pushokwhite committed Dec 27, 2024
1 parent 5a931f8 commit f12d67f
Show file tree
Hide file tree
Showing 10 changed files with 112 additions and 18 deletions.
34 changes: 24 additions & 10 deletions src/Spryker/Glue/AppKernel/Validator/BodyStructureValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
use Symfony\Component\Validator\Constraints\Required;
use Symfony\Component\Validator\Constraints\Type;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Throwable;

class BodyStructureValidator implements RequestValidatorInterface
{
Expand All @@ -35,24 +36,37 @@ public function validate(GlueRequestTransfer $glueRequestTransfer): GlueRequestV
->setIsValid(true)
->setStatus(Response::HTTP_OK);

$content = $this->appKernelToUtilEncodingService->decodeJson((string)$glueRequestTransfer->getContent(), true);
try {
$content = $this->appKernelToUtilEncodingService->decodeJson((string)$glueRequestTransfer->getContent(), true);
} catch (Throwable $exception) {
return $this->getFailedGlueRequestValidationTransfer($glueRequestValidationTransfer);
}

$constraintViolationList = $this->validator->validate(['content' => $content], $this->getConstraintForRequestStructure());

if ($constraintViolationList->count() > 0) {
$glueRequestValidationTransfer
->setIsValid(false)
->setStatus(Response::HTTP_UNPROCESSABLE_ENTITY);

$glueRequestValidationTransfer->addError(
(new GlueErrorTransfer())
->setCode((string)Response::HTTP_UNPROCESSABLE_ENTITY)
->setMessage(AppKernelConfig::RESPONSE_MESSAGE_VALIDATION_FORMAT_ERROR_MESSAGE),
);
return $this->getFailedGlueRequestValidationTransfer($glueRequestValidationTransfer);
}

return $glueRequestValidationTransfer;
}

protected function getFailedGlueRequestValidationTransfer(
GlueRequestValidationTransfer $glueRequestValidationTransfer
): GlueRequestValidationTransfer {
$glueRequestValidationTransfer
->setIsValid(false)
->setStatus(Response::HTTP_UNPROCESSABLE_ENTITY);

$glueRequestValidationTransfer->addError(
(new GlueErrorTransfer())
->setCode((string)Response::HTTP_UNPROCESSABLE_ENTITY)
->setMessage(AppKernelConfig::RESPONSE_MESSAGE_VALIDATION_FORMAT_ERROR_MESSAGE),
);

return $glueRequestValidationTransfer;
}

protected function getConstraintForRequestStructure(): Collection
{
return new Collection([
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,25 @@ public function testPostConfigureReturnsErrorResponseWhenRequestBodyHasInvalidSt
$this->tester->assertAppConfigIsNotPersisted('tenant-identifier');
}

/**
* @dataProvider invalidConfigRequestFixtures
*
* @return void
*/
public function testPostConfigureReturnsErrorResponseWhenRequestBodyIsMissingConfiguration(string $fixtureName): void
{
// Arrange
$glueRequest = $this->tester->createGlueRequestFromFixture($fixtureName);
$appConfigController = $this->tester->createAppConfigController();

// Act
$glueResponse = $appConfigController->postConfigureAction($glueRequest);

// Assert
$this->tester->assertGlueResponseContainsErrorMessageWhenRequestBodyHasInvalidStructure($glueResponse);
$this->tester->assertAppConfigIsNotPersisted('tenant-identifier');
}

/**
* @throws \Exception
*
Expand Down Expand Up @@ -576,4 +595,18 @@ public function testDisconnectAppForAnExistingTenantDeactivatesAppConfiguration(
$this->assertSame(204, $response->getStatusCode());
$this->tester->assertAppConfigurationForTenantIsDeactivated($tenantIdentifier);
}

protected function invalidConfigRequestFixtures(): array
{
return [
'invalid-config-request-body-null' => ['invalid-config-request-body-null'],
'invalid-config-request-body-non-json-object' => ['invalid-config-request-body-non-json-object'],
'invalid-config-request-body-missing-data' => ['invalid-config-request-body-missing-data'],
'invalid-config-request-body-empty-data' => ['invalid-config-request-body-empty-data'],
'invalid-config-request-body-invalid-data-type' => ['invalid-config-request-body-invalid-data-type'],
'invalid-config-request-body-empty-data-attributes' => ['invalid-config-request-body-empty-data-attributes'],
'invalid-config-request-body-missing-data-attributes-configuration' => ['invalid-config-request-body-missing-data-attributes-configuration'],
'invalid-config-request-body-empty-data-attributes-configuration' => ['invalid-config-request-body-empty-data-attributes-configuration'],
];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"data": {
"type": "configuration",
"attributes": {
"configuration": ""
"configuration": null
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,8 @@
"content": {
"data": {
"type": "configuration",
"attributes": {
"configuration": ""
}
"attributes": {}
}
},
"__configurationPayload": {
"clientId": [],
"clientSecret": []
}
"__configurationPayload": {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"meta": {
"x-tenant-identifier": ["tenant-identifier"]
},
"content": {
"data": {}
},
"__configurationPayload": {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"meta": {
"x-tenant-identifier": ["tenant-identifier"]
},
"content": {
"data": {
"type": "invalid-data-type"
}
},
"__configurationPayload": {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"meta": {
"x-tenant-identifier": ["tenant-identifier"]
},
"content": {
"data": {
"type": "configuration"
}
},
"__configurationPayload": {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"meta": {
"x-tenant-identifier": ["tenant-identifier"]
},
"content": {},
"__configurationPayload": {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"meta": {
"x-tenant-identifier": ["tenant-identifier"]
},
"content": "null",
"__configurationPayload": {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"meta": {
"x-tenant-identifier": ["tenant-identifier"]
},
"content": null,
"__configurationPayload": {}
}

0 comments on commit f12d67f

Please sign in to comment.