def test_is_obsolete(): examinee = create_upgrade_pr( from_ref=cm.ComponentReference( name='c1', componentName='c1', version='1.2.3', ), to_ref=cm.ComponentReference( name='c1', componentName='c1', version='2.0.0', ), ) cref = cm.ComponentReference( name='c1', componentName='c1', version='6.0.0', ) reference_component = cm.Component(name='c1', version='6.6.6', repositoryContexts=(), provider=None, sources=(), resources=(), componentReferences=()) # test with reference component not declaring this dependency assert not examinee.is_obsolete(reference_component=reference_component) # add differently-named dependency with greater version reference_component.componentReferences = (dataclasses.replace( cref, name='other-name'), ) assert not examinee.is_obsolete(reference_component=reference_component) # add same-named web dependency with lesser version reference_component.componentReferences = (dataclasses.replace( cref, version='0.0.1'), ) assert not examinee.is_obsolete(reference_component=reference_component) # add same-named resource of greater version but different type # todo: we should actually also test dependencies towards resources of two different types reference_component.resources = (cm.Resource( name='c1', version='6.0.0', type=cm.ResourceType.GENERIC, access=None, ), ) assert not examinee.is_obsolete(reference_component=reference_component) # finally, add greater dependency of matching type and name reference_component.componentReferences = (dataclasses.replace( cref, version='9.9.9'), ) assert examinee.is_obsolete(reference_component=reference_component)
def test_ctor(): # upgrade component create_upgrade_pr( from_ref=cm.ComponentReference(name='abcd', componentName='a.b/c1', version='1.2.3'), to_ref=cm.ComponentReference(name='abcd', componentName='a.b/c1', version='2.0.0'), ) # upgrade web dependency create_upgrade_pr( from_ref=cm.Resource( name='dep_red', version='1.2.3', type=cm.ResourceType.GENERIC, access=None, ), to_ref=cm.Resource( name='dep_red', version='2.0.0', type=cm.ResourceType.GENERIC, access=None, ), ) # error: mismatch in dependency name with pytest.raises(ValueError, match='reference name mismatch'): create_upgrade_pr( from_ref=cm.ComponentReference(name='foo', componentName='a.b/c1', version='1.2.3'), to_ref=cm.ComponentReference(name='bar', componentName='a.b/c1', version='2.0.0'), ) # error: mismatch in dependency types with pytest.raises(ValueError, match='reference types do not match'): create_upgrade_pr( from_ref=cm.ComponentReference(name='dep_red', componentName='a.b/c1', version='1.2.3'), to_ref=cm.Resource( name='dep_red', version='2.0.0', type=cm.ResourceType.GENERIC, access=None, ), )
def cref(component: cm.Component): return cm.ComponentReference( name='dont-care', componentName=component.name, version=component.version, extraIdentity={}, )
def _raw_component_dep_to_v2(raw: dict): name = raw['name'] return cm.ComponentReference( componentName=name, name=name, version=raw['version'], )
def _raw_component_dep_to_v2(raw: dict): name = raw['name'] return cm.ComponentReference( componentName=name, name=product.v2.mangle_name(name), version=raw['version'], )
def _raw_component_dep_to_v2(raw: dict): name = raw['name'] args = { 'componentName': name, 'name': product.v2.mangle_name(name), 'version': raw['version'], } if 'labels' in raw: args['labels'] = raw['labels'] return cm.ComponentReference(**args)
def _pr_to_upgrade_pull_request(self, pull_request): ci.util.not_none(pull_request) match = self.PR_TITLE_PATTERN.fullmatch(pull_request.title) if match is None: raise ValueError( "PR-title '{t}' did not match title-schema".format( t=pull_request.title)) reference_type_name = match.group(1) if not reference_type_name: # backwards compatibility hack reference_type_name = 'component' if not reference_type_name == 'component': raise NotImplementedError( reference_type_name) # todo: support all resources ref_name = match.group(2) from_version = match.group(3) to_version = match.group(4) from_ref = cm.ComponentReference( name=ref_name, componentName=ref_name, version=from_version, ) to_ref = cm.ComponentReference( name=ref_name, componentName=ref_name, version=to_version, ) return UpgradePullRequest( pull_request=pull_request, from_ref=from_ref, to_ref=to_ref, )