feat(gui): replace AI studio with product suite
This commit is contained in:
@@ -146,6 +146,95 @@ class ImageStudioGenerationTests(TempDirMixin, unittest.TestCase):
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_generate_image_jobs_sends_selected_aspect_ratio(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
cfg, project, source = self._project_source(temp_dir)
|
||||
submitted_payloads = []
|
||||
|
||||
def fake_submit(method, url, api_key, **kwargs):
|
||||
submitted_payloads.append(dict(kwargs["payload"]))
|
||||
return {"task_id": "cmhub-ratio", "status": "queued"}
|
||||
|
||||
with mock.patch("app.image_studio_generation._runtime", return_value=self._runtime()), \
|
||||
mock.patch(
|
||||
"app.image_studio_generation.ai._cmhub_call_with_retry",
|
||||
side_effect=fake_submit,
|
||||
), \
|
||||
mock.patch(
|
||||
"app.image_studio_generation.ai._cmhub_call_once",
|
||||
return_value={
|
||||
"task_id": "cmhub-ratio",
|
||||
"status": "succeeded",
|
||||
"result": {"image_url": "https://cdn.example.com/ratio.png"},
|
||||
},
|
||||
), \
|
||||
mock.patch(
|
||||
"app.image_studio_generation.ai._download_cmhub_image_with_retry",
|
||||
return_value=(self._png_bytes(), 0.1),
|
||||
):
|
||||
summary = image_studio_generation.generate_image_jobs(
|
||||
project.id,
|
||||
source.id,
|
||||
"比例测试",
|
||||
1,
|
||||
aspect_ratio="3:4",
|
||||
config=cfg,
|
||||
path=cfg["db_path"],
|
||||
)
|
||||
|
||||
self.assertEqual(1, summary["success"])
|
||||
self.assertEqual("3:4", submitted_payloads[0]["aspect_ratio"])
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_stop_after_download_discards_temporary_result(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
cfg, project, source = self._project_source(temp_dir)
|
||||
stopped = {"value": False}
|
||||
saved_paths = []
|
||||
|
||||
def fake_download(request_result, out_path, config, on_event, job_id):
|
||||
os.makedirs(os.path.dirname(out_path), exist_ok=True)
|
||||
with open(out_path, "wb") as fh:
|
||||
fh.write(self._png_bytes())
|
||||
saved_paths.append(out_path)
|
||||
stopped["value"] = True
|
||||
return out_path
|
||||
|
||||
with mock.patch("app.image_studio_generation._runtime", return_value=self._runtime()), \
|
||||
mock.patch(
|
||||
"app.image_studio_generation.ai._cmhub_call_with_retry",
|
||||
return_value={"task_id": "cmhub-stop", "status": "queued"},
|
||||
), \
|
||||
mock.patch(
|
||||
"app.image_studio_generation.ai._cmhub_call_once",
|
||||
return_value={
|
||||
"task_id": "cmhub-stop",
|
||||
"status": "succeeded",
|
||||
"result": {"image_url": "https://cdn.example.com/stop.png"},
|
||||
},
|
||||
), \
|
||||
mock.patch(
|
||||
"app.image_studio_generation._download_and_save_job_image",
|
||||
side_effect=fake_download,
|
||||
):
|
||||
summary = image_studio_generation.generate_image_jobs(
|
||||
project.id,
|
||||
source.id,
|
||||
"停止测试",
|
||||
1,
|
||||
config=cfg,
|
||||
path=cfg["db_path"],
|
||||
should_stop=lambda: stopped["value"],
|
||||
)
|
||||
|
||||
self.assertEqual(1, summary["cancelled"])
|
||||
self.assertEqual([], image_studio.list_assets(project.id, kind="generated_main", path=cfg["db_path"]))
|
||||
self.assertEqual(1, len(saved_paths))
|
||||
self.assertFalse(os.path.exists(saved_paths[0]))
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_resume_existing_job_polls_without_new_submit(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
cfg, project, source = self._project_source(temp_dir)
|
||||
|
||||
Reference in New Issue
Block a user