import pytest from py.recipes.merger import GenParamsMerger def test_merge_priority(): request_params = {"prompt": "from request", "steps": 20} civitai_meta = {"prompt": "from civitai", "cfg": 7.0} embedded_metadata = {"gen_params": {"prompt": "from embedded", "seed": 123}} merged = GenParamsMerger.merge(request_params, civitai_meta, embedded_metadata) assert merged["prompt"] == "from request" assert merged["steps"] == 20 assert merged["cfg"] == 7.0 assert merged["seed"] == 123 def test_merge_no_request_params(): civitai_meta = {"prompt": "from civitai", "cfg": 7.0} embedded_metadata = {"gen_params": {"prompt": "from embedded", "seed": 123}} merged = GenParamsMerger.merge(None, civitai_meta, embedded_metadata) assert merged["prompt"] == "from civitai" assert merged["cfg"] == 7.0 assert merged["seed"] == 123 def test_merge_only_embedded(): embedded_metadata = {"gen_params": {"prompt": "from embedded", "seed": 123}} merged = GenParamsMerger.merge(None, None, embedded_metadata) assert merged["prompt"] == "from embedded" assert merged["seed"] == 123 def test_merge_raw_embedded(): # Test when embedded metadata is just the gen_params themselves embedded_metadata = {"prompt": "from raw embedded", "seed": 456} merged = GenParamsMerger.merge(None, None, embedded_metadata) assert merged["prompt"] == "from raw embedded" assert merged["seed"] == 456 def test_merge_none_values(): merged = GenParamsMerger.merge(None, None, None) assert merged == {} def test_merge_filters_blacklisted_keys(): request_params = {"prompt": "test", "id": "should-be-removed"} civitai_meta = {"cfg": 7, "url": "remove-me"} embedded_metadata = {"seed": 123, "hash": "remove-also"} merged = GenParamsMerger.merge(request_params, civitai_meta, embedded_metadata) assert "prompt" in merged assert "cfg" in merged assert "seed" in merged assert "id" not in merged assert "url" not in merged assert "hash" not in merged