Skip to content
This repository has been archived by the owner on Nov 1, 2022. It is now read-only.

Commit

Permalink
Merge pull request #168 from pikant/master
Browse files Browse the repository at this point in the history
Added tests for automatic casting of nullable nested array DTOs
  • Loading branch information
brendt committed Feb 24, 2021
2 parents 2625a59 + d6601d3 commit d0c5b71
Show file tree
Hide file tree
Showing 3 changed files with 161 additions and 0 deletions.
50 changes: 50 additions & 0 deletions tests/NestedArrayDataTransferObjectTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

declare(strict_types=1);

namespace Spatie\DataTransferObject\Tests;

use Spatie\DataTransferObject\DataTransferObject;

class NestedArrayDataTransferObjectTest extends TestCase
{
/** @test */
public function it_can_validate_nested_arrays()
{
$a = new WrapperDtoPropertyType([
'arr' => [
['name' => 'test',],
['name' => 'test2',]
],
]);

$this->assertEquals('test', $a->arr[0]->name);
$this->assertEquals('test2', $a->arr[1]->name);
$this->assertEquals(
NestedArrayDtoPropertyType::class,
get_class($a->arr[0])
);
}

/** @test */
public function it_can_handle_empty_arrays()
{
$a = new WrapperDtoPropertyType([
'arr' => [],
]);

$this->assertIsArray($a->arr);
$this->assertEmpty($a->arr);
}
}

class WrapperDtoPropertyType extends DataTransferObject
{
/** @var \Spatie\DataTransferObject\Tests\NestedArrayDtoPropertyType[] */
public array $arr;
}

class NestedArrayDtoPropertyType extends DataTransferObject
{
public string $name;
}
51 changes: 51 additions & 0 deletions tests/NestedNullableArrayDataTransferObjectTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php

declare(strict_types=1);

namespace Spatie\DataTransferObject\Tests;

use Spatie\DataTransferObject\DataTransferObject;

class NestedNullableArrayDataTransferObjectTest extends TestCase
{
/** @test */
public function it_can_validate_nested_arrays()
{
$a = new WrapperWithNullableArrayDtoPropertyType([
'arr' => [
['name' => 'test',],
['name' => 'test2',]
],
]);

$this->assertEquals('test', $a->arr[0]->name);
$this->assertEquals('test2', $a->arr[1]->name);
}

/** @test */
public function it_can_handle_empty_arrays()
{
$a = new WrapperWithNullableArrayDtoPropertyType([
'arr' => [],
]);

$this->assertIsArray($a->arr);
$this->assertEmpty($a->arr);
}

/** @test */
public function it_fails_on_null()
{
$a = new WrapperWithNullableArrayDtoPropertyType([
'arr' => null,
]);

$this->assertNull($a->arr);
}
}

class WrapperWithNullableArrayDtoPropertyType extends DataTransferObject
{
/** @var \Spatie\DataTransferObject\Tests\NestedArrayDtoPropertyType[]|null */
public ?array $arr;
}
60 changes: 60 additions & 0 deletions tests/NestedNullableArrayFlexibleDataTransferObjectTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<?php

declare(strict_types=1);

namespace Spatie\DataTransferObject\Tests;

use Spatie\DataTransferObject\DataTransferObject;
use Spatie\DataTransferObject\FlexibleDataTransferObject;

class NestedNullableArrayFlexibleDataTransferObjectTest extends TestCase
{
/** @test */
public function it_can_validate_nested_arrays()
{
$a = new FlexibleWrapperWithNullableArrayDtoPropertyType([
'arr' => [
['name' => 'test',],
['name' => 'test2',]
],
]);

$this->assertEquals('test', $a->arr[0]->name);
$this->assertEquals('test2', $a->arr[1]->name);
}

/** @test */
public function it_can_handle_empty_arrays()
{
$a = new FlexibleWrapperWithNullableArrayDtoPropertyType([
'arr' => [],
]);

$this->assertIsArray($a->arr);
$this->assertEmpty($a->arr);
}

/** @test */
public function it_fails_on_null()
{
$a = new FlexibleWrapperWithNullableArrayDtoPropertyType([
'arr' => null,
]);

$this->assertNull($a->arr);
}

/** @test */
public function it_fails_on_missing()
{
$a = new FlexibleWrapperWithNullableArrayDtoPropertyType([]);

$this->assertNull($a->arr);
}
}

class FlexibleWrapperWithNullableArrayDtoPropertyType extends FlexibleDataTransferObject
{
/** @var \Spatie\DataTransferObject\Tests\NestedArrayDtoPropertyType[]|null */
public ?array $arr;
}

0 comments on commit d0c5b71

Please sign in to comment.