Fix tests

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl
2020-03-29 12:10:21 +02:00
parent d6eac1b11a
commit 17c63989b1
4 changed files with 330 additions and 30 deletions

55
lib/Event/FTSEvent.php Normal file
View File

@@ -0,0 +1,55 @@
<?php
/**
* @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Deck\Event;
use OCP\EventDispatcher\Event;
use Symfony\Component\EventDispatcher\GenericEvent;
/**
* This is a class to keep compatibility for currently used events in full text search integration
*/
class FTSEvent extends Event {
/**
* @var array
*/
private $arguments;
public function __construct($subject, $arguments = []) {
parent::__construct();
$this->arguments = $arguments;
}
public function getArgument($key)
{
if ($this->hasArgument($key)) {
return $this->arguments[$key];
}
throw new \InvalidArgumentException(sprintf('Argument "%s" not found.', $key));
}
}

View File

@@ -23,21 +23,22 @@
namespace OCA\Deck\Db;
use OCA\Deck\Service\AssignmentService;
use OCA\Deck\Service\BoardService;
use OCA\Deck\Service\StackService;
use OCA\Deck\Service\CardService;
use OCP\IDBConnection;
/**
* @group DB
* @coversDefaultClass OCA\Deck\Db\AssignedUsersMapper
*/
class AssignedUsersMapperTest extends \Test\TestCase {
const TEST_USER1 = "test-share-user1";
const TEST_USER2 = "test-share-user2";
const TEST_USER3 = "test-share-user3";
const TEST_USER4 = "test-share-user4";
const TEST_GROUP1 = "test-share-group1";
private const TEST_USER1 = 'test-share-user1';
private const TEST_USER3 = 'test-share-user3';
private const TEST_USER2 = 'test-share-user2';
private const TEST_USER4 = 'test-share-user4';
private const TEST_GROUP1 = 'test-share-group1';
/** @var BoardService */
protected $boardService;
@@ -45,8 +46,10 @@ class AssignedUsersMapperTest extends \Test\TestCase {
protected $cardService;
/** @var StackService */
protected $stackService;
/** @var \OCA\Deck\Db\AssignedUsersMapper */
/** @var AssignedUsersMapper */
protected $assignedUsersMapper;
/** @var AssignmentService */
private $assignmentService;
public static function setUpBeforeClass(): void {
parent::setUpBeforeClass();
@@ -78,10 +81,11 @@ class AssignedUsersMapperTest extends \Test\TestCase {
public function setUp(): void {
parent::setUp();
\OC::$server->getUserSession()->login(self::TEST_USER1, self::TEST_USER1);
$this->boardService = \OC::$server->query("\OCA\Deck\Service\BoardService");
$this->stackService = \OC::$server->query("\OCA\Deck\Service\StackService");
$this->cardService = \OC::$server->query("\OCA\Deck\Service\CardService");
$this->assignedUsersMapper = \OC::$server->query(\OCA\Deck\Db\AssignedUsersMapper::class);
$this->boardService = \OC::$server->query(BoardService::class);
$this->stackService = \OC::$server->query(StackService::class);
$this->cardService = \OC::$server->query(CardService::class);
$this->assignmentService = \OC::$server->query(AssignmentService::class);
$this->assignedUsersMapper = \OC::$server->query(AssignedUsersMapper::class);
$this->createBoardWithExampleData();
}
@@ -107,8 +111,8 @@ class AssignedUsersMapperTest extends \Test\TestCase {
*/
public function testFind() {
$uids = [];
$this->cardService->assignUser($this->cards[0]->getId(), self::TEST_USER1);
$this->cardService->assignUser($this->cards[0]->getId(), self::TEST_USER2);
$this->assignmentService->assignUser($this->cards[0]->getId(), self::TEST_USER1);
$this->assignmentService->assignUser($this->cards[0]->getId(), self::TEST_USER2);
$assignedUsers = $this->assignedUsersMapper->find($this->cards[0]->getId());
foreach ($assignedUsers as $user) {
@@ -119,8 +123,8 @@ class AssignedUsersMapperTest extends \Test\TestCase {
$this->assertArrayNotHasKey(self::TEST_USER3, $uids);
$this->assertArrayNotHasKey(self::TEST_USER4, $uids);
$this->cardService->unassignUser($this->cards[0]->getId(), self::TEST_USER1);
$this->cardService->unassignUser($this->cards[0]->getId(), self::TEST_USER2);
$this->assignmentService->unassignUser($this->cards[0]->getId(), self::TEST_USER1);
$this->assignmentService->unassignUser($this->cards[0]->getId(), self::TEST_USER2);
}
/**
@@ -145,6 +149,7 @@ class AssignedUsersMapperTest extends \Test\TestCase {
$assignment = new AssignedUsers();
$assignment->setCardId($this->cards[1]->getId());
$assignment->setParticipant(self::TEST_USER4);
$assignment->setType(AssignedUsers::TYPE_USER);
$this->assignedUsersMapper->insert($assignment);
$actual = $this->assignedUsersMapper->find($this->cards[1]->getId());
@@ -160,6 +165,7 @@ class AssignedUsersMapperTest extends \Test\TestCase {
$assignment = new AssignedUsers();
$assignment->setCardId($this->cards[1]->getId());
$assignment->setParticipant('invalid-username');
$assignment->setType(AssignedUsers::TYPE_USER);
$actual = $this->assignedUsersMapper->insert($assignment);
$this->assertNull($actual);
}
@@ -171,12 +177,14 @@ class AssignedUsersMapperTest extends \Test\TestCase {
$assignment = new AssignedUsers();
$assignment->setCardId($this->cards[1]->getId());
$assignment->setParticipant(self::TEST_USER4);
$assignment->setType(AssignedUsers::TYPE_USER);
$this->assignedUsersMapper->mapParticipant($assignment);
$this->assertInstanceOf(User::class, $assignment->resolveParticipant());
$assignment = new AssignedUsers();
$assignment->setCardId($this->cards[1]->getId());
$assignment->setParticipant('invalid-username');
$assignment->setType(AssignedUsers::TYPE_USER);
$this->assignedUsersMapper->mapParticipant($assignment);
$this->assertEquals('invalid-username', $assignment->resolveParticipant());
}

View File

@@ -0,0 +1,236 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Deck\Service;
use OCA\Deck\Activity\ActivityManager;
use OCA\Deck\BadRequestException;
use OCA\Deck\Db\AclMapper;
use OCA\Deck\Db\AssignedUsers;
use OCA\Deck\Db\AssignedUsersMapper;
use OCA\Deck\Db\Card;
use OCA\Deck\Db\CardMapper;
use OCA\Deck\Db\ChangeHelper;
use OCA\Deck\Db\StackMapper;
use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\LabelMapper;
use OCA\Deck\NotFoundException;
use OCA\Deck\Notification\NotificationHelper;
use OCA\Deck\StatusException;
use OCP\Activity\IEvent;
use OCP\Comments\ICommentsManager;
use OCP\EventDispatcher\ABroadcastedEvent;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IUser;
use OCP\IUserManager;
use PHPUnit\Framework\MockObject\MockObject;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Test\TestCase;
class AssignmentServiceTest extends TestCase {
/**
* @var MockObject|PermissionService
*/
private $permissionService;
/**
* @var MockObject|CardMapper
*/
private $cardMapper;
/**
* @var MockObject|AssignedUsersMapper
*/
private $assignedUsersMapper;
/**
* @var MockObject|AclMapper
*/
private $aclMapper;
/**
* @var MockObject|NotificationHelper
*/
private $notificationHelper;
/**
* @var MockObject|ChangeHelper
*/
private $changeHelper;
/**
* @var MockObject|ActivityManager
*/
private $activityManager;
/**
* @var MockObject|IEventDispatcher
*/
private $eventDispatcher;
/**
* @var AssignmentService
*/
private $assignmentService;
public function setUp(): void {
parent::setUp();
$this->aclMapper = $this->createMock(AclMapper::class);
$this->permissionService = $this->createMock(PermissionService::class);
$this->cardMapper = $this->createMock(CardMapper::class);
$this->notificationHelper = $this->createMock(NotificationHelper::class);
$this->assignedUsersMapper = $this->createMock(AssignedUsersMapper::class);
$this->activityManager = $this->createMock(ActivityManager::class);
$this->eventDispatcher = $this->createMock(IEventDispatcher::class);
$this->changeHelper = $this->createMock(ChangeHelper::class);
$this->assignmentService = new AssignmentService(
$this->permissionService,
$this->cardMapper,
$this->assignedUsersMapper,
$this->aclMapper,
$this->notificationHelper,
$this->activityManager,
$this->changeHelper,
$this->eventDispatcher,
'admin'
);
}
public function mockActivity($type, $object, $subject) {
// ActivityManager::DECK_OBJECT_BOARD, $newAcl, ActivityManager::SUBJECT_BOARD_SHARE
$event = $this->createMock(IEvent::class);
$this->activityManager->expects($this->once())
->method('createEvent')
->with($type, $object, $subject)
->willReturn($event);
$this->activityManager->expects($this->once())
->method('sendToUsers')
->with($event);
}
public function testAssignUser() {
$assignments = [];
$this->assignedUsersMapper->expects($this->once())
->method('find')
->with(123)
->willReturn($assignments);
$assignment = new AssignedUsers();
$assignment->setCardId(123);
$assignment->setParticipant('admin');
$assignment->setType(AssignedUsers::TYPE_USER);
$this->cardMapper->expects($this->once())
->method('findBoardId')
->willReturn(1);
$this->permissionService->expects($this->once())
->method('findUsers')
->with(1)
->willReturn(['admin' => 'admin', 'user1' => 'user1']);
$this->aclMapper->expects($this->once())
->method('findAll')
->willReturn([]);
$this->assignedUsersMapper->expects($this->once())
->method('insert')
->with($assignment)
->willReturn($assignment);
$actual = $this->assignmentService->assignUser(123, 'admin');
$this->assertEquals($assignment, $actual);
}
public function testAssignUserNoParticipant() {
$this->expectException(BadRequestException::class);
$this->expectExceptionMessage('The user is not part of the board');
$assignments = [];
$this->assignedUsersMapper->expects($this->once())
->method('find')
->with(123)
->willReturn($assignments);
$assignment = new AssignedUsers();
$assignment->setCardId(123);
$assignment->setParticipant('admin');
$assignment->setType(AssignedUsers::TYPE_USER);
$this->cardMapper->expects($this->once())
->method('findBoardId')
->willReturn(1);
$this->permissionService->expects($this->once())
->method('findUsers')
->with(1)
->willReturn(['user2' => 'user2', 'user1' => 'user1']);
$this->aclMapper->expects($this->once())
->method('findAll')
->willReturn([]);
$actual = $this->assignmentService->assignUser(123, 'admin');
}
public function testAssignUserExisting() {
$this->expectException(BadRequestException::class);
$this->expectExceptionMessage('The user is already assigned to the card');
$assignment = new AssignedUsers();
$assignment->setCardId(123);
$assignment->setParticipant('admin');
$assignment->setType(AssignedUsers::TYPE_USER);
$assignments = [
$assignment
];
$this->assignedUsersMapper->expects($this->once())
->method('find')
->with(123)
->willReturn($assignments);
$actual = $this->assignmentService->assignUser(123, 'admin');
$this->assertFalse($actual);
}
public function testUnassignUserExisting() {
$assignment = new AssignedUsers();
$assignment->setCardId(123);
$assignment->setParticipant('admin');
$assignment->setType(AssignedUsers::TYPE_USER);
$assignments = [
$assignment
];
$this->assignedUsersMapper->expects($this->once())
->method('find')
->with(123)
->willReturn($assignments);
$this->assignedUsersMapper->expects($this->once())
->method('delete')
->with($assignment)
->willReturn($assignment);
$actual = $this->assignmentService->unassignUser(123, 'admin');
$this->assertEquals($assignment, $actual);
}
public function testUnassignUserNotExisting() {
$this->expectException(NotFoundException::class);
$assignment = new AssignedUsers();
$assignment->setCardId(123);
$assignment->setParticipant('admin');
$assignment->setType(AssignedUsers::TYPE_USER);
$assignments = [
$assignment
];
$this->assignedUsersMapper->expects($this->once())
->method('find')
->with(123)
->willReturn($assignments);
$this->expectException(NotFoundException::class);
$actual = $this->assignmentService->unassignUser(123, 'user');
}
}

View File

@@ -23,34 +23,35 @@
namespace OCA\Deck\Controller;
use OCA\Deck\Service\AssignmentService;
use OCA\Deck\Service\CardService;
use OCP\AppFramework\Controller;
use OCP\IRequest;
use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class CardControllerTest extends \Test\TestCase {
class CardControllerTest extends TestCase {
/** @var CardController|\PHPUnit\Framework\MockObject\MockObject */
/** @var CardController|MockObject */
private $controller;
/** @var IRequest|\PHPUnit\Framework\MockObject\MockObject */
/** @var IRequest|MockObject */
private $request;
/** @var CardService|\PHPUnit\Framework\MockObject\MockObject */
/** @var CardService|MockObject */
private $cardService;
/** @var AssignmentService|MockObject */
private $assignmentService;
/** @var string */
private $userId = 'user';
public function setUp(): void {
$this->request = $this->getMockBuilder(
'\OCP\IRequest')
->disableOriginalConstructor()
->getMock();
$this->cardService = $this->getMockBuilder(
'\OCA\Deck\Service\CardService')
->disableOriginalConstructor()
->getMock();
$this->request = $this->createMock(IRequest::class);
$this->cardService = $this->createMock(CardService::class);
$this->assignmentService = $this->createMock(AssignmentService::class);
$this->controller = new CardController(
'deck',
$this->request,
$this->cardService,
$this->assignmentService,
$this->userId
);
}
@@ -115,12 +116,12 @@ class CardControllerTest extends \Test\TestCase {
}
public function testAssignUser() {
$this->cardService->expects($this->once())->method('assignUser');
$this->assignmentService->expects($this->once())->method('assignUser');
$this->controller->assignUser(1, 'admin');
}
public function testUnssignUser() {
$this->cardService->expects($this->once())->method('unassignUser');
$this->assignmentService->expects($this->once())->method('unassignUser');
$this->controller->unassignUser(1, 'admin');
}