diff options
author | Lukas Reschke <lukas@owncloud.com> | 2014-10-03 15:14:22 +0200 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2014-10-14 15:38:34 +0200 |
commit | 13b1b45ee4bab5b832ca3a1602b4c4fb6d391f86 (patch) | |
tree | 3f8d7ef142cdc98472d883bbb18d94dbde57a939 /tests/settings | |
parent | 766314a6be5a24a4bd7d503d9c44998c13fe348b (diff) | |
download | nextcloud-server-13b1b45ee4bab5b832ca3a1602b4c4fb6d391f86.tar.gz nextcloud-server-13b1b45ee4bab5b832ca3a1602b4c4fb6d391f86.zip |
Refactor MailSettings controller
- Do not store the password (fixes https://github.com/owncloud/core/issues/11385)
- Refactor to AppFramework
- Add unit tests
Conflicts:
settings/admin/controller.php
Diffstat (limited to 'tests/settings')
-rw-r--r-- | tests/settings/controller/mailsettingscontrollertest.php | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/tests/settings/controller/mailsettingscontrollertest.php b/tests/settings/controller/mailsettingscontrollertest.php new file mode 100644 index 00000000000..5a1add95449 --- /dev/null +++ b/tests/settings/controller/mailsettingscontrollertest.php @@ -0,0 +1,196 @@ +<?php +/** + * @author Lukas Reschke + * @copyright 2014 Lukas Reschke lukas@owncloud.com + * + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +namespace OC\Settings\Controller; + +use \OC\Settings\Application; + +/** + * @package OC\Settings\Controller + */ +class MailSettingscontrollerTest extends \PHPUnit_Framework_TestCase { + + private $container; + + protected function setUp() { + $app = new Application(); + $this->container = $app->getContainer(); + $this->container['Config'] = $this->getMockBuilder('\OCP\IConfig') + ->disableOriginalConstructor()->getMock(); + $this->container['L10N'] = $this->getMockBuilder('\OCP\IL10N') + ->disableOriginalConstructor()->getMock(); + $this->container['AppName'] = 'settings'; + $this->container['UserSession'] = $this->getMockBuilder('\OC\User\Session') + ->disableOriginalConstructor()->getMock(); + $this->container['Mail'] = $this->getMockBuilder('\OC_Mail') + ->disableOriginalConstructor()->getMock(); + $this->container['Defaults'] = $this->getMockBuilder('\OC_Defaults') + ->disableOriginalConstructor()->getMock(); + $this->container['DefaultMailAddress'] = 'no-reply@owncloud.com'; + } + + public function testSetMailSettings() { + $this->container['L10N'] + ->expects($this->exactly(2)) + ->method('t') + ->will($this->returnValue('Saved')); + + /** + * FIXME: Use the following block once Jenkins uses PHPUnit >= 4.1 + */ + /* + $this->container['Config'] + ->expects($this->exactly(15)) + ->method('setSystemValue') + ->withConsecutive( + array($this->equalTo('mail_domain'), $this->equalTo('owncloud.com')), + array($this->equalTo('mail_from_address'), $this->equalTo('demo@owncloud.com')), + array($this->equalTo('mail_smtpmode'), $this->equalTo('smtp')), + array($this->equalTo('mail_smtpsecure'), $this->equalTo('ssl')), + array($this->equalTo('mail_smtphost'), $this->equalTo('mx.owncloud.org')), + array($this->equalTo('mail_smtpauthtype'), $this->equalTo('NTLM')), + array($this->equalTo('mail_smtpauth'), $this->equalTo(1)), + array($this->equalTo('mail_smtpport'), $this->equalTo('25')), + array($this->equalTo('mail_domain'), $this->equalTo('owncloud.com')), + array($this->equalTo('mail_from_address'), $this->equalTo('demo@owncloud.com')), + array($this->equalTo('mail_smtpmode'), $this->equalTo('smtp')), + array($this->equalTo('mail_smtpsecure'), $this->equalTo('ssl')), + array($this->equalTo('mail_smtphost'), $this->equalTo('mx.owncloud.org')), + array($this->equalTo('mail_smtpauthtype'), $this->equalTo('NTLM')), + array($this->equalTo('mail_smtpport'), $this->equalTo('25')) + ); + */ + + $this->container['Config'] + ->expects($this->exactly(15)) + ->method('setSystemValue'); + + /** + * FIXME: Use the following block once Jenkins uses PHPUnit >= 4.1 + */ + /* + $this->container['Config'] + ->expects($this->exactly(3)) + ->method('deleteSystemValue') + ->withConsecutive( + array($this->equalTo('mail_smtpauth')), + array($this->equalTo('mail_smtpname')), + array($this->equalTo('mail_smtppassword')) + ); + */ + $this->container['Config'] + ->expects($this->exactly(3)) + ->method('deleteSystemValue'); + + // With authentication + $response = $this->container['MailSettingsController']->setMailSettings( + 'owncloud.com', + 'demo@owncloud.com', + 'smtp', + 'ssl', + 'mx.owncloud.org', + 'NTLM', + 1, + '25' + ); + $expectedResponse = array('data' => array('message' =>'Saved'), 'status' => 'success'); + $this->assertSame($expectedResponse, $response); + + // Without authentication (testing the deletion of the stored password) + $response = $this->container['MailSettingsController']->setMailSettings( + 'owncloud.com', + 'demo@owncloud.com', + 'smtp', + 'ssl', + 'mx.owncloud.org', + 'NTLM', + 0, + '25' + ); + $expectedResponse = array('data' => array('message' =>'Saved'), 'status' => 'success'); + $this->assertSame($expectedResponse, $response); + + } + + public function testStoreCredentials() { + $this->container['L10N'] + ->expects($this->once()) + ->method('t') + ->will($this->returnValue('Saved')); + + /** + * FIXME: Use this block once Jenkins uses PHPUnit >= 4.1 + */ + /* + $this->container['Config'] + ->expects($this->exactly(2)) + ->method('setSystemValue') + ->withConsecutive( + array($this->equalTo('mail_smtpname'), $this->equalTo('UsernameToStore')), + array($this->equalTo('mail_smtppassword'), $this->equalTo('PasswordToStore')) + ); + */ + $this->container['Config'] + ->expects($this->exactly(2)) + ->method('setSystemValue'); + + $response = $this->container['MailSettingsController']->storeCredentials('UsernameToStore', 'PasswordToStore'); + $expectedResponse = array('data' => array('message' =>'Saved'), 'status' => 'success'); + + $this->assertSame($expectedResponse, $response); + } + + public function testSendTestMail() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor() + ->getMock(); + $user->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('Werner')); + $user->expects($this->any()) + ->method('getDisplayName') + ->will($this->returnValue('Werner Brösel')); + + $this->container['L10N'] + ->expects($this->any()) + ->method('t') + ->will( + $this->returnValueMap( + array( + array('You need to set your user email before being able to send test emails.', array(), + 'You need to set your user email before being able to send test emails.'), + array('A problem occurred while sending the e-mail. Please revisit your settings.', array(), + 'A problem occurred while sending the e-mail. Please revisit your settings.'), + array('Email sent', array(), 'Email sent'), + array('test email settings', array(), 'test email settings'), + array('If you received this email, the settings seems to be correct.', array(), + 'If you received this email, the settings seems to be correct.') + ) + )); + $this->container['UserSession'] + ->expects($this->any()) + ->method('getUser') + ->will($this->returnValue($user)); + + // Ensure that it fails when no mail address has been specified + $response = $this->container['MailSettingsController']->sendTestMail(); + $expectedResponse = array('data' => array('message' =>'You need to set your user email before being able to send test emails.'), 'status' => 'error'); + $this->assertSame($expectedResponse, $response); + + // If no exception is thrown it should work + $this->container['Config'] + ->expects($this->any()) + ->method('getUserValue') + ->will($this->returnValue('mail@example.invalid')); + $response = $this->container['MailSettingsController']->sendTestMail(); + $expectedResponse = array('data' => array('message' =>'Email sent'), 'status' => 'success'); + $this->assertSame($expectedResponse, $response); + } + +}
\ No newline at end of file |