Commit 87769930 by Chad Crawford Committed by GitHub

Add more robust interactive tests of cache command (#5647)

parent e840a040
from __future__ import annotations
import uuid
from typing import TYPE_CHECKING
import pytest
from cachy import CacheManager
if TYPE_CHECKING:
from pathlib import Path
from _pytest.monkeypatch import MonkeyPatch
from tests.conftest import Config
@pytest.fixture
def repository_cache_dir(monkeypatch: MonkeyPatch, config: Config) -> Path:
return config.repository_cache_directory
@pytest.fixture
def repository_one() -> str:
return f"01_{uuid.uuid4()}"
@pytest.fixture
def repository_two() -> str:
return f"02_{uuid.uuid4()}"
@pytest.fixture
def mock_caches(
repository_cache_dir: Path,
repository_one: str,
repository_two: str,
) -> None:
(repository_cache_dir / repository_one).mkdir(parents=True)
(repository_cache_dir / repository_two).mkdir(parents=True)
@pytest.fixture
def cache(
repository_cache_dir: Path,
repository_one: str,
mock_caches: None,
) -> CacheManager:
cache = CacheManager(
{
"default": repository_one,
"serializer": "json",
"stores": {
repository_one: {
"driver": "file",
"path": str(repository_cache_dir / repository_one),
}
},
}
)
cache.remember_forever("cachy:0.1", lambda: {"name": "cachy", "version": "0.1"})
cache.remember_forever("cleo:0.2", lambda: {"name": "cleo", "version": "0.2"})
return cache
from __future__ import annotations
from typing import TYPE_CHECKING
import pytest
from cleo.testers.application_tester import ApplicationTester
from poetry.console.application import Application
if TYPE_CHECKING:
from pathlib import Path
from cachy import CacheManager
@pytest.fixture
def tester() -> ApplicationTester:
app = Application()
tester = ApplicationTester(app)
return tester
def test_cache_clear_all(
tester: ApplicationTester,
repository_one: str,
repository_cache_dir: Path,
cache: CacheManager,
):
exit_code = tester.execute(f"cache clear {repository_one} --all", inputs="yes")
assert exit_code == 0
assert tester.io.fetch_output() == ""
# ensure directory is empty
assert not any((repository_cache_dir / repository_one).iterdir())
assert not cache.has("cachy:0.1")
assert not cache.has("cleo:0.2")
def test_cache_clear_all_no(
tester: ApplicationTester,
repository_one: str,
repository_cache_dir: Path,
cache: CacheManager,
):
exit_code = tester.execute(f"cache clear {repository_one} --all", inputs="no")
assert exit_code == 0
assert tester.io.fetch_output() == ""
# ensure directory is not empty
assert any((repository_cache_dir / repository_one).iterdir())
assert cache.has("cachy:0.1")
assert cache.has("cleo:0.2")
def test_cache_clear_pkg(
tester: ApplicationTester,
repository_one: str,
cache: CacheManager,
):
exit_code = tester.execute(f"cache clear {repository_one}:cachy:0.1", inputs="yes")
assert exit_code == 0
assert tester.io.fetch_output() == ""
assert not cache.has("cachy:0.1")
assert cache.has("cleo:0.2")
def test_cache_clear_pkg_no(
tester: ApplicationTester,
repository_one: str,
cache: CacheManager,
):
exit_code = tester.execute(f"cache clear {repository_one}:cachy:0.1", inputs="no")
assert exit_code == 0
assert tester.io.fetch_output() == ""
assert cache.has("cachy:0.1")
assert cache.has("cleo:0.2")
from __future__ import annotations
import uuid
from typing import TYPE_CHECKING
import pytest
......@@ -10,37 +8,12 @@ import pytest
if TYPE_CHECKING:
from pathlib import Path
from _pytest.monkeypatch import MonkeyPatch
from cleo.testers.command_tester import CommandTester
from tests.conftest import Config
from tests.types import CommandTesterFactory
@pytest.fixture
def repository_cache_dir(monkeypatch: MonkeyPatch, config: Config) -> Path:
return config.repository_cache_directory
@pytest.fixture
def repository_one() -> str:
return f"01_{uuid.uuid4()}"
@pytest.fixture
def repository_two() -> str:
return f"02_{uuid.uuid4()}"
@pytest.fixture
def mock_caches(
repository_cache_dir: Path, repository_one: str, repository_two: str
) -> None:
(repository_cache_dir / repository_one).mkdir(parents=True)
(repository_cache_dir / repository_two).mkdir(parents=True)
@pytest.fixture
def tester(command_tester_factory: CommandTesterFactory) -> CommandTester:
return command_tester_factory("cache list")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment