summaryrefslogtreecommitdiff
path: root/service/test/unit/test_account_recovery.py
diff options
context:
space:
mode:
Diffstat (limited to 'service/test/unit/test_account_recovery.py')
-rw-r--r--service/test/unit/test_account_recovery.py93
1 files changed, 82 insertions, 11 deletions
diff --git a/service/test/unit/test_account_recovery.py b/service/test/unit/test_account_recovery.py
index af14814a..2a185347 100644
--- a/service/test/unit/test_account_recovery.py
+++ b/service/test/unit/test_account_recovery.py
@@ -13,24 +13,95 @@
#
# You should have received a copy of the GNU Affero General Public License
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+from email.mime.text import MIMEText
-from twisted.internet.defer import inlineCallbacks
+from twisted.internet import defer
from twisted.trial import unittest
+from twisted.mail import smtp
-from mock import patch, Mock
+from mock import patch, Mock, mock_open
+from mockito import when, any as ANY
from pixelated.account_recovery import AccountRecovery
class AccountRecoveryTest(unittest.TestCase):
+ def setUp(self):
+ self.generated_code = '4645a2f8997e5d0d'
+ self.mock_bonafide_session = Mock()
+ self.mock_soledad = Mock()
+ self.mock_smtp_config = Mock()
+ self.keymanager = Mock()
+ self.mock_smtp_config.remote_smtp_host = 'localhost'
+ self.mock_soledad.create_recovery_code.return_value = self.generated_code
+ self.backup_email = 'test@test.com'
+ self.domain = 'test.com'
+ self.account_recovery = AccountRecovery(
+ self.mock_bonafide_session,
+ self.mock_soledad,
+ self.mock_smtp_config,
+ self.backup_email,
+ self.domain)
+ self.mock_smtp = Mock()
- @inlineCallbacks
+ @defer.inlineCallbacks
def test_update_recovery_code(self):
- generated_code = '4645a2f8997e5d0d'
- mock_bonafide_session = Mock()
- mock_soledad = Mock()
- mock_soledad.create_recovery_code.return_value = generated_code
- account_recovery = AccountRecovery(mock_bonafide_session, mock_soledad)
-
- yield account_recovery.update_recovery_code()
- mock_bonafide_session.update_recovery_code.assert_called_once_with(generated_code)
+ when(self.account_recovery)._send_mail(ANY).thenReturn(defer.succeed(None))
+ yield self.account_recovery.update_recovery_code()
+ self.mock_bonafide_session.update_recovery_code.assert_called_once_with(self.generated_code)
+
+ @defer.inlineCallbacks
+ def test_creates_recovery_code(self):
+ when(self.account_recovery)._send_mail(ANY).thenReturn(defer.succeed(None))
+ yield self.account_recovery.update_recovery_code()
+ self.mock_soledad.create_recovery_code.assert_called_once()
+
+ @patch('pixelated.account_recovery.smtp.sendmail')
+ @patch('pixelated.account_recovery.pkg_resources.resource_filename')
+ @defer.inlineCallbacks
+ def test_default_email_template(self, mock_resource, mock_sendmail):
+ mock_sendmail.return_value = defer.succeed(None)
+
+ with patch('pixelated.account_recovery.open', mock_open(read_data=''), create=True):
+ yield self.account_recovery.update_recovery_code()
+ mock_resource.assert_called_once_with('pixelated.assets',
+ 'recovery.mail.en-US')
+
+ @patch('pixelated.account_recovery.smtp.sendmail')
+ @patch('pixelated.account_recovery.pkg_resources.resource_filename')
+ @defer.inlineCallbacks
+ def test_portuguese_email_template(self, mock_resource, mock_sendmail):
+ self.account_recovery = AccountRecovery(
+ self.mock_bonafide_session,
+ self.mock_soledad,
+ self.mock_smtp_config,
+ self.backup_email,
+ self.domain,
+ language='pt-BR')
+ mock_sendmail.return_value = defer.succeed(None)
+
+ with patch('pixelated.account_recovery.open', mock_open(read_data=''), create=True):
+ yield self.account_recovery.update_recovery_code()
+ mock_resource.assert_called_once_with('pixelated.assets',
+ 'recovery.mail.pt-BR')
+
+ @patch('pixelated.account_recovery.date.mail_date_now')
+ @patch('pixelated.account_recovery.smtp.sendmail')
+ @patch('pixelated.account_recovery.pkg_resources.resource_filename')
+ @defer.inlineCallbacks
+ def test_send_recovery_code_by_email(self, mock_resource, mock_sendmail, mock_date):
+ mock_sendmail.return_value = defer.succeed(None)
+ mock_date.return_value = 'Sat, 21 Mar 2015 19:30:09 -0300'
+
+ sender = 'team@{}'.format(self.domain)
+ mock_file_content = '{backup_email}, {sender}, {date}, {domain}, {recovery_code}'
+ recovery_code_email = '\ntest@test.com, team@test.com, Sat, 21 Mar 2015 19:30:09 -0300, test.com, 34363435613266383939376535643064'
+
+ with patch('pixelated.account_recovery.open', mock_open(read_data=mock_file_content), create=True):
+ yield self.account_recovery.update_recovery_code()
+
+ mock_sendmail.assert_called_with(
+ self.mock_smtp_config.remote_smtp_host,
+ sender,
+ [self.backup_email],
+ recovery_code_email)