mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-03 06:25:49 +01:00
Merge carbon-project-tools back into carbon-lang (#203)
As proposed at https://forums.carbon-lang.dev/t/merged-repo-structure/174: - carbon-lang:/src/jekyll -> carbon-lang:/website/jekyll - carbon-lang:/src/scripts -> carbon-lang:/proposals/scripts - carbon-project-tools:/firebase -> carbon-lang:/website/firebase - carbon-project-tools:/github -> carbon-lang:/github
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
"""Tests for github_helpers.py."""
|
||||
|
||||
__copyright__ = """
|
||||
Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
||||
Exceptions. See /LICENSE for license information.
|
||||
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
"""
|
||||
|
||||
import unittest
|
||||
from unittest import mock
|
||||
|
||||
import github_helpers
|
||||
|
||||
|
||||
_TEST_QUERY = """
|
||||
query {
|
||||
top(login: "foo") {
|
||||
child(first: 100%(cursor)s) {
|
||||
nodes {
|
||||
login
|
||||
}
|
||||
%(pagination)s
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
_TEST_QUERY_PATH = ("top", "child")
|
||||
|
||||
_EXP_QUERY_FIRST_PAGE = """
|
||||
query {
|
||||
top(login: "foo") {
|
||||
child(first: 100) {
|
||||
nodes {
|
||||
login
|
||||
}
|
||||
pageInfo {
|
||||
hasNextPage
|
||||
endCursor
|
||||
}
|
||||
totalCount
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
_EXP_QUERY_SECOND_PAGE = """
|
||||
query {
|
||||
top(login: "foo") {
|
||||
child(first: 100 after: "CURSOR") {
|
||||
nodes {
|
||||
login
|
||||
}
|
||||
pageInfo {
|
||||
hasNextPage
|
||||
endCursor
|
||||
}
|
||||
totalCount
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
|
||||
class TestGithubHelpers(unittest.TestCase):
|
||||
def setUp(self):
|
||||
patcher = mock.patch.object(
|
||||
github_helpers.Client, "__init__", lambda self, parsed_args: None
|
||||
)
|
||||
self.addCleanup(patcher.stop)
|
||||
patcher.start()
|
||||
self.client = github_helpers.Client(None)
|
||||
|
||||
@staticmethod
|
||||
def mock_result(nodes, total_count=None, has_next_page=False):
|
||||
if total_count is None:
|
||||
total_count = len(nodes)
|
||||
end_cursor = None
|
||||
if has_next_page:
|
||||
end_cursor = "CURSOR"
|
||||
return {
|
||||
"top": {
|
||||
"child": {
|
||||
"nodes": nodes,
|
||||
"pageInfo": {
|
||||
"hasNextPage": has_next_page,
|
||||
"endCursor": end_cursor,
|
||||
},
|
||||
"totalCount": total_count,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def test_execute_and_paginate_empty(self):
|
||||
self.client.execute = mock.MagicMock(return_value=self.mock_result([]))
|
||||
self.assertEqual(
|
||||
list(
|
||||
self.client.execute_and_paginate(_TEST_QUERY, _TEST_QUERY_PATH)
|
||||
),
|
||||
[],
|
||||
)
|
||||
self.client.execute.assert_called_once_with(_EXP_QUERY_FIRST_PAGE)
|
||||
|
||||
def test_execute_and_paginate_one_page(self):
|
||||
self.client.execute = mock.MagicMock(
|
||||
return_value=self.mock_result(["foo", "bar", "baz"])
|
||||
)
|
||||
self.assertEqual(
|
||||
list(
|
||||
self.client.execute_and_paginate(_TEST_QUERY, _TEST_QUERY_PATH)
|
||||
),
|
||||
["foo", "bar", "baz"],
|
||||
)
|
||||
self.client.execute.assert_called_once_with(_EXP_QUERY_FIRST_PAGE)
|
||||
|
||||
def test_execute_and_paginate_one_page_count_mismatch(self):
|
||||
self.client.execute = mock.MagicMock(
|
||||
return_value=self.mock_result(["foo"], total_count=2),
|
||||
)
|
||||
self.assertRaises(
|
||||
AssertionError,
|
||||
list,
|
||||
self.client.execute_and_paginate(_TEST_QUERY, _TEST_QUERY_PATH),
|
||||
)
|
||||
self.client.execute.assert_called_once_with(_EXP_QUERY_FIRST_PAGE)
|
||||
|
||||
def test_execute_and_paginate_two_page(self):
|
||||
def paging(query):
|
||||
if query == _EXP_QUERY_FIRST_PAGE:
|
||||
return self.mock_result(
|
||||
["foo", "bar"], total_count=3, has_next_page=True
|
||||
)
|
||||
elif query == _EXP_QUERY_SECOND_PAGE:
|
||||
return self.mock_result(["baz"], total_count="unused")
|
||||
else:
|
||||
raise ValueError("Bad query: %s" % query)
|
||||
|
||||
self.client.execute = mock.MagicMock(side_effect=paging)
|
||||
self.assertEqual(
|
||||
list(
|
||||
self.client.execute_and_paginate(_TEST_QUERY, _TEST_QUERY_PATH)
|
||||
),
|
||||
["foo", "bar", "baz"],
|
||||
)
|
||||
self.assertEqual(self.client.execute.call_count, 2)
|
||||
|
||||
def test_execute_and_paginate_first_page_done(self):
|
||||
self.client.execute = mock.MagicMock()
|
||||
self.assertEqual(
|
||||
list(
|
||||
self.client.execute_and_paginate(
|
||||
_TEST_QUERY,
|
||||
_TEST_QUERY_PATH,
|
||||
first_page=self.mock_result(["foo"]),
|
||||
)
|
||||
),
|
||||
["foo"],
|
||||
)
|
||||
self.assertEqual(self.client.execute.call_count, 0)
|
||||
|
||||
def test_execute_and_paginate_first_page_continue(self):
|
||||
self.client.execute = mock.MagicMock(
|
||||
return_value=self.mock_result(["bar"], total_count="unused")
|
||||
)
|
||||
self.assertEqual(
|
||||
list(
|
||||
self.client.execute_and_paginate(
|
||||
_TEST_QUERY,
|
||||
_TEST_QUERY_PATH,
|
||||
first_page=self.mock_result(
|
||||
["foo"], total_count=2, has_next_page=True
|
||||
),
|
||||
)
|
||||
),
|
||||
["foo", "bar"],
|
||||
)
|
||||
self.client.execute.assert_called_once_with(_EXP_QUERY_SECOND_PAGE)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user