Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: support both snake_case and camelCase versions of impression data #227

Closed
wants to merge 13 commits into from
11 changes: 8 additions & 3 deletions src/DTO/DefaultProxyFeature.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
* value: string
* }
* },
* impression_data: bool
* impression_data?: bool,
* impressionData?: bool
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One will be set, the other won't, we don't know which one because it depends on the version of the backend

* } $response
*/
public function __construct(array $response)
Expand All @@ -37,12 +38,15 @@
// tries to new this up manually and isn't interesting to tests

// @codeCoverageIgnoreStart
assert(isset($response['name'], $response['enabled'], $response['variant'], $response['impression_data']));
assert(
isset($response['name'], $response['enabled'], $response['variant'])
&& (isset($response['impressionData']) || isset($response['impression_data']))
);
// @codeCoverageIgnoreEnd

$this->name = $response['name'];
$this->enabled = $response['enabled'];
$this->impressionData = $response['impression_data'];
$this->impressionData = $response['impressionData'] ?? $response['impression_data'];

Check failure on line 49 in src/DTO/DefaultProxyFeature.php

View workflow job for this annotation

GitHub Actions / Static analysis (8.3)

Offset 'impression_data' does not exist on array{name: string, enabled: bool, variant: array{name: string, enabled: bool, payload?: array{type: string, value: string}}, impression_data?: bool, impressionData?: bool}.

$payload = null;

Expand Down Expand Up @@ -88,6 +92,7 @@
'enabled' => $this->enabled,
'variant' => $this->variant,
'impression_data' => $this->impressionData,
'impressionData' => $this->impressionData, // maybe we don't need this
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm unsure what are we using this serialization for... maybe caching?

];
}
}
7 changes: 4 additions & 3 deletions src/Repository/DefaultUnleashProxyRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -153,16 +153,17 @@
* value: string
* }
* },
* impression_data: bool
* impression_data?: bool,
* impressionData?: bool
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One will be set, the other won't, we don't know which one because it depends on the version of the backend

* }|null
*/
private function validateResponse(array $response): ?array
{
if (!isset($response['name'], $response['enabled'], $response['variant'], $response['impression_data'])) {
if (!isset($response['name'], $response['enabled'], $response['variant']) && !(isset($response['impressionData']) || isset($response['impression_data']))) {
return null;
}

if (!is_string($response['name']) || !is_bool($response['enabled']) || !is_bool($response['impression_data']) || !is_array($response['variant'])) {
if (!is_string($response['name']) || !is_bool($response['enabled']) || !is_bool($response['impressionData']) || !is_array($response['variant'])) {
gastonfournier marked this conversation as resolved.
Show resolved Hide resolved
return null;
}

Expand All @@ -174,6 +175,6 @@
return null;
}

return $response;

Check failure on line 178 in src/Repository/DefaultUnleashProxyRepository.php

View workflow job for this annotation

GitHub Actions / Static analysis (8.3)

Method Unleash\Client\Repository\DefaultUnleashProxyRepository::validateResponse() should return array{name: string, enabled: bool, variant: array{name: string, enabled: bool, payload?: array{type: string, value: string}}, impression_data?: bool, impressionData?: bool}|null but returns array<string, mixed>.
}
}
6 changes: 3 additions & 3 deletions tests/DTO/DefaultProxyFeatureTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ final class DefaultProxyFeatureTest extends TestCase
{
public function testGetProperties()
{
$instance = new DefaultProxyFeature(['name' => 'test', 'enabled' => true, 'impression_data' => true, 'variant' => ['name' => 'someVariant', 'enabled' => true, 'payload' => ['type' => 'string', 'value' => 'test']]]);
$instance = new DefaultProxyFeature(['name' => 'test', 'enabled' => true, 'impressionData' => true, 'variant' => ['name' => 'someVariant', 'enabled' => true, 'payload' => ['type' => 'string', 'value' => 'test']]]);
RikudouSage marked this conversation as resolved.
Show resolved Hide resolved
self::assertIsString($instance->getName());
self::assertIsBool($instance->isEnabled());
self::assertIsBool($instance->hasImpressionData());
Expand All @@ -24,8 +24,8 @@ public function testGetProperties()

public function testToJson()
{
$instance = new DefaultProxyFeature(['name' => 'test', 'enabled' => true, 'impression_data' => true, 'variant' => ['name' => 'someVariant', 'enabled' => true, 'payload' => ['type' => 'string', 'value' => 'test']]]);
$instance = new DefaultProxyFeature(['name' => 'test', 'enabled' => true, 'impressionData' => true, 'variant' => ['name' => 'someVariant', 'enabled' => true, 'payload' => ['type' => 'string', 'value' => 'test']]]);
$json = json_encode($instance);
self::assertEquals('{"name":"test","enabled":true,"variant":{"name":"someVariant","enabled":true,"payload":{"type":"string","value":"test"}},"impression_data":true}', $json);
self::assertEquals('{"name":"test","enabled":true,"variant":{"name":"someVariant","enabled":true,"payload":{"type":"string","value":"test"}},"impression_data":true,"impressionData":true}', $json);
}
}
16 changes: 8 additions & 8 deletions tests/DefaultProxyUnleashTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public function testBasicResolveFeature()
'name' => 'some-variant',
'enabled' => true,
],
'impression_data' => false,
'impressionData' => false,
]);
$unleash = $builder->build();

Expand Down Expand Up @@ -89,7 +89,7 @@ public function testBasicResolveVariant()
],
'enabled' => true,
],
'impression_data' => false,
'impressionData' => false,
]);
$unleash = $builder->build();
$variant = $unleash->getVariant('test');
Expand All @@ -107,7 +107,7 @@ public function testVariantWithoutPayload()
'name' => 'some-variant',
'enabled' => true,
],
'impression_data' => false,
'impressionData' => false,
]);
$unleash = $builder->build();
$variant = $unleash->getVariant('test');
Expand Down Expand Up @@ -138,7 +138,7 @@ public function testVariantWithNullPayload()
'payload' => null,
'enabled' => true,
],
'impression_data' => false,
'impressionData' => false,
]);
$unleash = $builder->build();
$variant = $unleash->getVariant('test');
Expand All @@ -159,7 +159,7 @@ public function testCachingIsRespected()
'name' => 'some-variant',
'enabled' => true,
],
'impression_data' => false,
'impressionData' => false,
]);

$builder = new TestBuilder();
Expand Down Expand Up @@ -236,15 +236,15 @@ public function testPoisonedResponsesReturnFalse()
'name' => 'some-variant',
'enabled' => true,
],
'impression_data' => false,
'impressionData' => false,
],
[
'name' => 'test',
'enabled' => true,
'variant' => [
'poisoned' => 'variant',
],
'impression_data' => false,
'impressionData' => false,
],
[
'name' => 'test',
Expand All @@ -257,7 +257,7 @@ public function testPoisonedResponsesReturnFalse()
'value' => 'stuff',
],
],
'impression_data' => false,
'impressionData' => false,
],
];

Expand Down
4 changes: 2 additions & 2 deletions tests/Repository/DefaultUnleashProxyRepositoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public function test200ResponseResolvesCorrectly()
],
'enabled' => true,
],
'impression_data' => false,
'impressionData' => false,
])
),
]);
Expand Down Expand Up @@ -112,7 +112,7 @@ public function testCacheTtlIsRespected()
],
'enabled' => true,
],
'impression_data' => false,
'impressionData' => false,
]);

$mock = new MockHandler([
Expand Down
Loading