Skip to content

Commit 871ae18

Browse files
authored
Merge pull request #27 from swisnl/bugfix/item-document-builder-with-id-0
Allow '0' as id in ItemDocumentBuilder
2 parents d1cbd80 + 808d989 commit 871ae18

File tree

2 files changed

+51
-3
lines changed

2 files changed

+51
-3
lines changed

src/ItemDocumentBuilder.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@ public function __construct(ItemHydrator $itemHydrator)
2222
/**
2323
* @param \Swis\JsonApi\Client\Interfaces\ItemInterface $item
2424
* @param array $attributes
25-
* @param string $id
25+
* @param string|null $id
2626
*
2727
* @return \Swis\JsonApi\Client\ItemDocument
2828
*/
2929
public function build(ItemInterface $item, array $attributes, $id = null)
3030
{
3131
$this->itemHydrator->hydrate($item, $attributes);
3232

33-
if ($id) {
33+
if ($id !== null && $id !== '') {
3434
$item->setId($id);
3535
}
3636

tests/ItemDocumentBuilderTest.php

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,59 @@ public function it_fills_items_from_id_and_attributes()
2020
$itemHydrator = new ItemHydrator($typeMapper);
2121
$itemDocumentBuilder = new ItemDocumentBuilder($itemHydrator);
2222

23-
$itemDocument = $itemDocumentBuilder->build(new Item(), $data, 123);
23+
$itemDocument = $itemDocumentBuilder->build(new Item(), $data, '123');
2424

2525
$item = $itemDocument->getData();
2626
static::assertInstanceOf(Item::class, $item);
27+
static::assertEquals($item->getId(), '123');
2728
static::assertEquals($item->key1, $data['key1']);
2829
static::assertEquals($item->key2, $data['key2']);
2930
}
31+
32+
/**
33+
* @test
34+
*/
35+
public function it_fills_items_without_id()
36+
{
37+
$typeMapper = new TypeMapper();
38+
$itemHydrator = new ItemHydrator($typeMapper);
39+
$itemDocumentBuilder = new ItemDocumentBuilder($itemHydrator);
40+
41+
$itemDocument = $itemDocumentBuilder->build(new Item(), []);
42+
43+
$item = $itemDocument->getData();
44+
static::assertInstanceOf(Item::class, $item);
45+
static::assertNull($item->getId());
46+
}
47+
48+
/**
49+
* @test
50+
* @dataProvider provideIdArguments
51+
*
52+
* @param $givenId
53+
* @param $expectedId
54+
*/
55+
public function it_fills_the_id_when_not_null_or_empty_string($givenId, $expectedId)
56+
{
57+
$typeMapper = new TypeMapper();
58+
$itemHydrator = new ItemHydrator($typeMapper);
59+
$itemDocumentBuilder = new ItemDocumentBuilder($itemHydrator);
60+
61+
$itemDocument = $itemDocumentBuilder->build(new Item(), [], $givenId);
62+
63+
$item = $itemDocument->getData();
64+
static::assertInstanceOf(Item::class, $item);
65+
static::assertSame($item->getId(), $expectedId);
66+
}
67+
68+
public function provideIdArguments(): array
69+
{
70+
return [
71+
['0', '0'],
72+
['12', '12'],
73+
['foo-bar', 'foo-bar'],
74+
[null, null],
75+
['', null],
76+
];
77+
}
3078
}

0 commit comments

Comments
 (0)