Source code for infrahouse_toolkit.terraform.tests.github_pr.test_publish_comment
from os import environ
from unittest import mock
from unittest.mock import Mock, call
import pytest
from github import GithubException
from infrahouse_toolkit.terraform import RunOutput, TFStatus, parse_plan
from infrahouse_toolkit.terraform.backends import TFS3Backend
from infrahouse_toolkit.terraform.githubpr import GitHubPR
[docs]@pytest.mark.skipif("GITHUB_TOKEN" not in environ, reason="This is a development test, needs GITHUB_TOKEN")
def test_publish_comment():
gh_pr = GitHubPR("infrahouse8/github-control", 33)
gh_pr.delete_my_comments()
counts, resources = parse_plan(open("infrahouse_toolkit/terraform/tests/plans/plan-2-1-2.stdout").read())
status = TFStatus(
TFS3Backend("foo-bucket", "path/to/key.state"),
success=True,
run_result=counts,
run_output=RunOutput(open("infrahouse_toolkit/terraform/tests/plans/plan-2-1-2.stdout").read(), None),
affected_resources=resources,
)
print(status.comment)
gh_pr.publish_comment(status.comment)
[docs]def test_publish_too_large_comment():
gh_pr = GitHubPR("foo/bar", 123)
mock_pull_request = Mock()
mock_pull_request.create_issue_comment.side_effect = [GithubException(422, "some data", {}), None]
mock_gist = Mock()
mock_gist.html_url = "gist url"
with mock.patch.object(
GitHubPR, "pull_request", new_callable=mock.PropertyMock, return_value=mock_pull_request
), mock.patch.object(GitHubPR, "_publish_gist", return_value=mock_gist) as mock_publish_gist:
gh_pr.publish_comment("foo comment")
mock_publish_gist.assert_not_called()
mock_pull_request.create_issue_comment.assert_has_calls(
[call("foo comment"), call("Comment was too big. Check the CI workflow output.")]
)