nextcloud/tests/lib/Comments/CommentTest.php
Arthur Schiwon 92bc33dd1e
Backport of format self-mentions, but don't offer them #7914
comments should compile mentions also if done by author

it is used by clients for formatting reasons, there is no reason not format
the author if her handle is included in the comment body.
It is unrelated to sending out notifications.

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

do not offer the handle of the current user for auto completion

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

add types to php doc

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-01-18 12:08:08 +01:00

175 lines
4.5 KiB
PHP

<?php
namespace Test\Comments;
use OC\Comments\Comment;
use OCP\Comments\IComment;
use Test\TestCase;
class CommentTest extends TestCase {
/**
* @throws \OCP\Comments\IllegalIDChangeException
*/
public function testSettersValidInput() {
$comment = new Comment();
$id = 'comment23';
$parentId = 'comment11.5';
$topMostParentId = 'comment11.0';
$childrenCount = 6;
$message = 'I like to comment comment';
$verb = 'comment';
$actor = ['type' => 'users', 'id' => 'alice'];
$creationDT = new \DateTime();
$latestChildDT = new \DateTime('yesterday');
$object = ['type' => 'files', 'id' => 'file64'];
$comment
->setId($id)
->setParentId($parentId)
->setTopmostParentId($topMostParentId)
->setChildrenCount($childrenCount)
->setMessage($message)
->setVerb($verb)
->setActor($actor['type'], $actor['id'])
->setCreationDateTime($creationDT)
->setLatestChildDateTime($latestChildDT)
->setObject($object['type'], $object['id']);
$this->assertSame($id, $comment->getId());
$this->assertSame($parentId, $comment->getParentId());
$this->assertSame($topMostParentId, $comment->getTopmostParentId());
$this->assertSame($childrenCount, $comment->getChildrenCount());
$this->assertSame($message, $comment->getMessage());
$this->assertSame($verb, $comment->getVerb());
$this->assertSame($actor['type'], $comment->getActorType());
$this->assertSame($actor['id'], $comment->getActorId());
$this->assertSame($creationDT, $comment->getCreationDateTime());
$this->assertSame($latestChildDT, $comment->getLatestChildDateTime());
$this->assertSame($object['type'], $comment->getObjectType());
$this->assertSame($object['id'], $comment->getObjectId());
}
/**
* @expectedException \OCP\Comments\IllegalIDChangeException
*/
public function testSetIdIllegalInput() {
$comment = new Comment();
$comment->setId('c23');
$comment->setId('c17');
}
/**
* @throws \OCP\Comments\IllegalIDChangeException
*/
public function testResetId() {
$comment = new Comment();
$comment->setId('c23');
$comment->setId('');
$this->assertSame('', $comment->getId());
}
public function simpleSetterProvider() {
return [
['Id', true],
['TopmostParentId', true],
['ParentId', true],
['Message', true],
['Verb', true],
['Verb', ''],
['ChildrenCount', true],
];
}
/**
* @dataProvider simpleSetterProvider
* @expectedException \InvalidArgumentException
*/
public function testSimpleSetterInvalidInput($field, $input) {
$comment = new Comment();
$setter = 'set' . $field;
$comment->$setter($input);
}
public function roleSetterProvider() {
return [
['Actor', true, true],
['Actor', 'users', true],
['Actor', true, 'alice'],
['Actor', ' ', ' '],
['Object', true, true],
['Object', 'files', true],
['Object', true, 'file64'],
['Object', ' ', ' '],
];
}
/**
* @dataProvider roleSetterProvider
* @expectedException \InvalidArgumentException
*/
public function testSetRoleInvalidInput($role, $type, $id){
$comment = new Comment();
$setter = 'set' . $role;
$comment->$setter($type, $id);
}
/**
* @expectedException \OCP\Comments\MessageTooLongException
*/
public function testSetUberlongMessage() {
$comment = new Comment();
$msg = str_pad('', IComment::MAX_MESSAGE_LENGTH + 1, 'x');
$comment->setMessage($msg);
}
public function mentionsProvider() {
return [
[
'@alice @bob look look, a cook!', ['alice', 'bob']
],
[
'no mentions in this message', []
],
[
'@alice @bob look look, a duplication @alice test @bob!', ['alice', 'bob']
],
[
'@alice is the author, notify @bob, nevertheless mention her!', ['alice', 'bob'], 'alice'
],
[
'@foobar and @barfoo you should know, @foo@bar.com is valid' .
' and so is @bar@foo.org@foobar.io I hope that clarifies everything.' .
' cc @23452-4333-54353-2342 @yolo!',
['foobar', 'barfoo', 'foo@bar.com', 'bar@foo.org@foobar.io', '23452-4333-54353-2342', 'yolo']
]
];
}
/**
* @dataProvider mentionsProvider
*/
public function testMentions($message, $expectedUids, $author = null) {
$comment = new Comment();
$comment->setMessage($message);
if(!is_null($author)) {
$comment->setActor('user', $author);
}
$mentions = $comment->getMentions();
while($mention = array_shift($mentions)) {
$uid = array_shift($expectedUids);
$this->assertSame('user', $mention['type']);
$this->assertSame($uid, $mention['id']);
}
$this->assertEmpty($mentions);
$this->assertEmpty($expectedUids);
}
}