#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Tests for email_sender.""" from __future__ import print_function import contextlib import io import json import unittest import unittest.mock as mock import cros_utils.email_sender as email_sender class Test(unittest.TestCase): """Tests for email_sender.""" @mock.patch('cros_utils.email_sender.AtomicallyWriteFile') def test_x20_email_sending_rejects_invalid_inputs(self, write_file): test_cases = [ { # no subject 'subject': '', 'identifier': 'foo', 'direct_recipients': ['gbiv@google.com'], 'text_body': 'hi', }, { 'subject': 'foo', # no identifier 'identifier': '', 'direct_recipients': ['gbiv@google.com'], 'text_body': 'hi', }, { 'subject': 'foo', 'identifier': 'foo', # no recipients 'direct_recipients': [], 'text_body': 'hi', }, { 'subject': 'foo', 'identifier': 'foo', 'direct_recipients': ['gbiv@google.com'], # no body }, { 'subject': 'foo', 'identifier': 'foo', # direct recipients lack @google. 'direct_recipients': ['gbiv'], 'text_body': 'hi', }, { 'subject': 'foo', 'identifier': 'foo', # non-list recipients 'direct_recipients': 'gbiv@google.com', 'text_body': 'hi', }, { 'subject': 'foo', 'identifier': 'foo', # non-list recipients 'well_known_recipients': 'sheriff', 'text_body': 'hi', }, ] sender = email_sender.EmailSender() for case in test_cases: with self.assertRaises(ValueError): sender.SendX20Email(**case) write_file.assert_not_called() @mock.patch('cros_utils.email_sender.AtomicallyWriteFile') def test_x20_email_sending_translates_to_reasonable_json(self, write_file): written_obj = None @contextlib.contextmanager def actual_write_file(file_path): nonlocal written_obj self.assertTrue( file_path.startswith(email_sender.X20_PATH + '/'), file_path) f = io.StringIO() yield f written_obj = json.loads(f.getvalue()) write_file.side_effect = actual_write_file email_sender.EmailSender().SendX20Email( subject='hello', identifier='world', well_known_recipients=['sheriff'], direct_recipients=['gbiv@google.com'], text_body='text', html_body='html', ) self.assertEqual( written_obj, { 'subject': 'hello', 'email_identifier': 'world', 'well_known_recipients': ['sheriff'], 'direct_recipients': ['gbiv@google.com'], 'body': 'text', 'html_body': 'html', }) if __name__ == '__main__': unittest.main()