Files
2024-02-15 17:01:50 +00:00

124 lines
4.2 KiB
Python

from functools import cached_property
import pytest
import responses
from django.contrib.auth.models import AnonymousUser
from django.test import RequestFactory
from sentry.exceptions import PluginError
from sentry.testutils.cases import PluginTestCase
from sentry.testutils.silo import region_silo_test
from sentry_plugins.bitbucket.plugin import BitbucketPlugin
@region_silo_test
class BitbucketPluginTest(PluginTestCase):
@cached_property
def plugin(self):
return BitbucketPlugin()
@cached_property
def request(self):
return RequestFactory()
def test_conf_key(self):
assert self.plugin.conf_key == "bitbucket"
def test_entry_point(self):
self.assertPluginInstalled("bitbucket", self.plugin)
def test_get_issue_label(self):
group = self.create_group(message="Hello world", culprit="foo.bar")
assert self.plugin.get_issue_label(group, 1) == "Bitbucket-1"
def test_get_issue_url(self):
self.plugin.set_option("repo", "maxbittker/newsdiffs", self.project)
group = self.create_group(message="Hello world", culprit="foo.bar")
assert (
self.plugin.get_issue_url(group, 1)
== "https://bitbucket.org/maxbittker/newsdiffs/issue/1/"
)
def test_is_configured(self):
assert self.plugin.is_configured(None, self.project) is False
self.plugin.set_option("repo", "maxbittker/newsdiffs", self.project)
assert self.plugin.is_configured(None, self.project) is True
@responses.activate
def test_create_issue(self):
responses.add(
responses.POST,
"https://api.bitbucket.org/1.0/repositories/maxbittker/newsdiffs/issues",
json={"local_id": 1, "title": "Hello world"},
)
self.plugin.set_option("repo", "maxbittker/newsdiffs", self.project)
group = self.create_group(message="Hello world", culprit="foo.bar")
request = self.request.get("/")
request.user = AnonymousUser()
form_data = {
"title": "Hello",
"description": "Fix this.",
"issue_type": "bug",
"priority": "trivial",
}
with pytest.raises(PluginError):
self.plugin.create_issue(request, group, form_data)
request.user = self.user
self.login_as(self.user)
self.create_usersocialauth(
user=self.user,
provider=self.plugin.auth_provider,
extra_data={
"access_token": (
"oauth_token=123456789abcdefghi&"
"oauth_token_secret="
"123456789123456789abcdefghijklmn"
)
},
)
assert self.plugin.create_issue(request, group, form_data) == 1
request = responses.calls[-1].request
assert request.headers.get("Authorization", b"").startswith(b"OAuth ")
@responses.activate
def test_link_issue(self):
responses.add(
responses.GET,
"https://api.bitbucket.org/1.0/repositories/maxbittker/newsdiffs/issues/1",
json={"local_id": 1, "title": "Hello world"},
)
responses.add(
responses.POST,
"https://api.bitbucket.org/1.0/repositories/maxbittker/newsdiffs/issues/1/comments",
json={"body": "Hello"},
)
self.plugin.set_option("repo", "maxbittker/newsdiffs", self.project)
group = self.create_group(message="Hello world", culprit="foo.bar")
request = self.request.get("/")
request.user = AnonymousUser()
form_data = {"comment": "Hello", "issue_id": "1"}
with pytest.raises(PluginError):
self.plugin.link_issue(request, group, form_data)
request.user = self.user
self.login_as(self.user)
self.create_usersocialauth(
user=self.user,
provider=self.plugin.auth_provider,
extra_data={
"access_token": (
"oauth_token=123456789abcdefghi&oauth_token_secret="
"123456789123456789abcdefghijklmn"
)
},
)
assert self.plugin.link_issue(request, group, form_data) == {"title": "Hello world"}