Skip to content

Commit fe2ead2

Browse files
committed
Resource object validation changes and tests. Fixes #2
1 parent c8e5e32 commit fe2ead2

File tree

6 files changed

+206
-83
lines changed

6 files changed

+206
-83
lines changed

src/Validator/Resource/AbstractResourceValidator.php renamed to src/Validator/Resource/AbstractResourceObjectValidator.php

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,14 @@
2828
* Class AbstractResourceValidator
2929
* @package CloudCreativity\JsonApi
3030
*/
31-
abstract class AbstractResourceValidator extends AbstractValidator
31+
abstract class AbstractResourceObjectValidator extends AbstractValidator
3232
{
3333

3434
const ERROR_INVALID_VALUE = 'invalid-value';
3535
const ERROR_MISSING_TYPE = 'missing-type';
3636
const ERROR_MISSING_ID = 'missing-id';
3737
const ERROR_UNEXPECTED_ID = 'unexpected-id';
3838
const ERROR_MISSING_ATTRIBUTES = 'missing-attributes';
39-
const ERROR_UNEXPECTED_ATTRIBUTES = 'unexpected-attributes';
4039
const ERROR_MISSING_RELATIONSHIPS = 'missing-relationships';
4140
const ERROR_UNEXPECTED_RELATIONSHIPS = 'unexpected-relationships';
4241

@@ -74,12 +73,6 @@ abstract class AbstractResourceValidator extends AbstractValidator
7473
ErrorObject::TITLE => 'Missing Resource Attributes',
7574
ErrorObject::DETAIL => 'Resource object must have an attributes member.',
7675
],
77-
self::ERROR_UNEXPECTED_ATTRIBUTES => [
78-
ErrorObject::CODE => self::ERROR_UNEXPECTED_ATTRIBUTES,
79-
ErrorObject::STATUS => 400,
80-
ErrorObject::TITLE => 'Unexpected Resource Attributes',
81-
ErrorObject::DETAIL => 'Not expecting resource object to have an attributes member.',
82-
],
8376
self::ERROR_MISSING_RELATIONSHIPS => [
8477
ErrorObject::CODE => self::ERROR_MISSING_RELATIONSHIPS,
8578
ErrorObject::STATUS => 400,
@@ -130,7 +123,7 @@ abstract public function isExpectingRelationships();
130123
/**
131124
* Get the relationships validator or null if the resource object must not have relationships.
132125
*
133-
* @return ValidatorInterface|null
126+
* @return ValidatorInterface
134127
*/
135128
abstract public function getRelationshipsValidator();
136129

@@ -142,22 +135,6 @@ public function hasIdValidator()
142135
return $this->getIdValidator() instanceof ValidatorInterface;
143136
}
144137

145-
/**
146-
* @return bool
147-
*/
148-
public function hasAttributesValidator()
149-
{
150-
return $this->getAttributesValidator() instanceof ValidatorInterface;
151-
}
152-
153-
/**
154-
* @return bool
155-
*/
156-
public function hasRelationshipsValidator()
157-
{
158-
return $this->getRelationshipsValidator() instanceof ValidatorInterface;
159-
}
160-
161138
/**
162139
* @param $value
163140
*/
@@ -211,7 +188,7 @@ protected function validateId(StandardObject $object)
211188
}
212189

213190
if (!$object->has(ResourceObject::ID) && $this->hasIdValidator()) {
214-
$this->error(static::ERROR_MISSING_ID);
191+
$this->error(static::ERROR_MISSING_ID, '/');
215192
return $this;
216193
} elseif ($object->has(ResourceObject::ID) && !$this->hasIdValidator()) {
217194
$this->error(static::ERROR_UNEXPECTED_ID, '/' . ResourceObject::ID);
@@ -244,9 +221,6 @@ protected function validateAttributes(StandardObject $object)
244221
if (!$object->has(ResourceObject::ATTRIBUTES) && $this->isExpectingAttributes()) {
245222
$this->error(static::ERROR_MISSING_ATTRIBUTES);
246223
return $this;
247-
} elseif ($object->has(ResourceObject::ATTRIBUTES) && !$this->hasAttributesValidator()) {
248-
$this->error(static::ERROR_UNEXPECTED_ATTRIBUTES, '/' . ResourceObject::ATTRIBUTES);
249-
return $this;
250224
}
251225

252226
$validator = $this->getAttributesValidator();
@@ -277,9 +251,6 @@ protected function validateRelationships(StandardObject $object)
277251
if (!$object->has(ResourceObject::RELATIONSHIPS) && $this->isExpectingRelationships()) {
278252
$this->error(static::ERROR_MISSING_RELATIONSHIPS);
279253
return $this;
280-
} elseif ($object->has(ResourceObject::RELATIONSHIPS) && !$this->hasRelationshipsValidator()) {
281-
$this->error(static::ERROR_UNEXPECTED_RELATIONSHIPS, '/' . ResourceObject::RELATIONSHIPS);
282-
return $this;
283254
}
284255

285256
$validator = $this->getRelationshipsValidator();

src/Validator/Resource/AttributesValidatorTrait.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,14 @@ public function setAttributesValidator(ValidatorInterface $validator)
5050
}
5151

