diff --git a/l4d2web/tests/test_cli.py b/l4d2web/tests/test_cli.py index 0f91f8d..65d6bcc 100644 --- a/l4d2web/tests/test_cli.py +++ b/l4d2web/tests/test_cli.py @@ -24,14 +24,14 @@ def test_workshop_refresh_enqueues_job(app_env): runner = CliRunner() with app_env.app_context(): result = runner.invoke(workshop_refresh, []) - assert result.exit_code == 0, result.output - assert "enqueued refresh_workshop_items job" in result.output - with session_scope() as db: - jobs = db.scalars(select(Job).where(Job.operation == "refresh_workshop_items")).all() - assert len(jobs) == 1 - assert jobs[0].state == "queued" - assert jobs[0].user_id is None - assert jobs[0].server_id is None + assert result.exit_code == 0, result.output + assert "enqueued refresh_workshop_items job" in result.output + with session_scope() as db: + jobs = db.scalars(select(Job).where(Job.operation == "refresh_workshop_items")).all() + assert len(jobs) == 1 + assert jobs[0].state == "queued" + assert jobs[0].user_id is None + assert jobs[0].server_id is None def test_workshop_refresh_is_idempotent_when_job_queued(app_env): @@ -39,9 +39,26 @@ def test_workshop_refresh_is_idempotent_when_job_queued(app_env): with app_env.app_context(): first = runner.invoke(workshop_refresh, []) second = runner.invoke(workshop_refresh, []) - assert first.exit_code == 0 - assert second.exit_code == 0 - assert "already queued" in second.output - with session_scope() as db: - jobs = db.scalars(select(Job).where(Job.operation == "refresh_workshop_items")).all() - assert len(jobs) == 1, "must not insert a second job when one is already queued" + assert first.exit_code == 0 + assert second.exit_code == 0 + assert "already queued" in second.output + with session_scope() as db: + jobs = db.scalars(select(Job).where(Job.operation == "refresh_workshop_items")).all() + assert len(jobs) == 1, "must not insert a second job when one is already queued" + + +@pytest.mark.parametrize("active_state", ["running", "cancelling"]) +def test_workshop_refresh_is_idempotent_when_job_active(app_env, active_state): + runner = CliRunner() + with app_env.app_context(): + with session_scope() as db: + db.add(Job( + user_id=None, server_id=None, + operation="refresh_workshop_items", state=active_state, + )) + result = runner.invoke(workshop_refresh, []) + assert result.exit_code == 0 + assert f"already {active_state}" in result.output + with session_scope() as db: + jobs = db.scalars(select(Job).where(Job.operation == "refresh_workshop_items")).all() + assert len(jobs) == 1