Add a test case for check_bugowner

This commit is contained in:
Stephan Kulow 2022-03-10 11:37:15 +01:00
parent a80184d44e
commit db41ef3536
3 changed files with 93 additions and 8 deletions

View File

@ -41,11 +41,11 @@ class CheckerBugowner(ReviewBot.ReviewBot):
if matched_package and matched_package != target_package:
continue
if not self.valid_maintainer(matched_maintainer):
self.review_messages['declined'] += f"\n{matched_maintainer} could not be found on this instance."
self.review_messages['declined'] = f"\n{matched_maintainer} could not be found on this instance."
return False
return True
self.review_messages['declined'] += f"\n{target_package } appears to be a new package and " + \
"no 'bugowner' line could be found in the request description."
"no matching 'bugowner:' line could be found in the request description."
return False
def existing_url(self, url):

View File

@ -525,7 +525,7 @@ class StagingWorkflow(ABC):
project_links=project_links)
return self.projects[name]
def submit_package(self, package, project=None):
def submit_package(self, package, project=None, request_description=""):
"""Creates submit request from package to target project.
Both have to exist (Use :func:`create_submit_request` otherwise).
@ -534,12 +534,14 @@ class StagingWorkflow(ABC):
:type package: Package
:param project: project where to send submit request, None means use the default.
:type project: Project or str or None
:param request_description what the request description should be
:type request_description str or None
:return: created request.
:rtype: Request
"""
if not project:
project = self.project
request = Request(source_package=package, target_project=project)
request = Request(source_package=package, target_project=project, description=request_description)
self.requests.append(request)
return request
@ -550,7 +552,7 @@ class StagingWorkflow(ABC):
self.requests.append(request)
return request
def create_submit_request(self, project, package, text=None, add_commit=True):
def create_submit_request(self, project, package, text=None, add_commit=True, description=""):
"""Creates submit request from package in specified project to default project.
It creates project if not exist and also package.
@ -573,7 +575,7 @@ class StagingWorkflow(ABC):
package = Package(name=package, project=project)
if add_commit:
package.create_commit(text=text)
return self.submit_package(package)
return self.submit_package(package, request_description=description)
def __del__(self):
if not self.api:
@ -1049,7 +1051,7 @@ class Request(object):
.. _osc.core: https://github.com/openSUSE/osc/blob/master/osc/core.py
"""
def __init__(self, source_package=None, target_project=None, target_package=None, type='submit'):
def __init__(self, source_package=None, target_project=None, target_package=None, type='submit', description=""):
"""Creates a request in the OBS instance and instantiates an object to represent it"""
self.revoked = True
@ -1058,7 +1060,8 @@ class Request(object):
src_project=source_package.project.name,
src_package=source_package.name,
dst_project=target_project,
dst_package=target_package)
dst_package=target_package,
message=description)
print('created submit request {}/{} -> {}'.format(
source_package.project.name, source_package.name, target_project))
elif type == 'delete':

View File

@ -0,0 +1,82 @@
import logging
from . import OBSLocal
from check_bugowner import CheckerBugowner
import pytest
PROJECT = "SLE:Next-SP"
@pytest.fixture
def default_config(request):
wf = OBSLocal.FactoryWorkflow(PROJECT)
project = wf.projects[PROJECT]
request.cls.bot_user = 'factory-auto'
wf.create_user(request.cls.bot_user)
# When creating a review, set the by_user to bot_user
project.add_reviewers(users=[request.cls.bot_user])
request.cls.wf = wf
request.cls.review_bot = CheckerBugowner(request.cls.wf.apiurl, user=request.cls.bot_user, logger=logging.getLogger())
yield "workflow"
del request.cls.wf
class TestCheckBugowner(OBSLocal.TestCase):
@pytest.mark.usefixtures("default_config")
def test_no_bugowner(self):
"""Declines the request for a new package"""
req_id = self.wf.create_submit_request('devel:wine', 'merlot').reqid
self.assertReview(req_id, by_user=(self.bot_user, 'new'))
self.review_bot.set_request_ids([req_id])
self.review_bot.check_requests()
review = self.assertReview(req_id, by_user=(self.bot_user, 'declined'))
self.assertIn('merlot appears to be a new package', review.comment)
@pytest.mark.usefixtures("default_config")
def test_existing_package(self):
"""Accepts requests for existing packages"""
self.wf.create_package(PROJECT, 'merlot')
req_id = self.wf.create_submit_request('devel:wine', 'merlot').reqid
self.assertReview(req_id, by_user=(self.bot_user, 'new'))
self.review_bot.set_request_ids([req_id])
self.review_bot.check_requests()
review = self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))
self.assertEqual('ok', review.comment)
@pytest.mark.usefixtures("default_config")
def test_invalid_bugowner(self):
"""Declines the request for a new package because of wrong maintainer"""
req_id = self.wf.create_submit_request('devel:wine', 'merlot', description="bugowner: thatguythere").reqid
self.assertReview(req_id, by_user=(self.bot_user, 'new'))
self.review_bot.set_request_ids([req_id])
self.review_bot.check_requests()
review = self.assertReview(req_id, by_user=(self.bot_user, 'declined'))
self.assertIn('thatguythere could not be found on this instance.', review.comment)
@pytest.mark.usefixtures("default_config")
def test_valid_bugowner(self):
"""Accept request with valid maintainer"""
self.wf.create_user('thegirl')
req_id = self.wf.create_submit_request('devel:wine', 'merlot', description="bugowner: thegirl").reqid
self.assertReview(req_id, by_user=(self.bot_user, 'new'))
self.review_bot.set_request_ids([req_id])
self.review_bot.check_requests()
self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))