Skip to content

Commit a27729f

Browse files
authored
Merge pull request #39 from chadicus/bug/null-array
Allow null in AbstractEntity::fromArray
2 parents bf9b4cf + 22ddfed commit a27729f

2 files changed

Lines changed: 68 additions & 2 deletions

File tree

src/Entities/AbstractEntity.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,9 @@ final public static function fromArrays(array $inputs) : array
106106
*
107107
* @return EntityInterface
108108
*/
109-
final public static function fromArray(array $input) : EntityInterface
109+
final public static function fromArray(array $input = null) : EntityInterface
110110
{
111-
return new static($input);
111+
return new static($input ?? []);
112112
}
113113

114114
/**

tests/Entities/SeriesTest.php

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,70 @@ public function basicUsage()
8181
$this->assertSame($data['previous']['type'], $series->previous->type);
8282
$this->assertSame($data['previous']['role'], $series->previous->role);
8383
}
84+
85+
/**
86+
* @test
87+
*
88+
* @return void
89+
*/
90+
public function seriesWithNullPreviousValue()
91+
{
92+
$data = [
93+
'id' => 5,
94+
'title' => 'a title',
95+
'description' => 'a description',
96+
'resourceURI' => 'a resourceURI',
97+
'urls' => [['type' => 'a type', 'url' => 'a url']],
98+
'startYear' => 4,
99+
'endYear' => 1,
100+
'rating' => 'a rating',
101+
'modified' => 'Fri, 31 Jul 2015 19:42:19 -0400',
102+
'thumbnail' => ['path' => 'an image path', 'extension' => 'an image extension'],
103+
'comics' => ['available' => 3, 'returned' => 2, 'collectionURI' => 'a collection URI', 'items' => []],
104+
'stories' => ['available' => 5, 'returned' => 4, 'collectionURI' => 'a collection URI', 'items' => []],
105+
'events' => ['available' => 3, 'returned' => 2, 'collectionURI' => 'a collection URI', 'items' => []],
106+
'characters' => ['available' => 8, 'returned' => 7, 'collectionURI' => 'a collection URI', 'items' => []],
107+
'creators' => ['available' => 2, 'returned' => 1, 'collectionURI' => 'a collection URI', 'items' => []],
108+
'next' => ['resourceURI' => 'a resource URI', 'name' => 'a name', 'type' => 'a type', 'role' => 'a role'],
109+
'previous' => null,
110+
];
111+
112+
$series = new Series($data);
113+
$this->assertSame($data['id'], $series->id);
114+
$this->assertSame($data['title'], $series->title);
115+
$this->assertSame($data['description'], $series->description);
116+
$this->assertSame($data['resourceURI'], $series->resourceURI);
117+
$this->assertSame(count($data['urls']), count($series->urls));
118+
$this->assertSame($data['urls'][0]['type'], $series->urls[0]->type);
119+
$this->assertSame($data['urls'][0]['url'], $series->urls[0]->url);
120+
$this->assertSame($data['startYear'], $series->startYear);
121+
$this->assertSame($data['endYear'], $series->endYear);
122+
$this->assertSame($data['rating'], $series->rating);
123+
$this->assertSame($data['modified'], $series->modified->format('r'));
124+
$this->assertSame($data['thumbnail']['path'], $series->thumbnail->path);
125+
$this->assertSame($data['thumbnail']['extension'], $series->thumbnail->extension);
126+
$this->assertSame($data['comics']['available'], $series->comics->available);
127+
$this->assertSame($data['comics']['returned'], $series->comics->returned);
128+
$this->assertSame($data['comics']['collectionURI'], $series->comics->collectionURI);
129+
$this->assertSame($data['stories']['available'], $series->stories->available);
130+
$this->assertSame($data['stories']['returned'], $series->stories->returned);
131+
$this->assertSame($data['stories']['collectionURI'], $series->stories->collectionURI);
132+
$this->assertSame($data['events']['available'], $series->events->available);
133+
$this->assertSame($data['events']['returned'], $series->events->returned);
134+
$this->assertSame($data['events']['collectionURI'], $series->events->collectionURI);
135+
$this->assertSame($data['characters']['available'], $series->characters->available);
136+
$this->assertSame($data['characters']['returned'], $series->characters->returned);
137+
$this->assertSame($data['characters']['collectionURI'], $series->characters->collectionURI);
138+
$this->assertSame($data['creators']['available'], $series->creators->available);
139+
$this->assertSame($data['creators']['returned'], $series->creators->returned);
140+
$this->assertSame($data['creators']['collectionURI'], $series->creators->collectionURI);
141+
$this->assertSame($data['next']['resourceURI'], $series->next->resourceURI);
142+
$this->assertSame($data['next']['name'], $series->next->name);
143+
$this->assertSame($data['next']['type'], $series->next->type);
144+
$this->assertSame($data['next']['role'], $series->next->role);
145+
$this->assertNull($series->previous->resourceURI);
146+
$this->assertNull($series->previous->name);
147+
$this->assertNull($series->previous->type);
148+
$this->assertNull($series->previous->role);
149+
}
84150
}

0 commit comments

Comments
 (0)