nextcloud/apps/dav/tests/unit/CalDAV/Reminder/BackendTest.php

314 lines
10 KiB
PHP

<?php
/**
* @copyright Copyright (c) 2018, Thomas Citharel
*
* @author Thomas Citharel <tcit@tcit.fr>
*
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* 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, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCA\DAV\Tests\unit\CalDAV\Reminder;
use OCP\IDBConnection;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\AppFramework\Utility\ITimeFactory;
use OCA\DAV\CalDAV\Reminder\Backend as ReminderBackend;
use Test\TestCase;
class BackendTest extends TestCase {
/**
* Reminder Backend
*
* @var ReminderBackend|\PHPUnit\Framework\MockObject\MockObject
*/
private $reminderBackend;
/** @var IDBConnection|\PHPUnit\Framework\MockObject\MockObject */
private $dbConnection;
/** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */
private $timeFactory;
public function setUp() {
parent::setUp();
$this->dbConnection = $this->createMock(IDBConnection::class);
$this->timeFactory = $this->createMock(ITimeFactory::class);
$this->reminderBackend = new ReminderBackend($this->dbConnection, $this->timeFactory);
}
public function testCleanRemindersForEvent(): void
{
/** @var IQueryBuilder|\PHPUnit\Framework\MockObject\MockObject $queryBuilder */
$queryBuilder = $this->createMock(IQueryBuilder::class);
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class);
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class);
$this->dbConnection->expects($this->once())
->method('getQueryBuilder')
->with()
->will($this->returnValue($queryBuilder));
$queryBuilder->method('expr')
->will($this->returnValue($expr));
$expr->method('eq')
->will($this->returnValueMap([
['calendarid', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'],
['objecturi', 'createNamedParameter-2', null, 'WHERE_CLAUSE_2'],
]));
$queryBuilder->method('createNamedParameter')
->will($this->returnValueMap([
[1, \PDO::PARAM_STR, null, 'createNamedParameter-1'],
['object.ics', \PDO::PARAM_STR, null, 'createNamedParameter-2'],
]));
$queryBuilder->expects($this->at(0))
->method('delete')
->with('calendar_reminders')
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(3))
->method('where')
->with('WHERE_CLAUSE_1')
->will($this->returnValue($queryBuilder));
$queryBuilder->expects($this->at(6))
->method('andWhere')
->with('WHERE_CLAUSE_2')
->will($this->returnValue($queryBuilder));
$queryBuilder->expects($this->at(7))
->method('execute')
->with()
->willReturn($stmt);
$this->reminderBackend->cleanRemindersForEvent(1, 'object.ics');
}
public function testCleanRemindersForCalendar(): void
{
/** @var IQueryBuilder|\PHPUnit\Framework\MockObject\MockObject $queryBuilder */
$queryBuilder = $this->createMock(IQueryBuilder::class);
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class);
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class);
$this->dbConnection->expects($this->once())
->method('getQueryBuilder')
->with()
->will($this->returnValue($queryBuilder));
$queryBuilder->method('expr')
->will($this->returnValue($expr));
$expr->method('eq')
->will($this->returnValueMap([
['calendarid', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'],
]));
$queryBuilder->method('createNamedParameter')
->will($this->returnValueMap([
[1337, \PDO::PARAM_STR, null, 'createNamedParameter-1'],
]));
$queryBuilder->expects($this->at(0))
->method('delete')
->with('calendar_reminders')
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(3))
->method('where')
->with('WHERE_CLAUSE_1')
->will($this->returnValue($queryBuilder));
$queryBuilder->expects($this->at(4))
->method('execute')
->with()
->willReturn($stmt);
$this->reminderBackend->cleanRemindersForCalendar(1337);
}
public function testRemoveReminder(): void
{
/** @var IQueryBuilder|\PHPUnit\Framework\MockObject\MockObject $queryBuilder */
$queryBuilder = $this->createMock(IQueryBuilder::class);
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class);
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class);
$this->dbConnection->expects($this->once())
->method('getQueryBuilder')
->with()
->will($this->returnValue($queryBuilder));
$queryBuilder->method('expr')
->will($this->returnValue($expr));
$expr->method('eq')
->will($this->returnValueMap([
['id', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'],
]));
$queryBuilder->method('createNamedParameter')
->will($this->returnValueMap([
[16, \PDO::PARAM_STR, null, 'createNamedParameter-1'],
]));
$queryBuilder->expects($this->at(0))
->method('delete')
->with('calendar_reminders')
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(3))
->method('where')
->with('WHERE_CLAUSE_1')
->will($this->returnValue($queryBuilder));
$queryBuilder->expects($this->at(4))
->method('execute')
->with()
->willReturn($stmt);
$this->reminderBackend->removeReminder(16);
}
public function testGetRemindersToProcess(): void
{
$dbData = [[
'cr.id' => 30,
'cr.calendarid' => 3,
'cr.objecturi' => 'object.ics',
'cr.type' => 'EMAIL',
'cr.notificationdate' => 1337,
'cr.uid' => 'user1',
'co.calendardata' => 'BEGIN:VCALENDAR',
'c.displayname' => 'My Calendar'
]];
$this->timeFactory->expects($this->exactly(2))
->method('getTime')
->with()
->willReturn(1337);
/** @var IQueryBuilder|\PHPUnit\Framework\MockObject\MockObject $queryBuilder */
$queryBuilder = $this->createMock(IQueryBuilder::class);
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class);
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class);
$this->dbConnection->expects($this->once())
->method('getQueryBuilder')
->with()
->willReturn($queryBuilder);
$queryBuilder->method('expr')
->willReturn($expr);
$expr->method('eq')
->willReturnMap([
['cr.calendarid', 'c.id', null, 'EQ_CLAUSE_1'],
['co.uri', 'cr.objecturi', null, 'EQ_CLAUSE_2'],
]);
$expr->method('andX')
->willReturnMap([
['EQ_CLAUSE_1', 'EQ_CLAUSE_2', 'ANDX_CLAUSE'],
]);
$expr->method('lte')
->with('cr.notificationdate', 'createNamedParameter-1', null)
->willReturn('LTE_CLAUSE_1');
$expr->method('gte')
->with('cr.eventstartdate', 'createNamedParameter-1', null)
->willReturn('GTE_CLAUSE_2');
$queryBuilder->method('createNamedParameter')
->willReturnMap([
[1337, \PDO::PARAM_STR, null, 'createNamedParameter-1'],
]);
$queryBuilder->expects($this->at(0))
->method('select')
->with(['cr.id', 'cr.calendarid', 'cr.objecturi', 'cr.type', 'cr.notificationdate', 'cr.uid', 'co.calendardata', 'c.displayname'])
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(1))
->method('from')
->with('calendar_reminders', 'cr')
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(4))
->method('where')
->with('LTE_CLAUSE_1')
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(7))
->method('andWhere')
->with('GTE_CLAUSE_2')
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(9))
->method('leftJoin')
->with('cr', 'calendars', 'c', 'EQ_CLAUSE_1')
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(13))
->method('leftJoin')
->with('cr', 'calendarobjects', 'co', 'ANDX_CLAUSE')
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(14))
->method('execute')
->with()
->willReturn($stmt);
$stmt->expects($this->once())
->method('fetchAll')
->with()
->willReturn($dbData);
$actual = $this->reminderBackend->getRemindersToProcess();
$this->assertEquals($dbData, $actual);
}
public function testInsertReminder(): void
{
/** @var IQueryBuilder|\PHPUnit\Framework\MockObject\MockObject $queryBuilder */
$queryBuilder = $this->createMock(IQueryBuilder::class);
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class);
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class);
$this->dbConnection->expects($this->once())
->method('getQueryBuilder')
->with()
->will($this->returnValue($queryBuilder));
$queryBuilder->method('expr')
->will($this->returnValue($expr));
$queryBuilder->method('createNamedParameter')
->will($this->returnValueMap([
['user1', \PDO::PARAM_STR, null, 'createNamedParameter-1'],
['1', \PDO::PARAM_STR, null, 'createNamedParameter-2'],
['object.ics', \PDO::PARAM_STR, null, 'createNamedParameter-3'],
['EMAIL', \PDO::PARAM_STR, null, 'createNamedParameter-4'],
[1227, \PDO::PARAM_STR, null, 'createNamedParameter-5'],
[1337, \PDO::PARAM_STR, null, 'createNamedParameter-6'],
]));
$queryBuilder->expects($this->at(0))
->method('insert')
->with('calendar_reminders')
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(7))
->method('values')
->with([
'uid' => 'createNamedParameter-1',
'calendarid' => 'createNamedParameter-2',
'objecturi' => 'createNamedParameter-3',
'type' => 'createNamedParameter-4',
'notificationdate' => 'createNamedParameter-5',
'eventstartdate' => 'createNamedParameter-6',
])
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(8))
->method('execute')
->with()
->willReturn($stmt);
$actual = $this->reminderBackend->insertReminder('user1', '1', 'object.ics', 'EMAIL', 1227, 1337);
}
}