Skip to content

Commit

Permalink
Test cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
rubenvanassche committed Jan 15, 2024
1 parent 443439d commit 0fc8124
Show file tree
Hide file tree
Showing 34 changed files with 2,656 additions and 2,506 deletions.
11 changes: 0 additions & 11 deletions src/Concerns/DefaultableData.php

This file was deleted.

2 changes: 1 addition & 1 deletion src/Contracts/DataObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@

use Illuminate\Contracts\Support\Responsable;

interface DataObject extends Responsable, AppendableData, BaseData, TransformableData, IncludeableData, ResponsableData, ValidateableData, WrappableData, EmptyData, DefaultableData
interface DataObject extends Responsable, AppendableData, BaseData, TransformableData, IncludeableData, ResponsableData, ValidateableData, WrappableData, EmptyData
{
}
8 changes: 0 additions & 8 deletions src/Contracts/DefaultableData.php

This file was deleted.

1 change: 0 additions & 1 deletion src/Data.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,4 @@ abstract class Data implements DataObject
use BaseData;
use EmptyData;
use ContextableData;
use DefaultableData;
}
12 changes: 1 addition & 11 deletions src/DataPipes/DefaultValuesDataPipe.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,10 @@ public function handle(
Collection $properties,
CreationContext $creationContext
): Collection {
$dataDefaults = $class->defaultable
? app()->call([$class->name, 'defaults'])
: [];

$class
->properties
->filter(fn (DataProperty $property) => ! $properties->has($property->name))
->each(function (DataProperty $property) use ($dataDefaults, &$properties) {
if (array_key_exists($property->name, $dataDefaults)) {
$properties[$property->name] = $dataDefaults[$property->name];

return;
}

->each(function (DataProperty $property) use (&$properties) {
if ($property->hasDefaultValue) {
$properties[$property->name] = $property->defaultValue;

Expand Down
5 changes: 1 addition & 4 deletions src/Dto.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,12 @@
namespace Spatie\LaravelData;

use Spatie\LaravelData\Concerns\BaseData;
use Spatie\LaravelData\Concerns\DefaultableData;
use Spatie\LaravelData\Concerns\ValidateableData;
use Spatie\LaravelData\Contracts\BaseData as BaseDataContract;
use Spatie\LaravelData\Contracts\DefaultableData as DefaultDataContract;
use Spatie\LaravelData\Contracts\ValidateableData as ValidateableDataContract;

class Dto implements ValidateableDataContract, BaseDataContract, DefaultDataContract
class Dto implements ValidateableDataContract, BaseDataContract
{
use ValidateableData;
use BaseData;
use DefaultableData;
}
3 changes: 1 addition & 2 deletions src/Resource.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
use Spatie\LaravelData\Contracts\TransformableData as TransformableDataContract;
use Spatie\LaravelData\Contracts\WrappableData as WrappableDataContract;

class Resource implements BaseDataContract, AppendableDataContract, IncludeableDataContract, ResponsableDataContract, TransformableDataContract, WrappableDataContract, EmptyDataContract, DefaultDataContract
class Resource implements BaseDataContract, AppendableDataContract, IncludeableDataContract, ResponsableDataContract, TransformableDataContract, WrappableDataContract, EmptyDataContract
{
use BaseData;
use AppendableData;
Expand All @@ -30,5 +30,4 @@ class Resource implements BaseDataContract, AppendableDataContract, IncludeableD
use WrappableData;
use EmptyData;
use ContextableData;
use DefaultableData;
}
2 changes: 0 additions & 2 deletions src/Support/DataClass.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ public function __construct(
public readonly bool $responsable,
public readonly bool $transformable,
public readonly bool $validateable,
public readonly bool $defaultable,
public readonly bool $wrappable,
public readonly bool $emptyData,
public readonly Collection $attributes,
Expand Down Expand Up @@ -107,7 +106,6 @@ public static function create(ReflectionClass $class): self
responsable: $responsable,
transformable: $class->implementsInterface(TransformableData::class),
validateable: $class->implementsInterface(ValidateableData::class),
defaultable: $class->implementsInterface(DefaultableData::class),
wrappable: $class->implementsInterface(WrappableData::class),
emptyData: $class->implementsInterface(EmptyData::class),
attributes: $attributes,
Expand Down
86 changes: 86 additions & 0 deletions tests/AppendTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<?php

use Spatie\LaravelData\Data;

it('can append data via method overwriting', function () {
$data = new class ('Freek') extends Data {
public function __construct(public string $name)
{
}

public function with(): array
{
return ['alt_name' => "{$this->name} from Spatie"];
}
};

expect($data->toArray())->toMatchArray([
'name' => 'Freek',
'alt_name' => 'Freek from Spatie',
]);
});

it('can append data via method overwriting with closures', function () {
$data = new class ('Freek') extends Data {
public function __construct(public string $name)
{
}

public function with(): array
{
return [
'alt_name' => static function (self $data) {
return $data->name.' from Spatie via closure';
},
];
}
};

expect($data->toArray())->toMatchArray([
'name' => 'Freek',
'alt_name' => 'Freek from Spatie via closure',
]);
});

it('can append data via method call', function () {
$data = new class ('Freek') extends Data {
public function __construct(public string $name)
{
}
};

$transformed = $data->additional([
'company' => 'Spatie',
'alt_name' => fn (Data $data) => "{$data->name} from Spatie",
])->toArray();

expect($transformed)->toMatchArray([
'name' => 'Freek',
'company' => 'Spatie',
'alt_name' => 'Freek from Spatie',
]);
});


test('when using additional method and with method the additional method will be prioritized', function () {
$data = new class ('Freek') extends Data {
public function __construct(public string $name)
{
}

public function with(): array
{
return [
'alt_name' => static function (self $data) {
return $data->name.' from Spatie via closure';
},
];
}
};

expect($data->additional(['alt_name' => 'I m Freek from additional'])->toArray())->toMatchArray([
'name' => 'Freek',
'alt_name' => 'I m Freek from additional',
]);
});

17 changes: 17 additions & 0 deletions tests/Casts/DateTimeInterfaceCastTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Carbon\CarbonTimeZone;
use Spatie\LaravelData\Attributes\WithCast;
use Spatie\LaravelData\Casts\DateTimeInterfaceCast;
use Spatie\LaravelData\Casts\Uncastable;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Support\Creation\CreationContextFactory;
use Spatie\LaravelData\Support\DataProperty;

Expand Down Expand Up @@ -191,3 +193,18 @@
->format('Y-m-d H:i:s')->toEqual('1994-05-19 00:00:00')
->getTimezone()->toEqual(new DateTimeZone('Europe/Brussels'));
});

it('can define multiple date formats to be used', function () {
$data = new class () extends Data {
public function __construct(
#[WithCast(DateTimeInterfaceCast::class, ['Y-m-d\TH:i:sP', 'Y-m-d H:i:s'])]
public ?DateTime $date = null
) {
}
};

expect($data::from(['date' => '2022-05-16T14:37:56+00:00']))->toArray()
->toMatchArray(['date' => '2022-05-16T14:37:56+00:00'])
->and($data::from(['date' => '2022-05-16 17:00:00']))->toArray()
->toMatchArray(['date' => '2022-05-16T17:00:00+00:00']);
});
Loading

0 comments on commit 0fc8124

Please sign in to comment.