IMipPlugin: Added unit test for dav.invitation_link_recipients support

Existing tests required modification to correctly mock up the new config
parameter fetch, and to set the RSVP flag for attendees (since the test
was detecting token generation, and we no longer generate tokens when
no RSVP is requested by the client or sent by nextcloud).

Signed-off-by: Brad Rubenstein <brad@wbr.tech>
This commit is contained in:
Brad Rubenstein 2019-02-28 01:22:53 +00:00
parent 79d20e4758
commit 1dbda2604b
1 changed files with 132 additions and 0 deletions

View File

@ -67,6 +67,9 @@ class IMipPluginTest extends TestCase {
$timeFactory->method('getTime')->willReturn(1);
/** @var IConfig | \PHPUnit_Framework_MockObject_MockObject $config */
$config = $this->createMock(IConfig::class);
$config->method('getSystemValue')
->with('dav.invitation_link_recipients', true)
->willReturn(true);
$l10n = $this->createMock(IL10N::class);
/** @var IFactory | \PHPUnit_Framework_MockObject_MockObject $l10nFactory */
$l10nFactory = $this->createMock(IFactory::class);
@ -114,6 +117,10 @@ class IMipPluginTest extends TestCase {
'SUMMARY' => 'Fellowship meeting',
'DTSTART' => new \DateTime('2017-01-01 00:00:00') // 1483228800
]);
$message->message->VEVENT->add( 'ORGANIZER', 'mailto:gandalf@wiz.ard' );
$message->message->VEVENT->add( 'ATTENDEE', 'mailto:frodo@hobb.it', [ 'RSVP' => 'TRUE' ] );
$message->sender = 'mailto:gandalf@wiz.ard';
$message->recipient = 'mailto:frodo@hobb.it';
@ -150,6 +157,10 @@ class IMipPluginTest extends TestCase {
$timeFactory->method('getTime')->willReturn(1);
/** @var IConfig | \PHPUnit_Framework_MockObject_MockObject $config */
$config = $this->createMock(IConfig::class);
$config->method('getSystemValue')
->with('dav.invitation_link_recipients', true)
->willReturn(true);
$l10n = $this->createMock(IL10N::class);
/** @var IFactory | \PHPUnit_Framework_MockObject_MockObject $l10nFactory */
$l10nFactory = $this->createMock(IFactory::class);
@ -194,6 +205,8 @@ class IMipPluginTest extends TestCase {
'SUMMARY' => 'Fellowship meeting',
'DTSTART' => new \DateTime('2017-01-01 00:00:00') // 1483228800
]);
$message->message->VEVENT->add( 'ORGANIZER', 'mailto:gandalf@wiz.ard' );
$message->message->VEVENT->add( 'ATTENDEE', 'mailto:frodo@hobb.it', [ 'RSVP' => 'TRUE' ] );
$message->sender = 'mailto:gandalf@wiz.ard';
$message->recipient = 'mailto:frodo@hobb.it';
@ -237,6 +250,9 @@ class IMipPluginTest extends TestCase {
$timeFactory->method('getTime')->willReturn(1496912528);
/** @var IConfig | \PHPUnit_Framework_MockObject_MockObject $config */
$config = $this->createMock(IConfig::class);
$config->method('getSystemValue')
->with('dav.invitation_link_recipients', true)
->willReturn(true);
$l10n = $this->createMock(IL10N::class);
/** @var IFactory | \PHPUnit_Framework_MockObject_MockObject $l10nFactory */
$l10nFactory = $this->createMock(IFactory::class);
@ -282,6 +298,8 @@ class IMipPluginTest extends TestCase {
'SEQUENCE' => 42,
'SUMMARY' => 'Fellowship meeting',
], $veventParams));
$message->message->VEVENT->add( 'ORGANIZER', 'mailto:gandalf@wiz.ard' );
$message->message->VEVENT->add( 'ATTENDEE', 'mailto:frodo@hobb.it', [ 'RSVP' => 'TRUE' ] );
$message->sender = 'mailto:gandalf@wiz.ard';
$message->recipient = 'mailto:frodo@hobb.it';
@ -308,4 +326,118 @@ class IMipPluginTest extends TestCase {
[['DTSTART' => new \DateTime('2017-01-01 00:00:00'), 'DTEND' => new \DateTime('2017-01-01 00:00:00'), 'RRULE' => 'FREQ=WEEKLY;UNTIL=20171001T000000Z'], true],
];
}
/**
* @dataProvider dataIncludeResponseButtons
*/
public function testIncludeResponseButtons( $config_setting, $recipient, $has_buttons ) {
$mailMessage = $this->createMock(IMessage::class);
$mailMessage->method('setFrom')->willReturn($mailMessage);
$mailMessage->method('setReplyTo')->willReturn($mailMessage);
$mailMessage->method('setTo')->willReturn($mailMessage);
/** @var Mailer | \PHPUnit_Framework_MockObject_MockObject $mailer */
$mailer = $this->getMockBuilder(IMailer::class)->disableOriginalConstructor()->getMock();
$emailTemplate = $this->createMock(IEMailTemplate::class);
$emailAttachment = $this->createMock(IAttachment::class);
$mailer->method('createEMailTemplate')->willReturn($emailTemplate);
$mailer->method('createMessage')->willReturn($mailMessage);
$mailer->method('createAttachment')->willReturn($emailAttachment);
$mailer->expects($this->once())->method('send');
/** @var ILogger | \PHPUnit_Framework_MockObject_MockObject $logger */
$logger = $this->getMockBuilder(ILogger::class)->disableOriginalConstructor()->getMock();
$timeFactory = $this->getMockBuilder(ITimeFactory::class)->disableOriginalConstructor()->getMock();
$timeFactory->method('getTime')->willReturn(1);
/** @var IConfig | \PHPUnit_Framework_MockObject_MockObject $config */
$config = $this->createMock(IConfig::class);
$config->method('getSystemValue')
->with('dav.invitation_link_recipients', true)
->willReturn($config_setting);
$l10n = $this->createMock(IL10N::class);
/** @var IFactory | \PHPUnit_Framework_MockObject_MockObject $l10nFactory */
$l10nFactory = $this->createMock(IFactory::class);
$l10nFactory->method('get')->willReturn($l10n);
/** @var IURLGenerator | \PHPUnit_Framework_MockObject_MockObject $urlGenerator */
$urlGenerator = $this->createMock(IURLGenerator::class);
/** @var IDBConnection | \PHPUnit_Framework_MockObject_MockObject $db */
$db = $this->createMock(IDBConnection::class);
/** @var ISecureRandom | \PHPUnit_Framework_MockObject_MockObject $random */
$random = $this->createMock(ISecureRandom::class);
/** @var Defaults | \PHPUnit_Framework_MockObject_MockObject $defaults */
$defaults = $this->createMock(Defaults::class);
$defaults->expects($this->once())
->method('getName')
->will($this->returnValue('Instance Name 123'));
if ($has_buttons) {
$random->expects($this->once())
->method('generate')
->with(60, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')
->will($this->returnValue('random_token'));
}
$queryBuilder = $this->createMock(IQueryBuilder::class);
if ($has_buttons) {
$db->expects($this->once())
->method('getQueryBuilder')
->with()
->will($this->returnValue($queryBuilder));
$queryBuilder->expects($this->at(0))
->method('insert')
->with('calendar_invitations')
->will($this->returnValue($queryBuilder));
$queryBuilder->expects($this->at(8))
->method('values')
->will($this->returnValue($queryBuilder));
$queryBuilder->expects($this->at(9))
->method('execute');
} else {
$queryBuilder->expects($this->never())
->method('insert')
->with('calendar_invitations');
}
$plugin = new IMipPlugin($config, $mailer, $logger, $timeFactory, $l10nFactory, $urlGenerator, $defaults, $random, $db, 'user123');
$message = new Message();
$message->method = 'REQUEST';
$message->message = new VCalendar();
$message->message->add('VEVENT', [
'UID' => $message->uid,
'SEQUENCE' => $message->sequence,
'SUMMARY' => 'Fellowship meeting',
'DTSTART' => new \DateTime('2017-01-01 00:00:00') // 1483228800
]);
$message->message->VEVENT->add( 'ORGANIZER', 'mailto:gandalf@wiz.ard' );
$message->message->VEVENT->add( 'ATTENDEE', 'mailto:'.$recipient, [ 'RSVP' => 'TRUE' ] );
$message->sender = 'mailto:gandalf@wiz.ard';
$message->recipient = 'mailto:'.$recipient;
$emailTemplate->expects($this->once())
->method('setSubject')
->with('Invitation: Fellowship meeting');
$mailMessage->expects($this->once())
->method('setTo')
->with([$recipient => null]);
$mailMessage->expects($this->once())
->method('setReplyTo')
->with(['gandalf@wiz.ard' => null]);
$plugin->schedule($message);
$this->assertEquals('1.1', $message->getScheduleStatus());
}
public function dataIncludeResponseButtons() {
return [
// dav.invitation_link_recipients, recipient, $has_buttons
[ true, 'joe@internal.com', true],
[ 'joe@internal.com', 'joe@internal.com', true],
[ 'internal.com', 'joe@internal.com', true],
[ ['pete@otherinternal.com', 'internal.com'], 'joe@internal.com', true],
[ false, 'joe@internal.com', false],
[ 'internal.com', 'joe@external.com', false],
[ ['jane@otherinternal.com', 'internal.com'], 'joe@otherinternal.com', false],
];
}
}