Skip to content

Commit ec9db10

Browse files
committed
fix: FakeModel implement correctly ArrayAccess (add missing return type on offsetGet)
1 parent 0f93385 commit ec9db10

File tree

2 files changed

+57
-4
lines changed

2 files changed

+57
-4
lines changed

src/Support/FakeModel.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@
1111
use JsonSerializable;
1212
use Traversable;
1313

14-
/**
15-
* @codeCoverageIgnore
16-
*/
1714
class FakeModel implements Arrayable, ArrayAccess, Countable, IteratorAggregate, Jsonable, JsonSerializable
1815
{
1916
public function __get($name): self
@@ -41,6 +38,11 @@ public static function __callStatic($name, $args): self
4138
return new self;
4239
}
4340

41+
public function __invoke(): self
42+
{
43+
return new self;
44+
}
45+
4446
public function __toString()
4547
{
4648
return '';
@@ -56,7 +58,7 @@ public function offsetExists(mixed $offset): bool
5658
return $this->__isset($offset);
5759
}
5860

59-
public function offsetGet(mixed $offset)
61+
public function offsetGet(mixed $offset): mixed
6062
{
6163
return $this->__get($offset);
6264
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
3+
namespace Test\Unit\Support;
4+
5+
use Ark4ne\JsonApi\Support\FakeModel;
6+
use Test\TestCase;
7+
8+
class FakeModelTest extends TestCase
9+
{
10+
public function testFakeModel()
11+
{
12+
$model = new FakeModel;
13+
14+
$this->assertFalse(isset($model->abc));
15+
$this->assertInstanceOf(FakeModel::class, FakeModel::abc());
16+
$this->assertInstanceOf(FakeModel::class, $model->abc);
17+
$this->assertInstanceOf(FakeModel::class, $model['abc']);
18+
$this->assertInstanceOf(FakeModel::class, $model->abc['def']->ghi['jkl']);
19+
$this->assertInstanceOf(FakeModel::class, $model->abc()['def']()->ghi['jkl']());
20+
$this->assertEquals(0, count($model));
21+
$this->assertEquals([], $model->toArray());
22+
$this->assertEquals([], $model->jsonSerialize());
23+
$this->assertEquals('[]', $model->toJson());
24+
$this->assertEquals('[]', json_encode($model));
25+
$this->assertEquals('', (string)($model));
26+
27+
$model->abc = 123;
28+
$this->assertInstanceOf(FakeModel::class, $model->abc);
29+
$this->assertInstanceOf(FakeModel::class, $model['abc']);
30+
$this->assertFalse(isset($model->abc));
31+
$this->assertFalse(isset($model['abc']));
32+
$model['abc'] = 123;
33+
$this->assertInstanceOf(FakeModel::class, $model['abc']);
34+
$this->assertFalse(isset($model->abc));
35+
$this->assertFalse(isset($model['abc']));
36+
37+
unset($model->abc);
38+
$this->assertInstanceOf(FakeModel::class, $model->abc);
39+
$this->assertInstanceOf(FakeModel::class, $model['abc']);
40+
41+
unset($model['abc']);
42+
$this->assertInstanceOf(FakeModel::class, $model->abc);
43+
$this->assertInstanceOf(FakeModel::class, $model['abc']);
44+
45+
$each = 0;
46+
foreach ($model as $item) {
47+
$each++;
48+
}
49+
$this->assertEquals(0, $each);
50+
}
51+
}

0 commit comments

Comments
 (0)