chore: dep inject for model in website crawl api (#40156)

This commit is contained in:
Likalikali
2026-08-07 12:40:12 +00:00
committed by GitHub
parent 055462fe6e
commit 3e8c0fdcef
2 changed files with 25 additions and 63 deletions
@@ -1,14 +1,15 @@
from unittest.mock import Mock, PropertyMock, patch
from unittest.mock import Mock
import pytest
from flask import Flask
from pytest_mock import MockerFixture
from controllers.console import console_ns
from controllers.console.datasets.error import WebsiteCrawlError
from controllers.console.datasets.website import (
WebsiteCrawlApi,
WebsiteCrawlPayload,
WebsiteCrawlStatusApi,
WebsiteCrawlStatusQuery,
)
from services.website_service import (
WebsiteCrawlApiRequest,
@@ -58,16 +59,9 @@ class TestWebsiteCrawlApi:
"url": "https://example.com",
"options": {"depth": 1},
}
req_data = WebsiteCrawlPayload.model_validate(payload)
with (
app.test_request_context("/", json=payload),
patch.object(
type(console_ns),
"payload",
new_callable=PropertyMock,
return_value=payload,
),
):
with app.test_request_context("/", json=payload):
mock_request = Mock(spec=WebsiteCrawlApiRequest)
mocker.patch.object(
WebsiteCrawlApiRequest,
@@ -81,7 +75,7 @@ class TestWebsiteCrawlApi:
return_value={"job_id": "job-1"},
)
result, status = method(api)
result, status = method(api, req_data)
assert status == 200
assert result["job_id"] == "job-1"
@@ -95,16 +89,9 @@ class TestWebsiteCrawlApi:
"url": "bad-url",
"options": {},
}
req_data = WebsiteCrawlPayload.model_validate(payload)
with (
app.test_request_context("/", json=payload),
patch.object(
type(console_ns),
"payload",
new_callable=PropertyMock,
return_value=payload,
),
):
with app.test_request_context("/", json=payload):
mocker.patch.object(
WebsiteCrawlApiRequest,
"from_args",
@@ -112,7 +99,7 @@ class TestWebsiteCrawlApi:
)
with pytest.raises(WebsiteCrawlError, match="invalid payload"):
method(api)
method(api, req_data)
def test_crawl_service_error(self, app: Flask, mocker: MockerFixture):
api = WebsiteCrawlApi()
@@ -123,16 +110,9 @@ class TestWebsiteCrawlApi:
"url": "https://example.com",
"options": {},
}
req_data = WebsiteCrawlPayload.model_validate(payload)
with (
app.test_request_context("/", json=payload),
patch.object(
type(console_ns),
"payload",
new_callable=PropertyMock,
return_value=payload,
),
):
with app.test_request_context("/", json=payload):
mock_request = Mock(spec=WebsiteCrawlApiRequest)
mocker.patch.object(
WebsiteCrawlApiRequest,
@@ -147,7 +127,7 @@ class TestWebsiteCrawlApi:
)
with pytest.raises(WebsiteCrawlError, match="crawl failed"):
method(api)
method(api, req_data)
class TestWebsiteCrawlStatusApi:
@@ -156,14 +136,9 @@ class TestWebsiteCrawlStatusApi:
method = unwrap(api.get)
job_id = "job-123"
args = {"provider": "firecrawl"}
req_data = WebsiteCrawlStatusQuery.model_validate({"provider": "firecrawl"})
with app.test_request_context("/?provider=firecrawl"):
mocker.patch(
"controllers.console.datasets.website.request.args.to_dict",
return_value=args,
)
mock_request = Mock(spec=WebsiteCrawlStatusApiRequest)
mocker.patch.object(
WebsiteCrawlStatusApiRequest,
@@ -177,7 +152,7 @@ class TestWebsiteCrawlStatusApi:
return_value={"status": "completed"},
)
result, status = method(api, job_id)
result, status = method(api, req_data, job_id)
assert status == 200
assert result["status"] == "completed"
@@ -187,14 +162,9 @@ class TestWebsiteCrawlStatusApi:
method = unwrap(api.get)
job_id = "job-123"
args = {"provider": "firecrawl"}
req_data = WebsiteCrawlStatusQuery.model_validate({"provider": "firecrawl"})
with app.test_request_context("/?provider=firecrawl"):
mocker.patch(
"controllers.console.datasets.website.request.args.to_dict",
return_value=args,
)
mocker.patch.object(
WebsiteCrawlStatusApiRequest,
"from_args",
@@ -202,21 +172,16 @@ class TestWebsiteCrawlStatusApi:
)
with pytest.raises(WebsiteCrawlError, match="invalid provider"):
method(api, job_id)
method(api, req_data, job_id)
def test_get_status_service_error(self, app: Flask, mocker: MockerFixture):
api = WebsiteCrawlStatusApi()
method = unwrap(api.get)
job_id = "job-123"
args = {"provider": "firecrawl"}
req_data = WebsiteCrawlStatusQuery.model_validate({"provider": "firecrawl"})
with app.test_request_context("/?provider=firecrawl"):
mocker.patch(
"controllers.console.datasets.website.request.args.to_dict",
return_value=args,
)
mock_request = Mock(spec=WebsiteCrawlStatusApiRequest)
mocker.patch.object(
WebsiteCrawlStatusApiRequest,
@@ -231,4 +196,4 @@ class TestWebsiteCrawlStatusApi:
)
with pytest.raises(WebsiteCrawlError, match="status lookup failed"):
method(api, job_id)
method(api, req_data, job_id)