2014-06-16 17:15:24 +02:00
|
|
|
import unittest
|
|
|
|
|
|
|
|
from osclib.accept_command import AcceptCommand
|
2019-04-21 12:00:26 +02:00
|
|
|
from osclib.select_command import SelectCommand
|
2014-06-16 17:15:24 +02:00
|
|
|
from osclib.comments import CommentAPI
|
2019-12-05 16:47:31 +01:00
|
|
|
from osclib.core import package_list
|
2022-04-05 18:08:34 +02:00
|
|
|
from osc.core import get_request
|
2014-06-16 17:15:24 +02:00
|
|
|
|
2023-03-01 16:57:37 +01:00
|
|
|
from unittest.mock import MagicMock
|
2019-05-04 16:11:51 +02:00
|
|
|
from . import OBSLocal
|
2014-06-23 15:03:16 +02:00
|
|
|
|
2022-03-07 17:10:37 +01:00
|
|
|
# CI-Node: Long2
|
|
|
|
|
2022-02-18 17:15:48 +01:00
|
|
|
|
2014-06-16 17:15:24 +02:00
|
|
|
class TestAccept(unittest.TestCase):
|
|
|
|
|
2022-04-05 18:08:34 +02:00
|
|
|
def setup_wf(self, description=''):
|
2021-08-25 12:13:56 +02:00
|
|
|
wf = OBSLocal.FactoryWorkflow()
|
2019-04-21 12:00:26 +02:00
|
|
|
wf.setup_rings()
|
|
|
|
|
|
|
|
self.c_api = CommentAPI(wf.api.apiurl)
|
|
|
|
|
|
|
|
staging_b = wf.create_staging('B', freeze=True)
|
|
|
|
self.prj = staging_b.name
|
|
|
|
|
2022-04-05 18:08:34 +02:00
|
|
|
self.winerq = wf.create_submit_request('devel:wine', 'wine', text='Hallo World', description=description)
|
2019-04-21 12:00:26 +02:00
|
|
|
self.assertEqual(True, SelectCommand(wf.api, self.prj).perform(['wine']))
|
|
|
|
self.comments = self.c_api.get_comments(project_name=self.prj)
|
2020-01-31 10:23:42 +01:00
|
|
|
wf.create_attribute_type('OSRT', 'ProductVersion', 1)
|
2019-04-21 12:00:26 +02:00
|
|
|
return wf
|
2014-06-16 17:15:24 +02:00
|
|
|
|
|
|
|
def test_accept_comments(self):
|
2019-11-20 08:52:47 +01:00
|
|
|
wf = self.setup_wf()
|
2014-06-16 17:15:24 +02:00
|
|
|
|
2019-11-24 19:21:14 +01:00
|
|
|
self.assertEqual(True, AcceptCommand(wf.api).accept_all(['B']))
|
2014-06-16 17:15:24 +02:00
|
|
|
|
|
|
|
# Comments are cleared up
|
2019-04-21 12:00:26 +02:00
|
|
|
accepted_comments = self.c_api.get_comments(project_name=self.prj)
|
2014-06-16 17:15:24 +02:00
|
|
|
self.assertEqual(len(accepted_comments), 0)
|
|
|
|
|
2022-04-05 18:08:34 +02:00
|
|
|
def test_accept_bugowners(self):
|
|
|
|
wf = self.setup_wf(description="bugowner: group:factory-staging")
|
|
|
|
|
|
|
|
self.assertEqual(True, AcceptCommand(wf.api).accept_all(['B']))
|
|
|
|
# we expect that the requests increase by 1 - to avoid a full search
|
|
|
|
request = get_request(wf.apiurl, str(int(self.winerq.reqid) + 1))
|
|
|
|
# it's in review because this is a staging workflow
|
|
|
|
self.assertEqual(request.state.name, 'review')
|
|
|
|
exp = '<action type="set_bugowner">\n <target project="openSUSE:Factory" ' + \
|
|
|
|
'package="wine" />\n <group name="factory-staging" />\n</action>'
|
|
|
|
self.assertEqual(request.actions[0].to_str(), exp)
|
|
|
|
|
2019-04-21 12:00:26 +02:00
|
|
|
def test_accept_final_comment(self):
|
2019-11-20 08:52:47 +01:00
|
|
|
wf = self.setup_wf()
|
2019-04-21 12:00:26 +02:00
|
|
|
|
|
|
|
# snipe out cleanup to see the comments before the final countdown
|
|
|
|
wf.api.staging_deactivate = MagicMock(return_value=True)
|
|
|
|
|
2019-11-24 19:21:14 +01:00
|
|
|
self.assertEqual(True, AcceptCommand(wf.api).accept_all(['B']))
|
2019-04-21 12:00:26 +02:00
|
|
|
|
|
|
|
comments = self.c_api.get_comments(project_name=self.prj)
|
|
|
|
self.assertGreater(len(comments), len(self.comments))
|
|
|
|
|
|
|
|
# check which id was added
|
|
|
|
new_id = (set(comments.keys()) - set(self.comments.keys())).pop()
|
|
|
|
comment = comments[new_id]['comment']
|
2022-02-18 17:44:32 +01:00
|
|
|
ncomment = 'Project "{}" accepted. '.format(self.prj)
|
|
|
|
ncomment += "The following packages have been submitted to openSUSE:Factory: wine."
|
|
|
|
self.assertEqual(ncomment, comment)
|
2019-12-05 16:47:31 +01:00
|
|
|
|
|
|
|
def test_accept_new_multibuild_package(self):
|
|
|
|
wf = self.setup_wf()
|
|
|
|
|
|
|
|
staging = wf.create_staging('A', freeze=True)
|
|
|
|
|
|
|
|
project = wf.create_project('devel:gcc')
|
|
|
|
package = OBSLocal.Package(name='gcc9', project=project)
|
|
|
|
package.create_commit(filename='gcc9.spec')
|
|
|
|
package.create_commit(filename='gcc9-tests.spec')
|
|
|
|
package.create_commit('<multibuild><flavor>gcc9-tests.spec</flavor></multibuild>', filename='_multibuild')
|
|
|
|
wf.submit_package(package)
|
|
|
|
|
2022-02-18 17:01:38 +01:00
|
|
|
SelectCommand(wf.api, staging.name).perform(['gcc9'])
|
2019-12-05 16:47:31 +01:00
|
|
|
ac = AcceptCommand(wf.api)
|
|
|
|
self.assertEqual(True, ac.accept_all(['A'], True))
|
|
|
|
|
|
|
|
# no stale links
|
|
|
|
self.assertEqual([], package_list(wf.apiurl, staging.name))
|
|
|
|
self.assertEqual(['gcc9', 'wine'], package_list(wf.apiurl, wf.project))
|
|
|
|
|
|
|
|
def test_accept_new_multispec_package(self):
|
|
|
|
wf = self.setup_wf()
|
|
|
|
|
|
|
|
staging = wf.create_staging('A', freeze=True)
|
|
|
|
|
|
|
|
project = wf.create_project('devel:gcc')
|
|
|
|
package = OBSLocal.Package(name='gcc9', project=project)
|
|
|
|
package.create_commit(filename='gcc9.spec')
|
|
|
|
package.create_commit(filename='gcc9-tests.spec')
|
|
|
|
wf.submit_package(package)
|
|
|
|
|
2022-02-18 17:01:38 +01:00
|
|
|
SelectCommand(wf.api, staging.name).perform(['gcc9'])
|
2019-12-05 16:47:31 +01:00
|
|
|
ac = AcceptCommand(wf.api)
|
|
|
|
self.assertEqual(True, ac.accept_all(['A'], True))
|
|
|
|
|
|
|
|
# no stale links
|
|
|
|
self.assertEqual([], package_list(wf.apiurl, staging.name))
|
|
|
|
self.assertEqual(['gcc9', 'gcc9-tests', 'wine'], package_list(wf.apiurl, wf.project))
|
|
|
|
|
|
|
|
def test_accept_switch_to_multibuild_package(self):
|
|
|
|
wf = self.setup_wf()
|
|
|
|
|
|
|
|
staging = wf.create_staging('A', freeze=True)
|
|
|
|
|
|
|
|
tpackage = wf.create_package('target', 'gcc9')
|
|
|
|
tpackage.create_commit(filename='gcc9.spec')
|
|
|
|
tpackage.create_commit(filename='gcc9-tests.spec')
|
|
|
|
lpackage = wf.create_package('target', 'gcc9-tests')
|
|
|
|
lpackage.create_commit('<link package="gcc9" cicount="copy" />', filename='_link')
|
|
|
|
|
|
|
|
project = wf.create_project('devel:gcc')
|
|
|
|
package = OBSLocal.Package(name='gcc9', project=project)
|
|
|
|
package.create_commit(filename='gcc9.spec')
|
|
|
|
package.create_commit(filename='gcc9-tests.spec')
|
|
|
|
package.create_commit('<multibuild><flavor>gcc9-tests.spec</flavor></multibuild>', filename='_multibuild')
|
|
|
|
|
|
|
|
wf.submit_package(package)
|
|
|
|
|
2022-02-18 17:01:38 +01:00
|
|
|
SelectCommand(wf.api, staging.name).perform(['gcc9'])
|
2019-12-05 16:47:31 +01:00
|
|
|
ac = AcceptCommand(wf.api)
|
|
|
|
self.assertEqual(True, ac.accept_all(['A'], True))
|
|
|
|
|
|
|
|
# no stale links
|
|
|
|
self.assertEqual([], package_list(wf.apiurl, staging.name))
|
|
|
|
self.assertEqual(['gcc9', 'wine'], package_list(wf.apiurl, wf.project))
|