#!/usr/bin/env python3 # Copyright 2021 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # We're testing protected methods, so allow protected access. # pylint: disable=protected-access """Tests bug filing bits.""" import json import tempfile import unittest from unittest.mock import patch import bugs class Tests(unittest.TestCase): """Tests for the bugs module.""" def testWritingJSONFileSeemsToWork(self): """Tests JSON file writing.""" old_x20_path = bugs.X20_PATH def restore_x20_path(): bugs.X20_PATH = old_x20_path self.addCleanup(restore_x20_path) with tempfile.TemporaryDirectory() as tempdir: bugs.X20_PATH = tempdir file_path = bugs._WriteBugJSONFile( "ObjectType", { "foo": "bar", "baz": bugs.WellKnownComponents.CrOSToolchainPublic, }, ) self.assertTrue( file_path.startswith(tempdir), f"Expected {file_path} to start with {tempdir}", ) with open(file_path) as f: self.assertEqual( json.load(f), { "type": "ObjectType", "value": { "foo": "bar", "baz": int( bugs.WellKnownComponents.CrOSToolchainPublic ), }, }, ) @patch("bugs._WriteBugJSONFile") def testAppendingToBugsSeemsToWork(self, mock_write_json_file): """Tests AppendToExistingBug.""" bugs.AppendToExistingBug(1234, "hello, world!") mock_write_json_file.assert_called_once_with( "AppendToExistingBugRequest", { "body": "hello, world!", "bug_id": 1234, }, ) @patch("bugs._WriteBugJSONFile") def testBugCreationSeemsToWork(self, mock_write_json_file): """Tests CreateNewBug.""" test_case_additions = ( {}, { "component_id": bugs.WellKnownComponents.CrOSToolchainPublic, }, { "assignee": "foo@gbiv.com", "cc": ["bar@baz.com"], }, ) for additions in test_case_additions: test_case = { "component_id": 123, "title": "foo", "body": "bar", **additions, } bugs.CreateNewBug(**test_case) expected_output = { "component_id": test_case["component_id"], "subject": test_case["title"], "body": test_case["body"], } assignee = test_case.get("assignee") if assignee: expected_output["assignee"] = assignee cc = test_case.get("cc") if cc: expected_output["cc"] = cc mock_write_json_file.assert_called_once_with( "FileNewBugRequest", expected_output, ) mock_write_json_file.reset_mock() @patch("bugs._WriteBugJSONFile") def testCronjobLogSendingSeemsToWork(self, mock_write_json_file): """Tests SendCronjobLog.""" bugs.SendCronjobLog("my_name", False, "hello, world!") mock_write_json_file.assert_called_once_with( "ChrotomationCronjobUpdate", { "name": "my_name", "message": "hello, world!", "failed": False, }, ) if __name__ == "__main__": unittest.main()