update_label_access_test.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. """Tests for update_label_access.py."""
  2. __copyright__ = """
  3. Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  4. Exceptions. See /LICENSE for license information.
  5. SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. """
  7. import os
  8. import unittest
  9. from unittest import mock
  10. import github # type: ignore
  11. from github_tools import github_helpers
  12. from github_tools import update_label_access
  13. class TestUpdateLabelAccess(unittest.TestCase):
  14. def setUp(self):
  15. # Stub out the access token.
  16. os.environ[github_helpers._ENV_TOKEN] = "unused"
  17. self.client = mock.create_autospec(github_helpers.Client, instance=True)
  18. self.gh = mock.create_autospec(github.Github, instance=True)
  19. self.gh_org = mock.create_autospec(github.Organization, instance=True)
  20. self.gh_team = mock.create_autospec(github.Team, instance=True)
  21. self.gh.get_organization = mock.MagicMock(return_value=self.gh_org)
  22. self.gh_org.get_team_by_slug = mock.MagicMock(return_value=self.gh_team)
  23. def _mock_nodes(self, logins):
  24. self.client.execute_and_paginate.return_value = [
  25. {"login": login} for login in logins
  26. ]
  27. def test_load_org_members_empty(self):
  28. self._mock_nodes([])
  29. self.assertRaises(
  30. AssertionError, update_label_access._load_org_members, self.client
  31. )
  32. def test_load_org_members_missing_ignored(self):
  33. self._mock_nodes(["foo", "bar"])
  34. self.assertRaises(
  35. AssertionError, update_label_access._load_org_members, self.client
  36. )
  37. def test_load_org_members_ignored_only(self):
  38. self._mock_nodes(update_label_access._IGNORE_ACCOUNTS)
  39. self.assertEqual(
  40. update_label_access._load_org_members(self.client), set()
  41. )
  42. def test_load_org_members_found(self):
  43. self._mock_nodes(
  44. ["foo", "bar"] + list(update_label_access._IGNORE_ACCOUNTS)
  45. )
  46. self.assertEqual(
  47. update_label_access._load_org_members(self.client),
  48. set(["foo", "bar"]),
  49. )
  50. def test_load_team_members_empty(self):
  51. self._mock_nodes([])
  52. self.assertEqual(
  53. update_label_access._load_team_members(self.client), set()
  54. )
  55. def test_load_team_members_found(self):
  56. self._mock_nodes(["foo", "bar"])
  57. self.assertEqual(
  58. update_label_access._load_team_members(self.client),
  59. set(["foo", "bar"]),
  60. )
  61. def test_update_team_empty(self):
  62. update_label_access._update_team(self.gh, set(), set())
  63. def test_update_team_equal(self):
  64. update_label_access._update_team(
  65. self.gh, set(["foo", "bar"]), set(["foo", "bar"])
  66. )
  67. def test_update_team_add(self):
  68. self.gh.get_user = mock.MagicMock(return_value="bar-user")
  69. self.gh_team.add_membership = mock.MagicMock()
  70. update_label_access._update_team(
  71. self.gh, set(["foo", "bar"]), set(["foo"])
  72. )
  73. self.gh.get_user.assert_called_once_with("bar")
  74. self.gh_team.add_membership.assert_called_once_with("bar-user")
  75. def test_update_team_remove(self):
  76. self.gh.get_user = mock.MagicMock(return_value="bar-user")
  77. self.gh_team.remove_membership = mock.MagicMock()
  78. update_label_access._update_team(
  79. self.gh, set(["foo"]), set(["foo", "bar"])
  80. )
  81. self.gh.get_user.assert_called_once_with("bar")
  82. self.gh_team.remove_membership.assert_called_once_with("bar-user")
  83. if __name__ == "__main__":
  84. unittest.main()