From 536678c2cd7c129ad8e9caffa94d364b197787bd Mon Sep 17 00:00:00 2001 From: zajca Date: Tue, 18 Jun 2024 12:59:19 +0200 Subject: [PATCH 1/2] php 8.1+ DatatypeSupport enum --- .github/workflows/push.yml | 5 +---- composer.json | 2 +- src/Config/BaseConfig.php | 6 +++--- src/Config/DatatypeSupport.php | 17 +++++++++++++++++ tests/Config/BaseConfigTest.php | 7 ++++--- 5 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 src/Config/DatatypeSupport.php diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 8170f99..d3d90b8 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -15,11 +15,8 @@ jobs: strategy: fail-fast: false matrix: - phpVersion: [7.4, 8.0, 8.1] + phpVersion: [8.1, 8.2, 8.3] symfonyVersion: ["5.4.*", "6.1.*"] - exclude: - - phpVersion: 7.4 - symfonyVersion: "6.1.*" steps: - diff --git a/composer.json b/composer.json index f395685..44b084e 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ } }, "require": { - "php": "^7.4|^8.0", + "php": ">=8.1", "ext-json": "*", "keboola/common-exceptions": "^1.2", "monolog/monolog": "^2.3", diff --git a/src/Config/BaseConfig.php b/src/Config/BaseConfig.php index 9e703e6..5b088c6 100644 --- a/src/Config/BaseConfig.php +++ b/src/Config/BaseConfig.php @@ -290,12 +290,12 @@ public function getEnvKbcUrl(): string return (string) $env; } - public function getDataTypeSupport(): string + public function getDataTypeSupport(): DatatypeSupport { $env = getenv('KBC_DATA_TYPE_SUPPORT'); if (!$env) { - return 'none'; + return DatatypeSupport::NONE; } - return $this->getStringValue(['storage', 'output', 'data_type_support'], (string) $env); + return DatatypeSupport::from($this->getStringValue(['storage', 'output', 'data_type_support'], (string) $env)); } } diff --git a/src/Config/DatatypeSupport.php b/src/Config/DatatypeSupport.php new file mode 100644 index 0000000..451ec24 --- /dev/null +++ b/src/Config/DatatypeSupport.php @@ -0,0 +1,17 @@ +getValue(['parameters', 'ipsum', 'dolor']), ); $this->assertEquals( - 'hint', + DatatypeSupport::HINT, $config->getDataTypeSupport(), ); } @@ -325,9 +326,9 @@ public function testEnvGetters(array $envs): void } if (!isset($envs['KBC_DATA_TYPE_SUPPORT'])) { - Assert::assertEquals('none', $config->getDataTypeSupport()); + Assert::assertEquals(DatatypeSupport::NONE, $config->getDataTypeSupport()); } else { - Assert::assertEquals($envs['KBC_DATA_TYPE_SUPPORT'], $config->getDataTypeSupport()); + Assert::assertEquals(DatatypeSupport::from($envs['KBC_DATA_TYPE_SUPPORT']), $config->getDataTypeSupport()); } foreach ($envs as $env => $value) { From 42ee7033487cd93361a8bca5af87db9386e7615d Mon Sep 17 00:00:00 2001 From: zajca Date: Tue, 18 Jun 2024 13:38:39 +0200 Subject: [PATCH 2/2] getDataTypeSupport handle invalid input --- src/Config/BaseConfig.php | 10 +++++++-- tests/Config/BaseConfigTest.php | 36 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/Config/BaseConfig.php b/src/Config/BaseConfig.php index 5b088c6..6c04858 100644 --- a/src/Config/BaseConfig.php +++ b/src/Config/BaseConfig.php @@ -290,12 +290,18 @@ public function getEnvKbcUrl(): string return (string) $env; } - public function getDataTypeSupport(): DatatypeSupport + public function getDataTypeSupport(): ?DatatypeSupport { $env = getenv('KBC_DATA_TYPE_SUPPORT'); if (!$env) { return DatatypeSupport::NONE; } - return DatatypeSupport::from($this->getStringValue(['storage', 'output', 'data_type_support'], (string) $env)); + $datatypeSupport = DatatypeSupport::tryFrom($this->getStringValue([ + 'storage', + 'output', + 'data_type_support', + ], (string) $env)); + + return $datatypeSupport ?? DatatypeSupport::from((string) $env); } } diff --git a/tests/Config/BaseConfigTest.php b/tests/Config/BaseConfigTest.php index 0081edb..51e479a 100644 --- a/tests/Config/BaseConfigTest.php +++ b/tests/Config/BaseConfigTest.php @@ -246,6 +246,42 @@ protected function getParametersDefinition(): ArrayNodeDefinition ); } + public function testGetDataTypeSupportUserInvalidInput(): void + { + putenv('KBC_DATA_TYPE_SUPPORT=authoritative'); + $config = new BaseConfig([ + 'storage' => [ + 'output' => [ + 'data_type_support' => 'I\'m invalid', + 'files' => [], + ], + ], + ], new BaseConfigDefinition); + + $this->assertEquals( + DatatypeSupport::AUTHORITATIVE, // from env + $config->getDataTypeSupport(), + ); + } + + public function testGetDataTypeSupportNoEnvUserInvalidInput(): void + { + putenv('KBC_DATA_TYPE_SUPPORT='); + $config = new BaseConfig([ + 'storage' => [ + 'output' => [ + 'data_type_support' => 'I\'m invalid', + 'files' => [], + ], + ], + ], new BaseConfigDefinition); + + $this->assertEquals( + DatatypeSupport::NONE, // default when env not setZ + $config->getDataTypeSupport(), + ); + } + /** * @dataProvider envGettersDataProvider */