Skip to content

Commit

Permalink
Make to array return same case as properties
Browse files Browse the repository at this point in the history
  • Loading branch information
keithbrink committed Apr 18, 2024
1 parent 7402a28 commit e2b94b2
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 14 deletions.
10 changes: 4 additions & 6 deletions src/Data/Base/Data.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@

namespace Jasara\AmznSPA\Data\Base;

class Data
use Illuminate\Contracts\Support\Arrayable;

class Data implements Arrayable
{
use ToArrayObject;
use ToArray;

public static function from(mixed ...$payload): static
{
Expand All @@ -18,9 +21,4 @@ public static function from(mixed ...$payload): static

return $data;
}

public function toArray(): array
{
return $this->toArrayObject()->getArrayCopy();
}
}
27 changes: 27 additions & 0 deletions src/Data/Base/ToArray.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace Jasara\AmznSPA\Data\Base;

use Illuminate\Support\Collection;
use ReflectionClass;
use ReflectionProperty;

trait ToArray
{
public function toArray(): array
{
$class = new ReflectionClass(static::class);

$data = [];
foreach ($class->getProperties(ReflectionProperty::IS_PUBLIC) as $property) {
$value = $property->getValue($this);
if ($value instanceof Collection) {
$value = $value->map(fn ($item) => $item->toArray())->toArray();
}

$data[$property->getName()] = $value;
}

return $data;
}
}
25 changes: 17 additions & 8 deletions tests/Unit/Data/Base/DataTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,32 @@
namespace Jasara\AmznSPA\Tests\Unit\Data\Base;

use Jasara\AmznSPA\Data\Base\Data;
use Jasara\AmznSPA\Data\Schemas\FulfillmentInbound\NonPartneredSmallParcelPackageOutputSchema;
use Jasara\AmznSPA\Data\Schemas\FulfillmentInbound\NonPartneredSmallParcelDataOutputSchema;
use Jasara\AmznSPA\Tests\Unit\UnitTestCase;
use PHPUnit\Framework\Attributes\CoversClass;

#[CoversClass(Data::class)]
class DataTest extends UnitTestCase
{
public function testToArrayReturnsCasedArray(): void
public function testToArrayReturnsArray(): void
{
$data = NonPartneredSmallParcelPackageOutputSchema::from(
carrier_name: 'carrier_name',
package_status: 'SHIPPED',
);
$data = NonPartneredSmallParcelDataOutputSchema::from([
'package_list' => [
[
'carrier_name' => 'carrier_name2',
'package_status' => 'IN_TRANSIT',
],
],
]);

$this->assertEquals([
'carrierName' => 'carrier_name',
'packageStatus' => 'SHIPPED',
'package_list' => [
[
'carrier_name' => 'carrier_name2',
'package_status' => 'IN_TRANSIT',
'tracking_id' => null,
],
],
], $data->toArray());
}
}

0 comments on commit e2b94b2

Please sign in to comment.