Coverage for tests/test_settings.py: 100%
36 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-30 23:02 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-30 23:02 +0000
1"""Tests for `bunches.settings`."""
3from __future__ import annotations
5from typing import TYPE_CHECKING
7import pytest
9from bunches import DictList, Dictionary, Listing, Repository, settings
11if TYPE_CHECKING:
12 from bunches.kinds import SubsetReturns
15def test_defaults() -> None:
16 """Tests the default global values."""
17 assert 'all' in settings._ALL_KEYS
18 assert 'default' in settings._DEFAULT_KEYS
19 assert 'none' in settings._NONE_KEYS
20 assert settings._SUBSET_RETURN == 'class'
21 assert settings._KEY_NAMER('Item') == 'Item'
24def test_set_key_namer() -> None:
25 """Tests `set_key_namer`, including its effect on other classes."""
26 settings.set_key_namer(lambda item: str(item).upper())
27 assert settings._KEY_NAMER('a') == 'A'
28 repository = Repository()
29 repository.add('b')
30 assert repository.keys() == ('B',)
31 assert DictList(['x', 'y']).keys() == ('X', 'Y')
32 assert DictList(['x', 'y'])['Y'] == 'y'
33 with pytest.raises(TypeError):
34 settings.set_key_namer('not callable') # type: ignore[arg-type]
37@pytest.mark.parametrize('returns', ['class', 'copy', 'simple'])
38def test_set_subset_return_options(returns: SubsetReturns) -> None:
39 """Tests that `set_subset_return` accepts each option.
41 Args:
42 returns: option to set.
44 """
45 settings.set_subset_return(returns)
46 assert settings._SUBSET_RETURN == returns
49def test_set_subset_return() -> None:
50 """Tests `set_subset_return`, including its effect on `subset` methods."""
51 settings.set_subset_return('simple')
52 assert Dictionary({'a': 1, 'b': 2}).subset(include = 'a') == {'a': 1}
53 assert Listing([1, 2, 3]).subset(include = [1, 2]) == [1, 2]
54 settings.set_subset_return('copy')
55 assert isinstance(Listing([1]).subset(exclude = 2), Listing)
56 with pytest.raises(ValueError, match = 'returns argument'):
57 settings.set_subset_return('other') # type: ignore[arg-type]
58 assert settings._SUBSET_RETURN == 'copy'
61def test_method_namer_removed() -> None:
62 """Tests that the unused method namer was removed."""
63 assert not hasattr(settings, 'set_method_namer')
64 assert not hasattr(settings, '_METHOD_NAMER')