# Copyright 2023 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Test creation of ~/.config/chromite and dir permissions."""

import os
from pathlib import Path
from typing import Iterator

import pytest

from chromite.lib import chromite_config
from chromite.lib import osutils


@pytest.fixture(name="chromite_config_dir")
def chromite_config_dir_fixture(  # type: ignore[no-untyped-def]
    monkeypatch, tmp_path: Path
) -> Iterator[Path]:
    d = tmp_path / ".config" / "chromite"
    monkeypatch.setattr(chromite_config, "DIR", d)

    for cfg_name, cfg_file in chromite_config.ALL_CONFIGS.items():
        monkeypatch.setattr(chromite_config, cfg_name, d / cfg_file)

    yield d


def test_chromite_config_created(chromite_config_dir: Path) -> None:
    chromite_config.initialize()
    assert os.path.exists(chromite_config_dir)


def test_chromite_config_chowns_to_non_root(chromite_config_dir: Path) -> None:
    osutils.SafeMakedirs(chromite_config_dir, sudo=True, user="root")
    assert chromite_config_dir.owner() == "root"

    chromite_config.initialize()
    assert chromite_config_dir.owner() != "root"
