mirror of
https://github.com/langgenius/dify.git
synced 2026-09-08 02:43:49 +08:00
test: use sqlite3 session in test_remote_retrieval (#38748)
This commit is contained in:
parent
57f325df27
commit
0cea67e72d
@ -1,12 +1,21 @@
|
|||||||
|
from collections.abc import Iterator
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
|
from sqlalchemy import Engine
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from services.recommend_app.recommend_app_type import RecommendAppType
|
from services.recommend_app.recommend_app_type import RecommendAppType
|
||||||
from services.recommend_app.remote.remote_retrieval import RemoteRecommendAppRetrieval
|
from services.recommend_app.remote.remote_retrieval import RemoteRecommendAppRetrieval
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def empty_sqlite_session(sqlite_engine: Engine) -> Iterator[Session]:
|
||||||
|
with Session(sqlite_engine) as session:
|
||||||
|
yield session
|
||||||
|
|
||||||
|
|
||||||
class TestRemoteRecommendAppRetrieval:
|
class TestRemoteRecommendAppRetrieval:
|
||||||
def test_get_type(self):
|
def test_get_type(self):
|
||||||
assert RemoteRecommendAppRetrieval().get_type() == RecommendAppType.REMOTE
|
assert RemoteRecommendAppRetrieval().get_type() == RecommendAppType.REMOTE
|
||||||
@ -16,10 +25,11 @@ class TestRemoteRecommendAppRetrieval:
|
|||||||
"fetch_recommended_app_detail_from_dify_official",
|
"fetch_recommended_app_detail_from_dify_official",
|
||||||
return_value={"id": "app-1"},
|
return_value={"id": "app-1"},
|
||||||
)
|
)
|
||||||
def test_get_recommend_app_detail_success(self, mock_fetch):
|
def test_get_recommend_app_detail_success(self, mock_fetch, empty_sqlite_session: Session):
|
||||||
result = RemoteRecommendAppRetrieval().get_recommend_app_detail("app-1", session=MagicMock())
|
result = RemoteRecommendAppRetrieval().get_recommend_app_detail("app-1", session=empty_sqlite_session)
|
||||||
assert result == {"id": "app-1"}
|
assert result == {"id": "app-1"}
|
||||||
mock_fetch.assert_called_once_with("app-1")
|
mock_fetch.assert_called_once_with("app-1")
|
||||||
|
assert not empty_sqlite_session.in_transaction()
|
||||||
|
|
||||||
@patch(
|
@patch(
|
||||||
"services.recommend_app.remote.remote_retrieval"
|
"services.recommend_app.remote.remote_retrieval"
|
||||||
@ -31,19 +41,25 @@ class TestRemoteRecommendAppRetrieval:
|
|||||||
"fetch_recommended_app_detail_from_dify_official",
|
"fetch_recommended_app_detail_from_dify_official",
|
||||||
side_effect=ConnectionError("timeout"),
|
side_effect=ConnectionError("timeout"),
|
||||||
)
|
)
|
||||||
def test_get_recommend_app_detail_falls_back_on_error(self, mock_fetch, mock_builtin):
|
def test_get_recommend_app_detail_falls_back_on_error(
|
||||||
result = RemoteRecommendAppRetrieval().get_recommend_app_detail("app-1", session=MagicMock())
|
self, mock_fetch, mock_builtin, empty_sqlite_session: Session
|
||||||
|
):
|
||||||
|
result = RemoteRecommendAppRetrieval().get_recommend_app_detail("app-1", session=empty_sqlite_session)
|
||||||
assert result == {"id": "fallback"}
|
assert result == {"id": "fallback"}
|
||||||
mock_builtin.assert_called_once_with("app-1")
|
mock_builtin.assert_called_once_with("app-1")
|
||||||
|
assert not empty_sqlite_session.in_transaction()
|
||||||
|
|
||||||
@patch.object(
|
@patch.object(
|
||||||
RemoteRecommendAppRetrieval,
|
RemoteRecommendAppRetrieval,
|
||||||
"fetch_recommended_apps_from_dify_official",
|
"fetch_recommended_apps_from_dify_official",
|
||||||
return_value={"recommended_apps": [], "categories": []},
|
return_value={"recommended_apps": [], "categories": []},
|
||||||
)
|
)
|
||||||
def test_get_recommended_apps_success(self, mock_fetch):
|
def test_get_recommended_apps_success(self, mock_fetch, empty_sqlite_session: Session):
|
||||||
result = RemoteRecommendAppRetrieval().get_recommended_apps_and_categories("en-US", session=MagicMock())
|
result = RemoteRecommendAppRetrieval().get_recommended_apps_and_categories(
|
||||||
|
"en-US", session=empty_sqlite_session
|
||||||
|
)
|
||||||
assert result == {"recommended_apps": [], "categories": []}
|
assert result == {"recommended_apps": [], "categories": []}
|
||||||
|
assert not empty_sqlite_session.in_transaction()
|
||||||
|
|
||||||
@patch(
|
@patch(
|
||||||
"services.recommend_app.remote.remote_retrieval"
|
"services.recommend_app.remote.remote_retrieval"
|
||||||
@ -55,20 +71,24 @@ class TestRemoteRecommendAppRetrieval:
|
|||||||
"fetch_recommended_apps_from_dify_official",
|
"fetch_recommended_apps_from_dify_official",
|
||||||
side_effect=ValueError("server error"),
|
side_effect=ValueError("server error"),
|
||||||
)
|
)
|
||||||
def test_get_recommended_apps_falls_back_on_error(self, mock_fetch, mock_builtin):
|
def test_get_recommended_apps_falls_back_on_error(self, mock_fetch, mock_builtin, empty_sqlite_session: Session):
|
||||||
result = RemoteRecommendAppRetrieval().get_recommended_apps_and_categories("en-US", session=MagicMock())
|
result = RemoteRecommendAppRetrieval().get_recommended_apps_and_categories(
|
||||||
|
"en-US", session=empty_sqlite_session
|
||||||
|
)
|
||||||
assert result == {"recommended_apps": [{"id": "builtin"}]}
|
assert result == {"recommended_apps": [{"id": "builtin"}]}
|
||||||
|
assert not empty_sqlite_session.in_transaction()
|
||||||
|
|
||||||
@patch.object(
|
@patch.object(
|
||||||
RemoteRecommendAppRetrieval,
|
RemoteRecommendAppRetrieval,
|
||||||
"fetch_learn_dify_apps_from_dify_official",
|
"fetch_learn_dify_apps_from_dify_official",
|
||||||
return_value={"recommended_apps": [{"id": "learn-dify-app"}]},
|
return_value={"recommended_apps": [{"id": "learn-dify-app"}]},
|
||||||
)
|
)
|
||||||
def test_get_learn_dify_apps_success(self, mock_fetch):
|
def test_get_learn_dify_apps_success(self, mock_fetch, empty_sqlite_session: Session):
|
||||||
result = RemoteRecommendAppRetrieval().get_learn_dify_apps("en-US", session=MagicMock())
|
result = RemoteRecommendAppRetrieval().get_learn_dify_apps("en-US", session=empty_sqlite_session)
|
||||||
|
|
||||||
assert result == {"recommended_apps": [{"id": "learn-dify-app"}]}
|
assert result == {"recommended_apps": [{"id": "learn-dify-app"}]}
|
||||||
mock_fetch.assert_called_once_with("en-US")
|
mock_fetch.assert_called_once_with("en-US")
|
||||||
|
assert not empty_sqlite_session.in_transaction()
|
||||||
|
|
||||||
@patch(
|
@patch(
|
||||||
"services.recommend_app.remote.remote_retrieval.DatabaseRecommendAppRetrieval.fetch_learn_dify_apps_from_db",
|
"services.recommend_app.remote.remote_retrieval.DatabaseRecommendAppRetrieval.fetch_learn_dify_apps_from_db",
|
||||||
@ -79,13 +99,14 @@ class TestRemoteRecommendAppRetrieval:
|
|||||||
"fetch_learn_dify_apps_from_dify_official",
|
"fetch_learn_dify_apps_from_dify_official",
|
||||||
side_effect=ValueError("server error"),
|
side_effect=ValueError("server error"),
|
||||||
)
|
)
|
||||||
def test_get_learn_dify_apps_falls_back_to_database_on_error(self, mock_fetch, mock_database):
|
def test_get_learn_dify_apps_falls_back_to_database_on_error(
|
||||||
session = MagicMock()
|
self, mock_fetch, mock_database, empty_sqlite_session: Session
|
||||||
|
):
|
||||||
result = RemoteRecommendAppRetrieval().get_learn_dify_apps("en-US", session=session)
|
result = RemoteRecommendAppRetrieval().get_learn_dify_apps("en-US", session=empty_sqlite_session)
|
||||||
|
|
||||||
assert result == {"recommended_apps": [{"id": "db-fallback"}]}
|
assert result == {"recommended_apps": [{"id": "db-fallback"}]}
|
||||||
mock_database.assert_called_once_with("en-US", session=session)
|
mock_database.assert_called_once_with("en-US", session=empty_sqlite_session)
|
||||||
|
assert not empty_sqlite_session.in_transaction()
|
||||||
|
|
||||||
|
|
||||||
class TestFetchFromDifyOfficial:
|
class TestFetchFromDifyOfficial:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user