Make sure that object id can be a string

This commit is contained in:
Joas Schilling 2015-11-23 14:06:26 +01:00
parent a1c4e2e635
commit 018bd3ee24
3 changed files with 36 additions and 24 deletions

View File

@ -76,10 +76,11 @@ interface INotification {
/** /**
* @param string $type * @param string $type
* @param int $id * @param string $id
* @return $this * @return $this
* @throws \InvalidArgumentException if the object type or id are invalid * @throws \InvalidArgumentException if the object type or id is invalid
* @since 8.2.0 * @since 8.2.0
* @changed 9.0.0 Type of $id changed to string
*/ */
public function setObject($type, $id); public function setObject($type, $id);
@ -90,8 +91,9 @@ interface INotification {
public function getObjectType(); public function getObjectType();
/** /**
* @return int * @return string
* @since 8.2.0 * @since 8.2.0
* @changed 9.0.0 Return type changed to string
*/ */
public function getObjectId(); public function getObjectId();

View File

@ -35,7 +35,7 @@ class Notification implements INotification {
/** @var string */ /** @var string */
protected $objectType; protected $objectType;
/** @var int */ /** @var string */
protected $objectId; protected $objectId;
/** @var string */ /** @var string */
@ -83,7 +83,7 @@ class Notification implements INotification {
$this->dateTime = new \DateTime(); $this->dateTime = new \DateTime();
$this->dateTime->setTimestamp(0); $this->dateTime->setTimestamp(0);
$this->objectType = ''; $this->objectType = '';
$this->objectId = 0; $this->objectId = '';
$this->subject = ''; $this->subject = '';
$this->subjectParameters = []; $this->subjectParameters = [];
$this->subjectParsed = ''; $this->subjectParsed = '';
@ -164,10 +164,11 @@ class Notification implements INotification {
/** /**
* @param string $type * @param string $type
* @param int $id * @param string $id
* @return $this * @return $this
* @throws \InvalidArgumentException if the object type or id is invalid * @throws \InvalidArgumentException if the object type or id is invalid
* @since 8.2.0 * @since 8.2.0
* @changed 9.0.0 Type of $id changed to string
*/ */
public function setObject($type, $id) { public function setObject($type, $id) {
if (!is_string($type) || $type === '' || isset($type[64])) { if (!is_string($type) || $type === '' || isset($type[64])) {
@ -175,10 +176,10 @@ class Notification implements INotification {
} }
$this->objectType = $type; $this->objectType = $type;
if (!is_int($id)) { if (!is_int($id) && (!is_string($id) || $id === '' || isset($id[64]))) {
throw new \InvalidArgumentException('The given object id is invalid'); throw new \InvalidArgumentException('The given object id is invalid');
} }
$this->objectId = $id; $this->objectId = (string) $id;
return $this; return $this;
} }
@ -191,8 +192,9 @@ class Notification implements INotification {
} }
/** /**
* @return int * @return string
* @since 8.2.0 * @since 8.2.0
* @changed 9.0.0 Return type changed to string
*/ */
public function getObjectId() { public function getObjectId() {
return $this->objectId; return $this->objectId;
@ -443,7 +445,7 @@ class Notification implements INotification {
&& &&
$this->getObjectType() !== '' $this->getObjectType() !== ''
&& &&
$this->getObjectId() !== 0 $this->getObjectId() !== ''
; ;
} }
} }

View File

@ -176,22 +176,23 @@ class NotificationTest extends TestCase {
public function dataSetObject() { public function dataSetObject() {
return [ return [
['a', 1], ['a', '21', '21'],
[str_repeat('a', 64), time()], [str_repeat('a', 64), 42, '42'],
]; ];
} }
/** /**
* @dataProvider dataSetObject * @dataProvider dataSetObject
* @param string $type * @param string $type
* @param int $id * @param int|string $id
* @param string $exptectedId
*/ */
public function testSetObject($type, $id) { public function testSetObject($type, $id, $exptectedId) {
$this->assertSame('', $this->notification->getObjectType()); $this->assertSame('', $this->notification->getObjectType());
$this->assertSame(0, $this->notification->getObjectId()); $this->assertSame('', $this->notification->getObjectId());
$this->assertSame($this->notification, $this->notification->setObject($type, $id)); $this->assertSame($this->notification, $this->notification->setObject($type, $id));
$this->assertSame($type, $this->notification->getObjectType()); $this->assertSame($type, $this->notification->getObjectType());
$this->assertSame($id, $this->notification->getObjectId()); $this->assertSame($exptectedId, $this->notification->getObjectId());
} }
public function dataSetObjectTypeInvalid() { public function dataSetObjectTypeInvalid() {
@ -210,7 +211,14 @@ class NotificationTest extends TestCase {
} }
public function dataSetObjectIdInvalid() { public function dataSetObjectIdInvalid() {
return $this->dataInvalidInt(); return [
[true],
[false],
[''],
[str_repeat('a', 64 + 1)],
[[]],
[[str_repeat('a', 64 + 1)]],
];
} }
/** /**
@ -560,12 +568,12 @@ class NotificationTest extends TestCase {
public function dataIsValidCommon() { public function dataIsValidCommon() {
return [ return [
['', '', 0, '', 0, false], ['', '', 0, '', '', false],
['app', '', 0, '', 0, false], ['app', '', 0, '', '', false],
['app', 'user', 0, '', 0, false], ['app', 'user', 0, '', '', false],
['app', 'user', time(), '', 0, false], ['app', 'user', time(), '', '', false],
['app', 'user', time(), 'type', 0, false], ['app', 'user', time(), 'type', '', false],
['app', 'user', time(), 'type', 42, true], ['app', 'user', time(), 'type', '42', true],
]; ];
} }
@ -576,7 +584,7 @@ class NotificationTest extends TestCase {
* @param string $user * @param string $user
* @param int $timestamp * @param int $timestamp
* @param string $objectType * @param string $objectType
* @param int $objectId * @param string $objectId
* @param bool $expected * @param bool $expected
*/ */
public function testIsValidCommon($app, $user, $timestamp, $objectType, $objectId, $expected) { public function testIsValidCommon($app, $user, $timestamp, $objectType, $objectId, $expected) {