Skip to content

Commit

Permalink
Merge pull request #16 from TheM1984/bugfix/eloquent-visibility-not-used
Browse files Browse the repository at this point in the history
Bugfix/eloquent visibility not used
  • Loading branch information
fulopattila122 committed Sep 25, 2023
2 parents b3d4ec4 + d844e27 commit 029052e
Show file tree
Hide file tree
Showing 5 changed files with 135 additions and 1 deletion.
5 changes: 5 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
# Changelog
### Konekt Enum Eloquent

## Unreleased
##### 2023-XX-YY

- Fixed issue where CastEnum did not take in account hidden or visible properties from Eloquent

## 1.9.0
##### 2023-02-16

Expand Down
6 changes: 5 additions & 1 deletion src/CastsEnums.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,11 @@ public function setAttribute($key, $value)
*/
public function attributesToArray()
{
return $this->addEnumAttributesToArray(parent::attributesToArray());
return $this->getArrayableItems(
$this->addEnumAttributesToArray(
parent::attributesToArray()
)
);
}

/**
Expand Down
62 changes: 62 additions & 0 deletions tests/EnumToArrayTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
use Konekt\Enum\Eloquent\Tests\Models\OrderStatus;
use Konekt\Enum\Eloquent\Tests\Models\OrderStatusV2;
use Konekt\Enum\Eloquent\Tests\Models\OrderV2;
use Konekt\Enum\Eloquent\Tests\Models\Visibility;
use Konekt\Enum\Eloquent\Tests\Models\VisibilityTalk;

class EnumToArrayTest extends TestCase
{
Expand Down Expand Up @@ -129,4 +131,64 @@ public function returns_enum_v2_default_string_value_when_attribute_is_null()
$this->assertIsString($array['status']);
$this->assertEquals($array['status'], OrderStatusV2::__default);
}

/** @test */
public function returns_no_enum_if_hidden()
{
$normal = new Visibility([
'number' => 'na321',
'talk1' => VisibilityTalk::BLABLA,
'talk2' => VisibilityTalk::YADDA,
]);

$array = $normal->attributesToArray();

$this->assertArrayHasKey('number', $array);
$this->assertArrayNotHasKey('talk1', $array);
$this->assertArrayHasKey('talk2', $array);
$this->assertIsString($array['talk2']);
$this->assertEquals($array['talk2'], VisibilityTalk::YADDA);
}

/** @test */
public function returns_no_enum_if_hidden_dynamic()
{
$dynamic_hidden = new Visibility([
'number' => 'na654',
'talk1' => VisibilityTalk::BLABLA,
'talk2' => VisibilityTalk::YADDA,
]);

$dynamic_hidden->makeHidden('talk2');

$array = $dynamic_hidden->attributesToArray();

$this->assertArrayHasKey('number', $array);
$this->assertArrayNotHasKey('talk1', $array);
$this->assertArrayNotHasKey('talk2', $array);
}

/** @test */
public function returns_enum_if_hidden_made_visible()
{
$made_visible = new Visibility([
'number' => 'na987',
'talk1' => VisibilityTalk::BLABLA,
'talk2' => VisibilityTalk::YADDA,
]);

$made_visible->makeVisible('talk1');

$array = $made_visible->attributesToArray();

$this->assertArrayHasKey('number', $array);

$this->assertArrayHasKey('talk1', $array);
$this->assertIsString($array['talk1']);
$this->assertEquals($array['talk1'], VisibilityTalk::BLABLA);

$this->assertArrayHasKey('talk2', $array);
$this->assertIsString($array['talk2']);
$this->assertEquals($array['talk2'], VisibilityTalk::YADDA);
}
}
38 changes: 38 additions & 0 deletions tests/Models/Visibility.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

declare(strict_types=1);

/**
* Contains the Order model class for Enum version 2 and 3 default.
*
* @copyright Copyright (c) 2023 Mark Boessenkool
* @author Mark Boessenkool
* @license MIT
* @since 2023-08-02
*
*/

namespace Konekt\Enum\Eloquent\Tests\Models;

use Illuminate\Database\Eloquent\Model;
use Konekt\Enum\Eloquent\CastsEnums;

class Visibility extends Model
{
use CastsEnums;

protected $guarded = ['id'];

protected $casts = [
'is_active' => 'boolean'
];

protected $enums = [
'talk1' => VisibilityTalk::class,
'talk2' => VisibilityTalk::class,
];

protected $hidden = [
'talk1',
];
}
25 changes: 25 additions & 0 deletions tests/Models/VisibilityTalk.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

declare(strict_types=1);

/**
* Contains the VisibilityTalk class
*
* @copyright Copyright (c) 2023 Mark Boessenkool
* @author Mark Boessenkool
* @license MIT
* @since 2023-08-02
*
*/

namespace Konekt\Enum\Eloquent\Tests\Models;

use Konekt\Enum\Enum;

class VisibilityTalk extends Enum
{
public const BLABLA = 'blabla';
public const YADDA = 'yadda';
public const ZIGZAG = 'zig zag';
public const PINGPONG = 'ping pong';
}

0 comments on commit 029052e

Please sign in to comment.