Coverage for tests / unit / config / test_config_cwd_cache.py: 100%

34 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-04-03 18:53 +0000

1"""Tests for cwd-aware pyproject.toml caching (#734).""" 

2 

3from __future__ import annotations 

4 

5from pathlib import Path 

6 

7import pytest 

8from assertpy import assert_that 

9 

10from lintro.utils.config import clear_pyproject_cache, load_pyproject 

11 

12 

13def test_load_pyproject_returns_different_data_per_cwd( 

14 tmp_path: Path, 

15 monkeypatch: pytest.MonkeyPatch, 

16) -> None: 

17 """load_pyproject returns different data after chdir to a new project. 

18 

19 Args: 

20 tmp_path: Temporary directory for two project roots. 

21 monkeypatch: Pytest monkeypatch for chdir. 

22 """ 

23 clear_pyproject_cache() 

24 

25 # Project A 

26 dir_a = tmp_path / "project_a" 

27 dir_a.mkdir() 

28 (dir_a / "pyproject.toml").write_text( 

29 '[project]\nname = "alpha"\n', 

30 ) 

31 

32 # Project B 

33 dir_b = tmp_path / "project_b" 

34 dir_b.mkdir() 

35 (dir_b / "pyproject.toml").write_text( 

36 '[project]\nname = "beta"\n', 

37 ) 

38 

39 monkeypatch.chdir(dir_a) 

40 data_a = load_pyproject() 

41 assert_that(data_a["project"]["name"]).is_equal_to("alpha") 

42 

43 # Switching cwd should pick up the other pyproject 

44 clear_pyproject_cache() 

45 monkeypatch.chdir(dir_b) 

46 data_b = load_pyproject() 

47 assert_that(data_b["project"]["name"]).is_equal_to("beta") 

48 

49 

50def test_load_pyproject_cwd_aware_without_cache_clear( 

51 tmp_path: Path, 

52 monkeypatch: pytest.MonkeyPatch, 

53) -> None: 

54 """load_pyproject returns correct data per cwd without explicit cache clear. 

55 

56 Args: 

57 tmp_path: Temporary directory for two project roots. 

58 monkeypatch: Pytest monkeypatch for chdir. 

59 """ 

60 clear_pyproject_cache() 

61 

62 dir_a = tmp_path / "project_a" 

63 dir_a.mkdir() 

64 (dir_a / "pyproject.toml").write_text('[project]\nname = "alpha"\n') 

65 

66 dir_b = tmp_path / "project_b" 

67 dir_b.mkdir() 

68 (dir_b / "pyproject.toml").write_text('[project]\nname = "beta"\n') 

69 

70 monkeypatch.chdir(dir_a) 

71 assert_that(load_pyproject()["project"]["name"]).is_equal_to("alpha") 

72 

73 # No cache clear — cwd change alone should return different data 

74 monkeypatch.chdir(dir_b) 

75 assert_that(load_pyproject()["project"]["name"]).is_equal_to("beta") 

76 

77 # Return to dir_a — should still get alpha from cache 

78 monkeypatch.chdir(dir_a) 

79 assert_that(load_pyproject()["project"]["name"]).is_equal_to("alpha")