Commit f1d1d929 authored by Eric Duminil's avatar Eric Duminil
Browse files

Removing stuff

parent 6d4cd584
"""Tests for the simstadt --install command.""" """Tests for the simstadt --install command."""
import io
import sys import sys
import zipfile
from pathlib import Path from pathlib import Path
from unittest.mock import MagicMock, patch from unittest.mock import MagicMock, patch
import pytest import pytest
from simstadt.cli import app, build_parser from simstadt.cli import app
from simstadt.install import _get_java_version, _parse_simstadt_name from simstadt.install import _get_java_version, _parse_simstadt_name
########################
def _make_test_zip(version="0.14.0-SNAPSHOT", branch="develop", rev="4431e10", date="20260520"): # Get SimStadt name #
manifest = f"Implementation-Version: {version} ({branch}, rev. {rev}, {date}\n )\n" ########################
jar_buf = io.BytesIO()
with zipfile.ZipFile(jar_buf, "w") as jar:
jar.writestr("META-INF/MANIFEST.MF", manifest)
zip_buf = io.BytesIO()
with zipfile.ZipFile(zip_buf, "w") as zf:
zf.writestr(f"lib/simstadt-desktop-{version}.jar", jar_buf.getvalue())
info = zipfile.ZipInfo("SimStadt.sh")
info.external_attr = 0o755 << 16
zf.writestr(info, "#!/bin/bash\n")
return zip_buf.getvalue()
# ---------------------------------------------------------------------------
# _parse_simstadt_name
# ---------------------------------------------------------------------------
def test_parse_simstadt_name(): def test_parse_simstadt_name():
manifest = "Implementation-Version: 0.14.0-SNAPSHOT (develop, rev. 4431e10, 20260520\n )\n" manifest = (
assert _parse_simstadt_name(manifest) == "SimStadt2_0.14.0-SNAPSHOT_develop_20260520_4431e10" "Implementation-Version: 0.14.0-SNAPSHOT (develop, rev. 4431e10, 20260520\n )\n"
)
assert (
_parse_simstadt_name(manifest)
== "SimStadt2_0.14.0-SNAPSHOT_develop_20260520_4431e10"
)
def test_parse_simstadt_name_invalid(): def test_parse_simstadt_name_invalid():
...@@ -41,14 +29,16 @@ def test_parse_simstadt_name_invalid(): ...@@ -41,14 +29,16 @@ def test_parse_simstadt_name_invalid():
_parse_simstadt_name("Manifest-Version: 1.0\nCreated-By: Maven\n") _parse_simstadt_name("Manifest-Version: 1.0\nCreated-By: Maven\n")
# --------------------------------------------------------------------------- ########################
# _get_java_version # Test Java Version #
# --------------------------------------------------------------------------- ########################
def test_get_java_version_17(): def test_get_java_version_17():
with patch("simstadt.install.subprocess.run") as mock_run: with patch("simstadt.install.subprocess.run") as mock_run:
mock_run.return_value = MagicMock(stderr='openjdk version "17.0.3" 2023-04-18\n') mock_run.return_value = MagicMock(
stderr='openjdk version "17.0.3" 2023-04-18\n'
)
assert _get_java_version() == 17 assert _get_java_version() == 17
...@@ -69,95 +59,6 @@ def test_get_java_version_unrecognised_output(): ...@@ -69,95 +59,6 @@ def test_get_java_version_unrecognised_output():
assert _get_java_version() is None assert _get_java_version() is None
# ---------------------------------------------------------------------------
# cmd_install
# ---------------------------------------------------------------------------
def test_install_new_version(monkeypatch, capsys, tmp_path):
desktop = tmp_path / "Desktop"
desktop.mkdir()
zip_bytes = _make_test_zip()
def mock_urlretrieve(url, dest):
Path(dest).write_bytes(zip_bytes)
monkeypatch.setattr("urllib.request.urlretrieve", mock_urlretrieve)
monkeypatch.setattr("simstadt.install._get_java_version", lambda: 17)
monkeypatch.setattr(Path, "home", lambda: tmp_path)
monkeypatch.setattr(sys, "argv", ["simstadt", "--install"])
app()
out, _ = capsys.readouterr()
assert "Installed:" in out
dest = desktop / "SimStadt2_0.14.0-SNAPSHOT_develop_20260520_4431e10"
assert dest.is_dir()
sh = dest / "SimStadt.sh"
assert sh.exists()
assert sh.stat().st_mode & 0o111 # executable bits preserved from ZIP
def test_install_already_installed(monkeypatch, capsys, tmp_path):
desktop = tmp_path / "Desktop"
desktop.mkdir()
(desktop / "SimStadt2_0.14.0-SNAPSHOT_develop_20260520_4431e10").mkdir()
zip_bytes = _make_test_zip()
def mock_urlretrieve(url, dest):
Path(dest).write_bytes(zip_bytes)
monkeypatch.setattr("urllib.request.urlretrieve", mock_urlretrieve)
monkeypatch.setattr(Path, "home", lambda: tmp_path)
monkeypatch.setattr(sys, "argv", ["simstadt", "--install"])
app()
out, _ = capsys.readouterr()
assert "Already installed" in out
def test_install_warns_missing_java(monkeypatch, capsys, tmp_path):
desktop = tmp_path / "Desktop"
desktop.mkdir()
zip_bytes = _make_test_zip()
def mock_urlretrieve(url, dest):
Path(dest).write_bytes(zip_bytes)
monkeypatch.setattr("urllib.request.urlretrieve", mock_urlretrieve)
monkeypatch.setattr("simstadt.install._get_java_version", lambda: None)
monkeypatch.setattr(Path, "home", lambda: tmp_path)
monkeypatch.setattr(sys, "argv", ["simstadt", "--install"])
app()
_, err = capsys.readouterr()
assert "Java not found" in err
assert "bell-sw.com" in err
def test_install_warns_old_java(monkeypatch, capsys, tmp_path):
desktop = tmp_path / "Desktop"
desktop.mkdir()
zip_bytes = _make_test_zip()
def mock_urlretrieve(url, dest):
Path(dest).write_bytes(zip_bytes)
monkeypatch.setattr("urllib.request.urlretrieve", mock_urlretrieve)
monkeypatch.setattr("simstadt.install._get_java_version", lambda: 11)
monkeypatch.setattr(Path, "home", lambda: tmp_path)
monkeypatch.setattr(sys, "argv", ["simstadt", "--install"])
app()
_, err = capsys.readouterr()
assert "Java 11" in err
assert "bell-sw.com" in err
def test_install_parser_flag():
args = build_parser().parse_args(["--install"])
assert args.install is True
def test_install_no_desktop(monkeypatch, capsys, tmp_path): def test_install_no_desktop(monkeypatch, capsys, tmp_path):
monkeypatch.setattr(Path, "home", lambda: tmp_path) monkeypatch.setattr(Path, "home", lambda: tmp_path)
monkeypatch.setattr(sys, "argv", ["simstadt", "--install"]) monkeypatch.setattr(sys, "argv", ["simstadt", "--install"])
......
Supports Markdown
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