pypa-hatch/tests/cli/config/test_set.py

250 lines
6.4 KiB
Python

def test_standard(hatch, config_file, helpers):
result = hatch('config', 'set', 'project', 'foo')
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
"""
New setting:
project = "foo"
"""
)
config_file.load()
assert config_file.model.project == 'foo'
def test_standard_deep(hatch, config_file, helpers):
result = hatch('config', 'set', 'template.name', 'foo')
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
"""
New setting:
[template]
name = "foo"
"""
)
config_file.load()
assert config_file.model.template.name == 'foo'
def test_standard_complex_sequence(hatch, config_file, helpers):
result = hatch('config', 'set', 'dirs.project', "['/foo', '/bar']")
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
"""
New setting:
[dirs]
project = ["/foo", "/bar"]
"""
)
config_file.load()
assert config_file.model.dirs.project == ['/foo', '/bar']
def test_standard_complex_map(hatch, config_file, helpers):
result = hatch('config', 'set', 'projects', "{'a': '/foo', 'b': '/bar'}")
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
"""
New setting:
[projects]
a = "/foo"
b = "/bar"
"""
)
config_file.load()
assert config_file.model.projects['a'].location == '/foo'
assert config_file.model.projects['b'].location == '/bar'
def test_standard_hidden(hatch, config_file, helpers):
result = hatch('config', 'set', 'publish.index.auth', 'foo')
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
"""
New setting:
[publish.index]
auth = "<...>"
"""
)
config_file.load()
assert config_file.model.publish['index']['auth'] == 'foo'
def test_prompt(hatch, config_file, helpers):
result = hatch('config', 'set', 'project', input='foo')
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
"""
Value for `project`: foo
New setting:
project = "foo"
"""
)
config_file.load()
assert config_file.model.project == 'foo'
def test_prompt_hidden(hatch, config_file, helpers):
result = hatch('config', 'set', 'publish.index.auth', input='foo')
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
f"""
Value for `publish.index.auth`:{' '}
New setting:
[publish.index]
auth = "<...>"
"""
)
config_file.load()
assert config_file.model.publish['index']['auth'] == 'foo'
def test_prevent_invalid_config(hatch, config_file, helpers):
original_mode = config_file.model.mode
result = hatch('config', 'set', 'mode', 'foo')
assert result.exit_code == 1
assert result.output == helpers.dedent(
"""
Error parsing config:
mode
must be one of: aware, local, project
"""
)
config_file.load()
assert config_file.model.mode == original_mode
def test_resolve_project_location_basic(hatch, config_file, helpers, temp_dir):
config_file.model.project = 'foo'
config_file.save()
with temp_dir.as_cwd():
result = hatch('config', 'set', 'projects.foo', '.')
path = str(temp_dir).replace('\\', '\\\\')
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
f"""
New setting:
[projects]
foo = "{path}"
"""
)
config_file.load()
assert config_file.model.projects['foo'].location == str(temp_dir)
def test_resolve_project_location_complex(hatch, config_file, helpers, temp_dir):
config_file.model.project = 'foo'
config_file.save()
with temp_dir.as_cwd():
result = hatch('config', 'set', 'projects.foo.location', '.')
path = str(temp_dir).replace('\\', '\\\\')
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
f"""
New setting:
[projects.foo]
location = "{path}"
"""
)
config_file.load()
assert config_file.model.projects['foo'].location == str(temp_dir)
def test_project_location_basic_set_first_project(hatch, config_file, helpers, temp_dir):
with temp_dir.as_cwd():
result = hatch('config', 'set', 'projects.foo', '.')
path = str(temp_dir).replace('\\', '\\\\')
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
f"""
New setting:
project = "foo"
[projects]
foo = "{path}"
"""
)
config_file.load()
assert config_file.model.project == 'foo'
assert config_file.model.projects['foo'].location == str(temp_dir)
def test_project_location_complex_set_first_project(hatch, config_file, helpers, temp_dir):
with temp_dir.as_cwd():
result = hatch('config', 'set', 'projects.foo.location', '.')
path = str(temp_dir).replace('\\', '\\\\')
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
f"""
New setting:
project = "foo"
[projects.foo]
location = "{path}"
"""
)
config_file.load()
assert config_file.model.project == 'foo'
assert config_file.model.projects['foo'].location == str(temp_dir)
def test_booleans(hatch, config_file, helpers, temp_dir):
assert config_file.model.template.licenses.headers is True
with temp_dir.as_cwd():
result = hatch('config', 'set', 'template.licenses.headers', 'false')
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
"""
New setting:
[template.licenses]
headers = false
"""
)
config_file.load()
assert config_file.model.template.licenses.headers is False
with temp_dir.as_cwd():
result = hatch('config', 'set', 'template.licenses.headers', 'TruE')
assert result.exit_code == 0, result.output
assert result.output == helpers.dedent(
"""
New setting:
[template.licenses]
headers = true
"""
)
config_file.load()
assert config_file.model.template.licenses.headers is True