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

1"""Tests for `bunches.settings`.""" 

2 

3from __future__ import annotations 

4 

5from typing import TYPE_CHECKING 

6 

7import pytest 

8 

9from bunches import DictList, Dictionary, Listing, Repository, settings 

10 

11if TYPE_CHECKING: 

12 from bunches.kinds import SubsetReturns 

13 

14 

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' 

22 

23 

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] 

35 

36 

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. 

40 

41 Args: 

42 returns: option to set. 

43 

44 """ 

45 settings.set_subset_return(returns) 

46 assert settings._SUBSET_RETURN == returns 

47 

48 

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' 

59 

60 

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')