5252
/**
53-
* @return ValidatorInterface|null
53+
* @return ValidatorInterface
5454
*/
5555
public function getAttributesValidator()
5656
{
57+
if (!$this->_attributesValidator instanceof ValidatorInterface) {
58+
$this->_attributesValidator = new AttributesValidator();
59+
}
60+
5761
return $this->_attributesValidator;
5862
}
5963

@@ -81,14 +85,12 @@ public function isExpectingAttributes()
8185
*/
8286
public function getAttributes()
8387
{
84-
if (is_null($this->_attributesValidator)) {
85-
$this->_attributesValidator = new AttributesValidator();
86-
}
88+
$validator = $this->getAttributesValidator();
8789

88-
if (!$this->_attributesValidator instanceof AttributesValidator) {
90+
if (!$validator instanceof AttributesValidator) {
8991
throw new \RuntimeException(sprintf('Attributes validator is not a %s instance.', AttributesValidator::class));
9092
}
9193

92-
return $this->_attributesValidator;
94+
return $validator;
9395
}
9496
}

src/Validator/Resource/RelationshipsValidatorTrait.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,14 @@ public function setRelationshipsValidator(ValidatorInterface $validator)
5050
}
5151

5252
/**
53-
* @return ValidatorInterface|null
53+
* @return ValidatorInterface
5454
*/
5555
public function getRelationshipsValidator()
5656
{
57+
if (!$this->_relationshipsValidator instanceof ValidatorInterface) {
58+
$this->_relationshipsValidator = new RelationshipsValidator();
59+
}
60+
5761
return $this->_relationshipsValidator;
5862
}
5963

@@ -81,14 +85,12 @@ public function isExpectingRelationships()
8185
*/
8286
public function getRelationships()
8387
{
84-
if (is_null($this->_relationshipsValidator)) {
85-
$this->_relationshipsValidator = new RelationshipsValidator();
86-
}
88+
$validator = $this->getRelationshipsValidator();
8789

88-
if (!$this->_relationshipsValidator instanceof RelationshipsValidator) {
90+
if (!$validator instanceof RelationshipsValidator) {
8991
throw new \RuntimeException(sprintf('Relationships validator is not a %s instance.', RelationshipsValidator::class));
9092
}
9193

92-
return $this->_relationshipsValidator;
94+
return $validator;
9395
}
9496
}

src/Validator/Resource/ResourceObjectValidator.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
* Class ResourceObjectValidator
2626
* @package CloudCreativity\JsonApi
2727
*/
28-
class ResourceObjectValidator extends AbstractResourceValidator
28+
class ResourceObjectValidator extends AbstractResourceObjectValidator
2929
{
3030

3131
use AttributesValidatorTrait,
@@ -41,6 +41,15 @@ class ResourceObjectValidator extends AbstractResourceValidator
4141
*/
4242
protected $_id;
4343

44+
/**
45+
* @param $type
46+
* @param $id
47+
*/
48+
public function __construct($type = null, $id = null)
49+
{
50+
$this->type($type)->id($id);
51+
}
52+
4453
/**
4554
* Set the expected type for the resource object.
4655
*
@@ -110,7 +119,7 @@ public function belongsTo($key, $typeOrTypes, array $options = [])
110119
public function hasMany($key, $typeOrTypes, array $options = [])
111120
{
112121
$this->getRelationships()
113-
->belongsTo($key, $typeOrTypes, $options);
122+
->hasMany($key, $typeOrTypes, $options);
114123

115124
return $this;
116125
}

test/Validator/Resource/AbstractResourceValidatorTest.php renamed to test/Validator/Resource/AbstractResourceObjectValidatorTest.php

Lines changed: 9 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
use CloudCreativity\JsonApi\Object\Resource\ResourceObject;
2525
use Neomerx\JsonApi\Document\Error;
2626

27-
class AbstractResourceValidatorTest extends \PHPUnit_Framework_TestCase
27+
class AbstractResourceObjectValidatorTest extends \PHPUnit_Framework_TestCase
2828
{
2929

3030
const EXPECTED_TYPE = 'foo';
@@ -33,7 +33,7 @@ class AbstractResourceValidatorTest extends \PHPUnit_Framework_TestCase
3333
protected $type;
3434

3535
/**
36-
* @var AbstractResourceValidator
36+
* @var AbstractResourceObjectValidator
3737
*/
3838
protected $validator;
3939

@@ -49,7 +49,7 @@ class AbstractResourceValidatorTest extends \PHPUnit_Framework_TestCase
4949

5050
protected function setUp()
5151
{
52-
$this->validator = $this->getMockForAbstractClass(AbstractResourceValidator::class);
52+
$this->validator = $this->getMockForAbstractClass(AbstractResourceObjectValidator::class);
5353
$this->type = $this->getMock(ValidatorInterface::class);
5454

5555
$this->validator
@@ -83,7 +83,7 @@ public function testInvalid()
8383
$error = current($this->validator->getErrors()->getAll());
8484

8585
$this->assertInstanceOf(ErrorObject::class, $error);
86-
$this->assertEquals(AbstractResourceValidator::ERROR_INVALID_VALUE, $error->getCode());
86+
$this->assertEquals(AbstractResourceObjectValidator::ERROR_INVALID_VALUE, $error->getCode());
8787
$this->assertEquals(400, $error->getStatus());
8888
}
8989

@@ -95,7 +95,7 @@ public function testMissingType()
9595
$error = current($this->validator->getErrors()->getAll());
9696

9797
$this->assertInstanceOf(ErrorObject::class, $error);
98-
$this->assertEquals(AbstractResourceValidator::ERROR_MISSING_TYPE, $error->getCode());
98+
$this->assertEquals(AbstractResourceObjectValidator::ERROR_MISSING_TYPE, $error->getCode());
9999
$this->assertEquals(400, $error->getStatus());
100100
}
101101

