def test_catchall_versions_are_ignored_for_nonpreferred_resources(): resource = Resource( group='group1', version='version1', preferred=False, plural='plural1', singular='singular1', kind='kind1', shortcuts=['shortcut1', 'shortcut2'], categories=['category1', 'category2'], ) selector = Selector(EVERYTHING) matches = selector.check(resource) assert not matches
def test_two_args_with_group_and_conventional_version(version, group, name): selector = Selector(f'{group}/{version}', name) assert selector.group == group assert selector.version == version assert selector.kind is None assert selector.plural is None assert selector.singular is None assert selector.shortcut is None assert selector.category is None assert selector.any_name == name
def test_kwarg_version(): selector = Selector(version='version1', any_name='whatever') assert selector.group is None assert selector.version == 'version1' assert selector.kind is None assert selector.plural is None assert selector.singular is None assert selector.shortcut is None assert selector.category is None assert selector.any_name == 'whatever'
def test_two_args_and_corev1(name): selector = Selector('v1', name) assert selector.group == '' assert selector.version == 'v1' assert selector.kind is None assert selector.plural is None assert selector.singular is None assert selector.shortcut is None assert selector.category is None assert selector.any_name == name
def test_one_arg_with_group_and_conventional_version(version, group): selector = Selector(f'name1.{version}.{group}') assert selector.group == group assert selector.version == version assert selector.kind is None assert selector.plural is None assert selector.singular is None assert selector.shortcut is None assert selector.category is None assert selector.any_name == 'name1'
def test_two_args_with_only_group(group, name): selector = Selector(f'{group}', name) assert selector.group == group assert selector.version is None assert selector.kind is None assert selector.plural is None assert selector.singular is None assert selector.shortcut is None assert selector.category is None assert selector.any_name == name
def test_one_arg_with_group(group): selector = Selector(f'name1.{group}') assert selector.group == group assert selector.version is None assert selector.kind is None assert selector.plural is None assert selector.singular is None assert selector.shortcut is None assert selector.category is None assert selector.any_name == 'name1'
def test_three_args(group, version, name): selector = Selector(group, version, name) assert selector.group == group assert selector.version == version assert selector.kind is None assert selector.plural is None assert selector.singular is None assert selector.shortcut is None assert selector.category is None assert selector.any_name == name
def test_one_arg_with_only_name(name): selector = Selector(name) assert selector.group is None assert selector.version is None assert selector.kind is None assert selector.plural is None assert selector.singular is None assert selector.shortcut is None assert selector.category is None assert selector.any_name == name
def test_kwarg_any_name(): selector = Selector(any_name='name1') assert selector.group is None assert selector.version is None assert selector.kind is None assert selector.plural is None assert selector.singular is None assert selector.shortcut is None assert selector.category is None assert selector.any_name == 'name1'
def test_resources(): resource1 = Resource('group1', 'version1', 'plural1') resource2 = Resource('group2', 'version2', 'plural2') selector1 = Selector('group1', 'version1', 'plural1') selector2 = Selector('group2', 'version2', 'plural2') handler1 = Mock(selector=selector1) handler2 = Mock(selector=selector2) registry = OperatorRegistry() registry.resource_watching_handlers.append(handler1) registry.resource_changing_handlers.append(handler2) registry.resource_watching_handlers.append(handler2) registry.resource_changing_handlers.append(handler1) resources = registry.resources assert isinstance(resources, collections.abc.Collection) assert len(resources) == 2 assert resource1 in resources assert resource2 in resources
def test_empty_names_are_prohibited_with_kwargs(kwarg): with pytest.raises(TypeError) as err: Selector(**{kwarg: ''}) assert "Names must not be empty strings" in str(err.value)
def test_conflicting_name_with_positional_name(kwarg): with pytest.raises(TypeError) as err: Selector('name1', **{kwarg: 'name2'}) assert "Ambiguous resource specification with names" in str(err.value)
def test_conflicting_names_with_only_kwargs(kwargs): with pytest.raises(TypeError) as err: Selector(**kwargs) assert "Ambiguous resource specification with names" in str(err.value)
def test_no_name_but_version(): with pytest.raises(TypeError) as err: Selector(version='version1') assert "Unspecific resource with no names" in str(err.value)
def test_when_groupversion_mismatch_but_names_do_match(resource, kwarg, kwval, group, version): selector = Selector(group=group, version=version, **{kwarg: kwval}) matches = selector.check(resource) assert not matches
def test_no_args(): with pytest.raises(TypeError) as err: Selector() assert "Unspecific resource with no names" in str(err.value)
def test_no_name_but_group(): with pytest.raises(TypeError) as err: Selector(group='group1') assert "Unspecific resource with no names" in str(err.value)
def test_different_resource(): selector = Selector('group1', 'version1', 'plural1') resource = Resource('group2', 'version2', 'plural2') handler = Mock(selector=selector) matches = _matches_resource(handler, resource) assert not matches
def test_equivalent_resources(): selector = Selector('group1', 'version1', 'plural1') resource = Resource('group1', 'version1', 'plural1') handler = Mock(selector=selector) matches = _matches_resource(handler, resource) assert matches
def test_empty_names_are_prohibited_with_positionals(): with pytest.raises(TypeError) as err: Selector('') assert "Names must not be empty strings" in str(err.value)
def test_when_matches_everything(resource, group, version): selector = Selector(EVERYTHING, group=group, version=version) matches = selector.check(resource) assert matches
def test_selection_of_nonspecific_resources(resource, kwarg, kwval): selector = Selector(**{kwarg: kwval}) selected = selector.select([resource]) assert not selector.is_specific # prerequisite assert selected == {resource}
def test_when_matches_names(resource, kwarg, kwval, group, version): selector = Selector(group=group, version=version, **{kwarg: kwval}) matches = selector.check(resource) assert matches
def test_events_are_matched_when_explicitly_named(selector_args): resource = Resource('', 'v1', 'events') selector = Selector(*selector_args) matches = selector.check(resource) assert matches
def test_precedence_of_corev1_same_as_others_when_nonspecific( resource, v1_resource, kwarg, kwval): selector = Selector(**{kwarg: kwval}) selected = selector.select([resource, v1_resource]) assert not selector.is_specific # prerequisite assert selected == {resource, v1_resource}
def test_too_many_args(): with pytest.raises(TypeError) as err: Selector('group1', 'version1', 'name1', 'etc') assert "Too many positional arguments" in str(err.value)
def test_events_are_excluded_from_everything(resource_kwargs, selector_args): resource = Resource(**resource_kwargs, plural='events') selector = Selector(*selector_args) matches = selector.check(resource) assert not matches
def selector(resource): """ The selector used in the tests. Usually mocked, so it does not matter. """ return Selector(group=resource.group, version=resource.version, plural=resource.plural)
def test_repr_with_names(kw): selector = Selector(**{kw: 'name1'}) selector_repr = repr(selector) assert selector_repr == f"Selector({kw}='name1')"