Skip to content

Commit abbc93e

Browse files
author
Christoph Kepper
committed
Refactor buildzip to simplify make_nuwiki callback handling and improve test coverage
- Inline `_make_zip_callback` logic directly into `buildzip` for cleaner flow. - Add a regression test to ensure `buildzip` zips the correct directory populated by `make_nuwiki`.
1 parent dfcca8c commit abbc93e

File tree

2 files changed

+68
-17
lines changed

2 files changed

+68
-17
lines changed

src/mwlib/apps/buildzip.py

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,16 @@ def _build_zip(
388388
nuwiki_dir = os.path.join(tmpdir, "nuwiki")
389389
log.info(f"creating nuwiki in {nuwiki_dir!r}")
390390

391-
status = create_zip_from_wiki_env(env, pod_client, wiki_options, self._make_zip_callback)
391+
def build_nuwiki_to_tmpdir(wiki_options, metabook, pod_client, status):
392+
make_nuwiki(
393+
fsdir=nuwiki_dir,
394+
metabook=metabook,
395+
wiki_options=wiki_options,
396+
pod_client=pod_client,
397+
status=status,
398+
)
399+
400+
status = create_zip_from_wiki_env(env, pod_client, wiki_options, build_nuwiki_to_tmpdir)
392401

393402
zip_path = ZipCreator.create_zip(nuwiki_dir, self.config.output)
394403

@@ -398,22 +407,6 @@ def _build_zip(
398407

399408
return zip_path
400409

401-
def _make_zip_callback(
402-
self, wiki_options: dict, metabook: Any, pod_client: Any, status: Any
403-
) -> str:
404-
"""Callback for create_zip_from_wiki_env."""
405-
# This is called by create_zip_from_wiki_env to create nuwiki
406-
tmpdir = tempfile.mkdtemp()
407-
fsdir = os.path.join(tmpdir, "nuwiki")
408-
make_nuwiki(
409-
fsdir=fsdir,
410-
metabook=metabook,
411-
wiki_options=wiki_options,
412-
pod_client=pod_client,
413-
status=status,
414-
)
415-
return fsdir
416-
417410

418411
# ============================================================================
419412
# CLI Entry Point (Thin Wrapper)

tests/mwlib/apps/test_buildzip.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
22
import tempfile
3+
import zipfile
34

45
import pytest
56
from click.testing import CliRunner
@@ -415,3 +416,60 @@ def test_build_config_immutable():
415416
# Should not be able to modify
416417
with pytest.raises(Exception):
417418
config.output = "other.zip"
419+
420+
421+
def test_zip_builder_build_zip_writes_and_zips_same_nuwiki_dir(monkeypatch, tmp_path):
422+
"""Regression: _build_zip must zip the directory that make_nuwiki populated."""
423+
from types import SimpleNamespace
424+
425+
from mwlib.apps.buildzip import BuildConfig, ZipBuilder
426+
427+
output_zip = tmp_path / "out.zip"
428+
build_config = BuildConfig(
429+
output=str(output_zip),
430+
posturl=None,
431+
getposturl=0,
432+
keep_tmpfiles=False,
433+
status_file=None,
434+
config=None,
435+
imagesize=1280,
436+
metabook=object(),
437+
collectionpage=None,
438+
noimages=False,
439+
logfile=None,
440+
username=None,
441+
password=None,
442+
domain=None,
443+
title=None,
444+
subtitle=None,
445+
editor=None,
446+
script_extension=".php",
447+
)
448+
builder = ZipBuilder(build_config)
449+
450+
def fake_create_zip_from_wiki_env(env, pod_client, wiki_options, make_zip):
451+
make_zip(
452+
wiki_options=wiki_options,
453+
metabook=env.metabook,
454+
pod_client=pod_client,
455+
status=lambda **kwargs: None,
456+
)
457+
return lambda **kwargs: None
458+
459+
def fake_make_nuwiki(fsdir, metabook, wiki_options, pod_client, status):
460+
os.makedirs(fsdir, exist_ok=True)
461+
with open(os.path.join(fsdir, "marker.txt"), "w", encoding="utf-8") as f:
462+
f.write("ok")
463+
464+
monkeypatch.setattr("mwlib.apps.buildzip.create_zip_from_wiki_env", fake_create_zip_from_wiki_env)
465+
monkeypatch.setattr("mwlib.apps.buildzip.make_nuwiki", fake_make_nuwiki)
466+
467+
env = SimpleNamespace(metabook=object())
468+
tmpdir = tmp_path / "tmp"
469+
tmpdir.mkdir()
470+
471+
zip_path = builder._build_zip(str(tmpdir), env, {}, pod_client=None)
472+
473+
assert zip_path == str(output_zip)
474+
with zipfile.ZipFile(zip_path, "r") as zf:
475+
assert "marker.txt" in zf.namelist()

0 commit comments

Comments
 (0)