2018-09-29 14:56:23 -04:00
< ? php
2019-12-03 13:57:53 -05:00
2018-09-29 14:56:23 -04:00
declare ( strict_types = 1 );
2019-12-03 13:57:53 -05:00
2018-09-29 14:56:23 -04:00
/**
2024-05-30 14:13:41 -04:00
* SPDX - FileCopyrightText : 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX - License - Identifier : AGPL - 3.0 - or - later
2018-09-29 14:56:23 -04:00
*/
namespace OCA\TwoFactorBackupCodes\Tests\Unit\Notification ;
use OCA\TwoFactorBackupCodes\Notifications\Notifier ;
use OCP\IL10N ;
2019-02-11 08:29:44 -05:00
use OCP\IURLGenerator ;
2018-09-29 14:56:23 -04:00
use OCP\L10N\IFactory ;
use OCP\Notification\INotification ;
2019-02-11 08:29:44 -05:00
use PHPUnit\Framework\MockObject\MockObject ;
2018-09-29 14:56:23 -04:00
use Test\TestCase ;
class NotifierTest extends TestCase {
2025-05-13 16:23:39 -04:00
protected IFactory & MockObject $factory ;
protected IURLGenerator & MockObject $url ;
protected IL10N & MockObject $l ;
protected Notifier $notifier ;
2018-09-29 14:56:23 -04:00
2019-11-21 10:40:38 -05:00
protected function setUp () : void {
2018-09-29 14:56:23 -04:00
parent :: setUp ();
$this -> l = $this -> createMock ( IL10N :: class );
$this -> l -> expects ( $this -> any ())
-> method ( 't' )
2020-04-09 07:53:40 -04:00
-> willReturnCallback ( function ( $string , $args ) {
2018-09-29 14:56:23 -04:00
return vsprintf ( $string , $args );
});
$this -> factory = $this -> createMock ( IFactory :: class );
2019-02-11 08:29:44 -05:00
$this -> url = $this -> createMock ( IURLGenerator :: class );
2018-09-29 14:56:23 -04:00
$this -> factory -> expects ( $this -> any ())
-> method ( 'get' )
-> willReturn ( $this -> l );
$this -> notifier = new Notifier (
2019-02-11 08:29:44 -05:00
$this -> factory ,
$this -> url
2018-09-29 14:56:23 -04:00
);
}
2020-08-11 15:32:18 -04:00
2018-09-29 14:56:23 -04:00
public function testPrepareWrongApp () : void {
2019-11-27 09:27:18 -05:00
$this -> expectException ( \InvalidArgumentException :: class );
2025-05-13 16:23:39 -04:00
/** @var INotification|MockObject $notification */
2018-09-29 14:56:23 -04: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 15:32:18 -04:00
2018-09-29 14:56:23 -04:00
public function testPrepareWrongSubject () : void {
2019-11-27 09:27:18 -05:00
$this -> expectException ( \InvalidArgumentException :: class );
2025-05-13 16:23:39 -04:00
/** @var INotification|MockObject $notification */
2018-09-29 14:56:23 -04: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 () : void {
2025-05-13 16:23:39 -04:00
/** @var INotification&MockObject $notification */
2018-09-29 14:56:23 -04: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 04:23:34 -04: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 14:56:23 -04:00
-> willReturnSelf ();
2019-02-11 08:29:44 -05: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 14:56:23 -04:00
$return = $this -> notifier -> prepare ( $notification , 'nl' );
$this -> assertEquals ( $notification , $return );
}
}