|
| 1 | +# pylint: disable=protected-access |
| 2 | +# pylint: disable=redefined-outer-name |
| 3 | +# pylint: disable=unused-argument |
| 4 | +# pylint: disable=unused-variable |
| 5 | + |
| 6 | + |
| 7 | +from models_library.products import ProductName |
| 8 | +from models_library.users import UserID |
| 9 | +from pytest_mock import MockType |
| 10 | +from simcore_service_api_server._service_jobs import JobService |
| 11 | +from simcore_service_api_server.models.schemas.jobs import Job, JobInputs |
| 12 | +from simcore_service_api_server.models.schemas.solvers import Solver |
| 13 | + |
| 14 | + |
| 15 | +async def test_list_jobs_by_resource_prefix( |
| 16 | + job_service: JobService, |
| 17 | + mocked_webserver_rpc_api: dict[str, MockType], |
| 18 | +): |
| 19 | + # Test with default pagination parameters |
| 20 | + jobs, page_meta = await job_service.list_jobs_by_resource_prefix( |
| 21 | + job_parent_resource_name_prefix="solvers/some-solver" |
| 22 | + ) |
| 23 | + |
| 24 | + assert isinstance(jobs, list) |
| 25 | + mocked_webserver_rpc_api["list_projects_marked_as_jobs"].assert_called_once() |
| 26 | + |
| 27 | + # Check pagination info |
| 28 | + assert page_meta.total >= 0 |
| 29 | + assert page_meta.limit > 0 |
| 30 | + assert page_meta.offset == 0 |
| 31 | + |
| 32 | + |
| 33 | +async def test_create_job( |
| 34 | + job_service: JobService, |
| 35 | + mocked_webserver_rest_api_base: dict[str, MockType], |
| 36 | + mocked_webserver_rpc_api: dict[str, MockType], |
| 37 | + product_name: ProductName, |
| 38 | + user_id: UserID, |
| 39 | +): |
| 40 | + # Create mock solver and inputs |
| 41 | + solver = Solver( |
| 42 | + id="simcore/services/comp/test-solver", |
| 43 | + version="1.0.0", |
| 44 | + title="Test Solver", |
| 45 | + |
| 46 | + description="Test solver for testing", |
| 47 | + ) |
| 48 | + |
| 49 | + inputs = JobInputs(items={}) |
| 50 | + |
| 51 | + # Mock URL generator |
| 52 | + def mock_url_for(*args, **kwargs): |
| 53 | + return "https://example.com/api/v1/jobs/test-job" |
| 54 | + |
| 55 | + # Test job creation |
| 56 | + job, project = await job_service.create_job( |
| 57 | + solver_or_program=solver, |
| 58 | + inputs=inputs, |
| 59 | + parent_project_uuid=None, |
| 60 | + parent_node_id=None, |
| 61 | + url_for=mock_url_for, |
| 62 | + hidden=False, |
| 63 | + project_name="Test Job Project", |
| 64 | + description="Test description", |
| 65 | + ) |
| 66 | + |
| 67 | + # Verify job and project creation |
| 68 | + assert isinstance(job, Job) |
| 69 | + assert job.id == project.uuid |
| 70 | + assert "test-solver" in job.name |
| 71 | + |
| 72 | + # Verify API calls |
| 73 | + mocked_webserver_rest_api_base["create_project"].assert_called_once() |
| 74 | + mocked_webserver_rpc_api["mark_project_as_job"].assert_called_once() |
0 commit comments