2018-09-29 21:56:23 +03:00
< ? php
2019-12-03 21:57:53 +03:00
2018-09-29 21:56:23 +03:00
declare ( strict_types = 1 );
2019-12-03 21:57:53 +03:00
2018-09-29 21:56:23 +03:00
/**
* @ copyright Copyright ( c ) 2018 , Roeland Jago Douma < roeland @ famdouma . nl >
*
2020-04-29 12:57:22 +03:00
* @ author Christoph Wurst < christoph @ winzerhof - wurst . at >
2019-12-03 21:57:53 +03:00
* @ author Jan - Christoph Borchardt < hey @ jancborchardt . net >
* @ author Joas Schilling < coding @ schilljs . com >
2020-08-24 15:54:25 +03:00
* @ author Morris Jobke < hey @ morrisjobke . de >
2018-09-29 21:56:23 +03:00
* @ author Roeland Jago Douma < roeland @ famdouma . nl >
*
* @ 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
2019-12-03 21:57:53 +03:00
* along with this program . If not , see < http :// www . gnu . org / licenses />.
2018-09-29 21:56:23 +03:00
*
*/
namespace OCA\TwoFactorBackupCodes\Tests\Unit\Notification ;
use OCA\TwoFactorBackupCodes\Notifications\Notifier ;
use OCP\IL10N ;
2019-02-11 16:29:44 +03:00
use OCP\IURLGenerator ;
2018-09-29 21:56:23 +03:00
use OCP\L10N\IFactory ;
use OCP\Notification\INotification ;
2019-02-11 16:29:44 +03:00
use PHPUnit\Framework\MockObject\MockObject ;
2018-09-29 21:56:23 +03:00
use Test\TestCase ;
class NotifierTest extends TestCase {
/** @var Notifier */
protected $notifier ;
2019-02-11 16:29:44 +03:00
/** @var IFactory|MockObject */
2018-09-29 21:56:23 +03:00
protected $factory ;
2019-02-11 16:29:44 +03:00
/** @var IURLGenerator|MockObject */
protected $url ;
/** @var IL10N|MockObject */
2018-09-29 21:56:23 +03:00
protected $l ;
2019-11-21 18:40:38 +03:00
protected function setUp () : void {
2018-09-29 21:56:23 +03:00
parent :: setUp ();
$this -> l = $this -> createMock ( IL10N :: class );
$this -> l -> expects ( $this -> any ())
-> method ( 't' )
2020-04-09 14:53:40 +03:00
-> willReturnCallback ( function ( $string , $args ) {
2018-09-29 21:56:23 +03:00
return vsprintf ( $string , $args );
});
$this -> factory = $this -> createMock ( IFactory :: class );
2019-02-11 16:29:44 +03:00
$this -> url = $this -> createMock ( IURLGenerator :: class );
2018-09-29 21:56:23 +03:00
$this -> factory -> expects ( $this -> any ())
-> method ( 'get' )
-> willReturn ( $this -> l );
$this -> notifier = new Notifier (
2019-02-11 16:29:44 +03:00
$this -> factory ,
$this -> url
2018-09-29 21:56:23 +03:00
);
}
2020-08-11 22:32:18 +03:00
2018-09-29 21:56:23 +03:00
public function testPrepareWrongApp () {
2019-11-27 17:27:18 +03:00
$this -> expectException ( \InvalidArgumentException :: class );
2020-08-11 22:32:18 +03:00
/** @var INotification|\PHPUnit\Framework\MockObject\MockObject $notification */
2018-09-29 21:56:23 +03:00
$notification = $this -> createMock ( INotification :: class );
$notification -> expects ( $this -> once ())
-> method ( 'getApp' )
-> willReturn ( 'notifications' );
$notification -> expects ( $this -> never ())
-> method ( 'getSubject' );
$this -> notifier -> prepare ( $notification , 'en' );
}
2020-08-11 22:32:18 +03:00
2018-09-29 21:56:23 +03:00
public function testPrepareWrongSubject () {
2019-11-27 17:27:18 +03:00
$this -> expectException ( \InvalidArgumentException :: class );
2020-08-11 22:32:18 +03:00
/** @var INotification|\PHPUnit\Framework\MockObject\MockObject $notification */
2018-09-29 21:56:23 +03:00
$notification = $this -> createMock ( INotification :: class );
$notification -> expects ( $this -> once ())
-> method ( 'getApp' )
-> willReturn ( 'twofactor_backupcodes' );
$notification -> expects ( $this -> once ())
-> method ( 'getSubject' )
-> willReturn ( 'wrong subject' );
$this -> notifier -> prepare ( $notification , 'en' );
}
public function testPrepare () {
2020-08-11 22:32:18 +03:00
/** @var \OCP\Notification\INotification|\PHPUnit\Framework\MockObject\MockObject $notification */
2018-09-29 21:56:23 +03:00
$notification = $this -> createMock ( INotification :: class );
$notification -> expects ( $this -> once ())
-> method ( 'getApp' )
-> willReturn ( 'twofactor_backupcodes' );
$notification -> expects ( $this -> once ())
-> method ( 'getSubject' )
-> willReturn ( 'create_backupcodes' );
$this -> factory -> expects ( $this -> once ())
-> method ( 'get' )
-> with ( 'twofactor_backupcodes' , 'nl' )
-> willReturn ( $this -> l );
$notification -> expects ( $this -> once ())
-> method ( 'setParsedSubject' )
-> with ( 'Generate backup codes' )
-> willReturnSelf ();
$notification -> expects ( $this -> once ())
-> method ( 'setParsedMessage' )
2019-07-16 11:23:34 +03:00
-> with ( 'You enabled two-factor authentication but did not generate backup codes yet. They are needed to restore access to your account in case you lose your second factor.' )
2018-09-29 21:56:23 +03:00
-> willReturnSelf ();
2019-02-11 16:29:44 +03:00
$this -> url -> expects ( $this -> once ())
-> method ( 'linkToRouteAbsolute' )
-> with ( 'settings.PersonalSettings.index' , [ 'section' => 'security' ])
-> willReturn ( 'linkToRouteAbsolute' );
$notification -> expects ( $this -> once ())
-> method ( 'setLink' )
-> with ( 'linkToRouteAbsolute' )
-> willReturnSelf ();
2018-09-29 21:56:23 +03:00
$return = $this -> notifier -> prepare ( $notification , 'nl' );
$this -> assertEquals ( $notification , $return );
}
}