@@ -125,7 +125,7 @@ public function testMissingId()
125125
/** @var ErrorObject $error */
126126
$error = current($this->validator->getErrors()->getAll());
127127
$this->assertInstanceOf(ErrorObject::class, $error);
128-
$this->assertEquals(AbstractResourceValidator::ERROR_MISSING_ID, $error->getCode());
128+
$this->assertEquals(AbstractResourceObjectValidator::ERROR_MISSING_ID, $error->getCode());
129129
$this->assertEquals(400, $error->getStatus());
130130
}
131131

@@ -138,7 +138,7 @@ public function testUnexpectedId()
138138
/** @var ErrorObject $error */
139139
$error = current($this->validator->getErrors()->getAll());
140140
$this->assertInstanceOf(ErrorObject::class, $error);
141-
$this->assertEquals(AbstractResourceValidator::ERROR_UNEXPECTED_ID, $error->getCode());
141+
$this->assertEquals(AbstractResourceObjectValidator::ERROR_UNEXPECTED_ID, $error->getCode());
142142
$this->assertEquals(400, $error->getStatus());
143143
$this->assertEquals('/' . ResourceObject::ID, $error->source()->getPointer());
144144
}
@@ -193,24 +193,10 @@ public function testMissingAttributes()
193193
/** @var ErrorObject $error */
194194
$error = current($this->validator->getErrors()->getAll());
195195
$this->assertInstanceOf(ErrorObject::class, $error);
196-
$this->assertEquals(AbstractResourceValidator::ERROR_MISSING_ATTRIBUTES, $error->getCode());
196+
$this->assertEquals(AbstractResourceObjectValidator::ERROR_MISSING_ATTRIBUTES, $error->getCode());
197197
$this->assertEquals(400, $error->getStatus());
198198
}
199199

200-
public function testUnexpectedAttributes()
201-
{
202-
$this->input->{ResourceObject::ATTRIBUTES} = new \stdClass();
203-
204-
$this->assertFalse($this->validator->isValid($this->input));
205-
206-
/** @var ErrorObject $error */
207-
$error = current($this->validator->getErrors()->getAll());
208-
$this->assertInstanceOf(ErrorObject::class, $error);
209-
$this->assertEquals(AbstractResourceValidator::ERROR_UNEXPECTED_ATTRIBUTES, $error->getCode());
210-
$this->assertEquals(400, $error->getStatus());
211-
$this->assertEquals('/' . ResourceObject::ATTRIBUTES, $error->source()->getPointer());
212-
}
213-
214200
public function testValidAttributes()
215201
{
216202
$attributes = new \stdClass;
@@ -269,22 +255,8 @@ public function testMissingRelationships()
269255
/** @var ErrorObject $error */
270256
$error = current($this->validator->getErrors()->getAll());
271257
$this->assertInstanceOf(ErrorObject::class, $error);
272-
$this->assertEquals(AbstractResourceValidator::ERROR_MISSING_RELATIONSHIPS, $error->getCode());
273-
$this->assertEquals(400, $error->getStatus());
274-
}
275-
276-
public function testUnexpectedRelationships()
277-
{
278-
$this->input->{ResourceObject::RELATIONSHIPS} = new \stdClass();
279-
280-
$this->assertFalse($this->validator->isValid($this->input));
281-
282-
/** @var ErrorObject $error */
283-
$error = current($this->validator->getErrors()->getAll());
284-
$this->assertInstanceOf(ErrorObject::class, $error);
285-
$this->assertEquals(AbstractResourceValidator::ERROR_UNEXPECTED_RELATIONSHIPS, $error->getCode());
258+
$this->assertEquals(AbstractResourceObjectValidator::ERROR_MISSING_RELATIONSHIPS, $error->getCode());
286259
$this->assertEquals(400, $error->getStatus());
287-
$this->assertEquals('/' . ResourceObject::RELATIONSHIPS, $error->source()->getPointer());
288260
}
289261

290262
public function testValidRelationships()

0 commit comments

Comments
 (0)