from flask import Flask


def test_datasource_list_never_serializes_credentials(monkeypatch):
    from app.api.data_source import routes
    from app.core.data_source.models import DataSourceDefinition
    from app.core.data_source.service import DataSourceService

    class FakeService:
        serialize = staticmethod(DataSourceService.serialize)

        def list(self, _payload):
            return [
                DataSourceDefinition(
                    uid="01900000-0000-7000-8000-000000000010",
                    name_en="warehouse",
                    database_type="postgresql",
                    host="db",
                    port=5432,
                    database="analytics",
                    credential_ref="credential-id",
                    credential_version=2,
                )
            ]

    monkeypatch.setattr(routes, "get_data_source_service", FakeService)
    app = Flask(__name__)

    with app.test_request_context("/api/datasource/list", method="POST", json={}):
        result = routes.data_source_list()
        response = result[0] if isinstance(result, tuple) else result

    text = response.get_data(as_text=True).lower()
    body = response.get_json()["data"]["data_source"][0]

    assert "password" not in text
    assert "username" not in text
    assert "encrypted_payload" not in text
    assert "credential_ref" not in text
    assert body["credential_configured"] is True
