Skip to content

Commit 59a7a94

Browse files
committed
Replace another crud call with get_job_or_404
1 parent b60892a commit 59a7a94

4 files changed

Lines changed: 21 additions & 11 deletions

File tree

automl-service/app/api/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from sqlalchemy.ext.asyncio import AsyncSession
88

99
from app.core.job_file_cache import download_mlflow_artifact
10-
from app.db import crud
10+
from app.services.job_service import get_job_or_404
1111

1212

1313
def resolve_request_project_id(request: Optional[Request]) -> Optional[str]:
@@ -34,7 +34,7 @@ async def get_job_paths(
3434
Raises HTTPException(400) if model_path not available.
3535
Raises HTTPException(500) if model_path is not an MLflow URI or download fails.
3636
"""
37-
job = await crud.get_job(db, job_id)
37+
job = await get_job_or_404(db, job_id)
3838
if not job:
3939
raise HTTPException(status_code=404, detail=f"Job not found: {job_id}")
4040

automl-service/tests/conftest.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,14 @@ def pytest_configure(config):
8080
config.option.htmlpath = str(report_dir / filename)
8181

8282

83+
@pytest.fixture(autouse=True)
84+
def _use_local_mlflow_tracking_uri(monkeypatch):
85+
"""Keep tests on the repo-local MLflow store instead of inherited remote URIs."""
86+
tracking_uri = Path(__file__).resolve().parent.parent / "mlruns"
87+
tracking_uri.mkdir(exist_ok=True)
88+
monkeypatch.setenv("MLFLOW_TRACKING_URI", str(tracking_uri))
89+
90+
8391
# ---------------------------------------------------------------------------
8492
# Auto-skip markers when optional packages are absent
8593
# ---------------------------------------------------------------------------

automl-service/tests/test_api_deployment.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@ def _make_success_response(model_id: str, model_version: int = 3):
3333

3434

3535
@pytest.mark.asyncio
36-
async def test_deploy_from_job_happy_path(app_client):
36+
async def test_deploy_from_job_happy_path(app_client, monkeypatch):
3737
"""
3838
Verifies that the helper that reaches out to domino to get jobs is called and that the domino api
3939
for creating model apis is called
4040
"""
41+
monkeypatch.setenv("DOMINO_ENVIRONMENT_ID", "fakeenvid")
4142
set_request_auth_header("Bearer test-token")
4243
job_id = "8771df7b-5550-4b6e-bea9-838f9fad040b"
4344
project_id = "69c66e4d729d187bd89d71f4"
@@ -54,4 +55,5 @@ async def test_deploy_from_job_happy_path(app_client):
5455
set_request_auth_header(None)
5556
body = response.json()
5657

58+
assert body['success'], f"Body was not successful, {body}"
5759
assert response.status_code == 200

automl-service/tests/test_deployment_service.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ async def test_job_not_found_raises_404(self):
106106
db.execute = AsyncMock()
107107

108108
with patch("app.services.deployment_service.get_db_session", session_cm), \
109-
patch("app.services.deployment_service.crud.get_job", AsyncMock(return_value=None)):
109+
patch("app.services.deployment_service.get_job_or_404", new=AsyncMock(return_value=None)):
110110
with pytest.raises(HTTPException) as exc_info:
111111
await deploy_from_job("nonexistent-job-id")
112112
assert exc_info.value.status_code == 404
@@ -117,7 +117,7 @@ async def test_job_not_completed_raises_400(self):
117117
session_cm, _ = _make_db_session(job)
118118

119119
with patch("app.services.deployment_service.get_db_session", session_cm), \
120-
patch("app.services.deployment_service.crud.get_job", AsyncMock(return_value=job)):
120+
patch("app.services.deployment_service.get_job_or_404", new=AsyncMock(return_value=job)):
121121
with pytest.raises(HTTPException) as exc_info:
122122
await deploy_from_job("job-id")
123123
assert exc_info.value.status_code == 400
@@ -129,7 +129,7 @@ async def test_job_not_registered_raises_400(self):
129129
session_cm, _ = _make_db_session(job)
130130

131131
with patch("app.services.deployment_service.get_db_session", session_cm), \
132-
patch("app.services.deployment_service.crud.get_job", AsyncMock(return_value=job)):
132+
patch("app.services.deployment_service.get_job_or_404", new=AsyncMock(return_value=job)):
133133
with pytest.raises(HTTPException) as exc_info:
134134
await deploy_from_job("job-id")
135135
assert exc_info.value.status_code == 400
@@ -141,7 +141,7 @@ async def test_missing_registered_model_name_raises_400(self):
141141
session_cm, _ = _make_db_session(job)
142142

143143
with patch("app.services.deployment_service.get_db_session", session_cm), \
144-
patch("app.services.deployment_service.crud.get_job", AsyncMock(return_value=job)):
144+
patch("app.services.deployment_service.get_job_or_404", new=AsyncMock(return_value=job)):
145145
with pytest.raises(HTTPException) as exc_info:
146146
await deploy_from_job("job-id")
147147
assert exc_info.value.status_code == 400
@@ -156,7 +156,7 @@ async def test_api_error_raises_400(self):
156156
)
157157

158158
with patch("app.services.deployment_service.get_db_session", session_cm), \
159-
patch("app.services.deployment_service.crud.get_job", AsyncMock(return_value=job)), \
159+
patch("app.services.deployment_service.get_job_or_404", new=AsyncMock(return_value=job)), \
160160
patch("app.services.deployment_service.get_domino_model_api", return_value=mock_api), \
161161
patch.dict("os.environ", {"DOMINO_ENVIRONMENT_ID": "env-123"}):
162162
with pytest.raises(HTTPException) as exc_info:
@@ -174,7 +174,7 @@ async def test_happy_path_returns_model_api_id(self):
174174
)
175175

176176
with patch("app.services.deployment_service.get_db_session", session_cm), \
177-
patch("app.services.deployment_service.crud.get_job", AsyncMock(return_value=job)), \
177+
patch("app.services.deployment_service.get_job_or_404", new=AsyncMock(return_value=job)), \
178178
patch("app.services.deployment_service.get_domino_model_api", return_value=mock_api), \
179179
patch.dict("os.environ", {"DOMINO_ENVIRONMENT_ID": "env-123"}):
180180
result = await deploy_from_job("job-id", model_name="my-api", replicas=2)
@@ -201,7 +201,7 @@ async def test_model_name_defaults_to_job_name(self):
201201
)
202202

203203
with patch("app.services.deployment_service.get_db_session", session_cm), \
204-
patch("app.services.deployment_service.crud.get_job", AsyncMock(return_value=job)), \
204+
patch("app.services.deployment_service.get_job_or_404", new=AsyncMock(return_value=job)), \
205205
patch("app.services.deployment_service.get_domino_model_api", return_value=mock_api), \
206206
patch.dict("os.environ", {"DOMINO_ENVIRONMENT_ID": "env-123"}):
207207
await deploy_from_job("job-id")
@@ -219,7 +219,7 @@ async def test_uses_domino_environment_id(self):
219219
)
220220

221221
with patch("app.services.deployment_service.get_db_session", session_cm), \
222-
patch("app.services.deployment_service.crud.get_job", AsyncMock(return_value=job)), \
222+
patch("app.services.deployment_service.get_job_or_404", new=AsyncMock(return_value=job)), \
223223
patch("app.services.deployment_service.get_domino_model_api", return_value=mock_api), \
224224
patch.dict("os.environ", {"DOMINO_ENVIRONMENT_ID": "my-env-id"}):
225225
await deploy_from_job("job-id")

0 commit comments

Comments
 (0)