Provide a gitconfig sandbox for testing
Install pytest-gitconfig:
# pip
pip install pytest-gitconfig
# pipenv
pipenv install pytest-gitconfig
# PDM
pdm add pytest-gitconfigThen the default_gitconfig session fixture will be automatically loaded for the session
providing isolation from gloval user defined values.
If you want to customize or depend on it
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from pytest_gitconfig import GitConfig
@pytest.fixture
def default_git_user_name() -> str:
return "John Doe"
@pytest.fixture(scope="session", autouse=True)
def fixture_depending_on_default_gitconfig(default_gitconfig: GitConfig) -> Whatever:
# You can set values, the following statements are equivalents
default_gitconfig.set({"some": {key: value}}) # nested dicts form
default_gitconfig.set({"some.key": value}) # dict with dotted keys form
# Or read them
data = default_gitconfig.get("some.key")
data = default_gitconfig.get("some.key", "fallback")
# If you need the path to the gitconfig file
assert str(default_gitconfig) == str(default_gitconfig.path)
return whateverNote that the default_gitconfig fixture being session-scoped (avoiding the performance hit of creating a gitconfig file for each test),
set values are persistent for the whole session and should be defined once preferably in your conftest.py.
But if you need to temporarily override some value, you can use the override() context manager which is accepting the same parameters as set().
This allows to override it directly during a test:
from __future__ import annotations
from typing import TYPE_CHECKING, Iterator
if TYPE_CHECKING:
from pytest_gitconfig import GitConfig
def test_something(default_gitconfig):
with gitconfig.override({"other.key": value}):
# Do something depending on those overridden valuesBut to test some value in some specific tests, its best to rely on gitconfig which is providing a function-scoped GitConfig:
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from pytest_gitconfig import GitConfig
def test_something(gitconfig: GitConfig):
gitconfig.set({"other.key": value}) # Only valid for this test
# Do something depending on those overridden valuesA classical setup being:
- default to using the session-scoped
default_gitconfigto ensure isolation. - some specific test cases relying on some specific settings set on the
gitconfigfunction-scoped fixture
This has the following benefits:
- session isolation is done only once
- test having specific settings does not impact other tests
- test having specific settings can be run in parallel
This is the main fixture which is creating a new and clean git config file for the tested function.
It inherit from default_gitconfig (meaning that all values set on default_gitconfig will be set on gitconfig)
It works by monkeypatching the GIT_CONFIG_GLOBAL environment variable.
So, if you rely on this in a context where os.environ is ignored, you should patch it yourself using this fixture.
Provide the initial user.name setting for gitconfig.
If None, user.name will inherit its value from default_config,
so most probably from default_git_user_name if not overridden.
Provide the initial user.email setting for gitconfig.
If None, user.email will inherit its value from default_config,
so most probably from default_git_user_email if not overridden.
Provide the initial init.defaultBranch setting for gitconfig.
If None, init.defaultBranch will inherit its value from default_config,
so most probably default_git_init_default_branch if not overridden.
This is the main fixture which is creating a new and clean git config file for the test session.
It is loaded automatically if you have pytest-gitconfig installed.
By default, it will set 3 settings:
user.nameuser.emailinit.defaultBranch
It works by monkeypatching the GIT_CONFIG_GLOBAL environment variable.
So, if you rely on this in a context where os.environ is ignored, you should patch it yourself using this fixture.
Provide the initial user.name setting. By default pytest_gitconfig.DEFAULT_GIT_USER_NAME.
Override to provide a different initial value.
Provide the initial user.email setting. By default pytest_gitconfig.DEFAULT_GIT_USER_EMAIL.
Override to provide a different initial value.
Provide the initial init.defaultBranch setting. By default pytest_gitconfig.DEFAULT_GIT_BRANCH (main).
Override to provide a different initial value.
A pytest.MonkeyPatch session instance.
An object materializing a given gitconfig file.
Write some gitconfig values.
It accepts a dict of parsed data sections as dict or dotted-key-values.
Get a setting given its dotted key. Get a 2nd default value. Raise KeyError if config does not exists and default is not provided
A context manager setting the values and restoring them on exit.
Accept the same format a the set() method.