diff --git a/dzgui/api/steam.py b/dzgui/api/steam.py index cc9e99d..dc64529 100644 --- a/dzgui/api/steam.py +++ b/dzgui/api/steam.py @@ -10,7 +10,6 @@ from shlex import shlex from pathlib import Path from dzgui.init.prereqs import has_steam_client -from dzgui.api.mods import _hash from dzgui.const.constants import ( APPID_DAYZ, APP_NAME, @@ -58,6 +57,9 @@ def get_steam_paths() -> list[tuple[Path, str]]: def concat_mods(mods: list[str]) -> str: + # TODO: circular import workaround + from dzgui.api.mods import _hash + hashes = [] for mod in mods: md5sum = _hash(mod) diff --git a/dzgui/config/convert.py b/dzgui/config/convert.py index 8061adb..26fabf2 100644 --- a/dzgui/config/convert.py +++ b/dzgui/config/convert.py @@ -3,6 +3,8 @@ import shlex from pathlib import Path from typing import Any +from dzgui.const.boilerplate import config_boilerplate + """ Convert legacy dztuirc to config.json @@ -89,4 +91,8 @@ def rc2json(file: Path) -> str: keys["ip_list"] = ips keys["use_miles"] = False keys["start_tab"] = 0 + # NOTE: workaround for DZGUI 6 logic (see #375) + for key in config_boilerplate.keys(): + if key not in keys: + keys[key] = config_boilerplate[key] return json.dumps(keys, indent=2) diff --git a/pyproject.toml b/pyproject.toml index 3f66822..374fec6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -107,6 +107,7 @@ config-settings-package = { pygobject-stubs = { config = "Gtk3,Gdk3,Soup2" } } [tool.pytest.ini_options] markers = [ "config: config file keys/values", + "mods: tests mod metadata/link creation", "pefile: validate PE files", "post_install: requires a completed installation", "slow: long-running tests", diff --git a/tests/fixtures/cpp/meta1.cpp b/tests/fixtures/cpp/mod1/meta.cpp similarity index 100% rename from tests/fixtures/cpp/meta1.cpp rename to tests/fixtures/cpp/mod1/meta.cpp diff --git a/tests/fixtures/cpp/meta2.cpp b/tests/fixtures/cpp/mod2/meta.cpp similarity index 100% rename from tests/fixtures/cpp/meta2.cpp rename to tests/fixtures/cpp/mod2/meta.cpp diff --git a/tests/fixtures/cpp/meta3.cpp b/tests/fixtures/cpp/mod3/meta.cpp similarity index 100% rename from tests/fixtures/cpp/meta3.cpp rename to tests/fixtures/cpp/mod3/meta.cpp diff --git a/tests/fixtures/cpp/meta4.cpp b/tests/fixtures/cpp/mod4/meta.cpp similarity index 100% rename from tests/fixtures/cpp/meta4.cpp rename to tests/fixtures/cpp/mod4/meta.cpp diff --git a/tests/fixtures/cpp/meta5.cpp b/tests/fixtures/cpp/mod5/meta.cpp similarity index 100% rename from tests/fixtures/cpp/meta5.cpp rename to tests/fixtures/cpp/mod5/meta.cpp diff --git a/tests/fixtures/cpp/meta6.cpp b/tests/fixtures/cpp/mod6/meta.cpp similarity index 100% rename from tests/fixtures/cpp/meta6.cpp rename to tests/fixtures/cpp/mod6/meta.cpp diff --git a/tests/fixtures/cpp/test.py b/tests/fixtures/cpp/test.py deleted file mode 100644 index 453b6d7..0000000 --- a/tests/fixtures/cpp/test.py +++ /dev/null @@ -1,3 +0,0 @@ -from dzgui.api.mods import tokenize - -print(tokenize("meta4.cpp")) diff --git a/tests/fixtures/dztuirc_one b/tests/fixtures/dztuirc_1 similarity index 100% rename from tests/fixtures/dztuirc_one rename to tests/fixtures/dztuirc_1 diff --git a/tests/fixtures/dztuirc_two b/tests/fixtures/dztuirc_2 similarity index 100% rename from tests/fixtures/dztuirc_two rename to tests/fixtures/dztuirc_2 diff --git a/tests/fixtures/dztuirc_3 b/tests/fixtures/dztuirc_3 new file mode 100644 index 0000000..c7a32f4 --- /dev/null +++ b/tests/fixtures/dztuirc_3 @@ -0,0 +1,42 @@ +#Path to DayZ installation +steam_path="/tmp" + +#Battlemetrics API key +api_key="" + +#Favorited server IP:PORT array +ip_list=( +) + +#Favorite server to fast-connect to (limit one) +fav_server="" + +#Favorite server label (human readable) +fav_label="" + +#Custom player name (optional, required by some servers) +name="" + +#Set to 1 to perform dry-run and print launch options +debug="1" + +#Toggle stable/testing branch +branch="testing" + +#Steam API key +steam_api="" + +#Auto-install mods +auto_install="2" + +#Automod staging directory +staging_dir="/tmp" + +#Path to default Steam client +default_steam_path="/tmp" + +#Preferred Steam launch command (for Flatpak support) +preferred_client="steam" + +#DZGUI source path +src_path="" diff --git a/tests/test_config.py b/tests/test_config.py index 4cfd754..72c0460 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -1,6 +1,7 @@ import json import pytest +from dzgui.const.boilerplate import config_boilerplate from dzgui.config.query import get_config from dzgui.config.xdg import get_xdg_paths, parse_filepaths from dzgui.config import convert @@ -11,7 +12,11 @@ pytestmark = pytest.mark.config @pytest.fixture def legacy_config(): - return fixture_path("dztuirc_one") + return fixture_path("dztuirc_1") + +@pytest.fixture +def unset_values(): + return fixture_path("dztuirc_3") @pytest.fixture @@ -60,8 +65,8 @@ def test_contains_invalid_values(keys, config): @pytest.mark.parametrize( "fixture, expect", [ - ("dztuirc_one", (False, True, True)), - ("dztuirc_two", (False, False, False)), + ("dztuirc_1", (False, True, True)), + ("dztuirc_2", (False, False, False)), ], ) def test_bool_conversion(fixture, expect): @@ -86,5 +91,12 @@ def test_key_conversion(legacy_config): for key in keys: assert key not in j +def test_missing_values(unset_values): + j = convert.rc2json(unset_values) + j = json.loads(j) + assert j.keys() == config_boilerplate.keys() + + + # TODO: test that when a config file is created from scratch, it contains all values diff --git a/tests/test_modmeta.py b/tests/test_modmeta.py index f2f4ca4..8002825 100644 --- a/tests/test_modmeta.py +++ b/tests/test_modmeta.py @@ -1,17 +1,13 @@ import pytest +from pathlib import Path + from dzgui.api.mods import tokenize from tests.fixtures import fixture_path @pytest.mark.mods -@pytest.mark.parametrize("fixture", [ - fixture_path("cpp/meta1.cpp"), - fixture_path("cpp/meta2.cpp"), - fixture_path("cpp/meta3.cpp"), - fixture_path("cpp/meta4.cpp"), - fixture_path("cpp/meta5.cpp"), - fixture_path("cpp/meta6.cpp"), - ] -) -def test_modmeta(fixture: str) -> None: - meta = tokenize(fixture) +@pytest.mark.parametrize("i", range(1, 7)) +def test_modmeta(i: int) -> None: + fixture = fixture_path(f"cpp/mod{i}") + path = Path(fixture) + meta = tokenize(path) assert meta["name"] == "ModName"