| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| |
| # Copyright 2020 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Tests for email_sender.""" |
| |
| |
| 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": "detective", |
| "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=["detective"], |
| direct_recipients=["gbiv@google.com"], |
| text_body="text", |
| html_body="html", |
| ) |
| |
| self.assertEqual( |
| written_obj, |
| { |
| "subject": "hello", |
| "email_identifier": "world", |
| "well_known_recipients": ["detective"], |
| "direct_recipients": ["gbiv@google.com"], |
| "body": "text", |
| "html_body": "html", |
| }, |
| ) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |