Skip to content

Commit d64a4b0

Browse files
author
Yuki I
committed
fix(ledger): correct response format for /ledger/get-write-ledgers endpoint
- Wrap response in key to match OpenAPI schema - Add unit tests for single/multi-ledger scenarios - Validate schema compliance in tests Fixes openwallet-foundation#3612 Signed-off-by: Yuki I <omoge.real@gmail.com>
1 parent cbf53d3 commit d64a4b0

File tree

2 files changed

+60
-2
lines changed

2 files changed

+60
-2
lines changed

acapy_agent/ledger/routes.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -711,9 +711,9 @@ async def get_write_ledgers(request: web.BaseRequest):
711711
async with context.profile.session() as session:
712712
multiledger_mgr = session.inject_or(BaseMultipleLedgerManager)
713713
if not multiledger_mgr:
714-
return web.json_response(["default"])
714+
return web.json_response({"write_ledgers": ["default"]})
715715
available_write_ledgers = await multiledger_mgr.get_write_ledgers()
716-
return web.json_response(available_write_ledgers)
716+
return web.json_response({"write_ledgers": available_write_ledgers})
717717

718718

719719
@docs(tags=["ledger"], summary="Fetch the current write ledger")

acapy_agent/ledger/tests/test_routes.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
from typing import Optional
23
from unittest import IsolatedAsyncioTestCase
34

@@ -8,6 +9,8 @@
89
from ...ledger.multiple_ledger.ledger_requests_executor import (
910
IndyLedgerRequestsExecutor,
1011
)
12+
from ...ledger.multiple_ledger.ledger_config_schema import ConfigurableWriteLedgersSchema
13+
1114
from ...multitenant.base import BaseMultitenantManager
1215
from ...multitenant.manager import MultitenantManager
1316
from ...tests import mock
@@ -865,3 +868,58 @@ async def test_get_ledger_config(self):
865868
async def test_get_ledger_config_x(self):
866869
with self.assertRaises(test_module.web.HTTPForbidden):
867870
await test_module.get_ledger_config(self.request)
871+
872+
# Multiple Ledgers Configured
873+
async def test_get_write_ledgers_multiple(self):
874+
# Mock the multiple ledger manager
875+
mock_manager = mock.MagicMock(BaseMultipleLedgerManager)
876+
mock_manager.get_write_ledgers = mock.CoroutineMock(
877+
return_value=["ledger1", "ledger2", "ledger3"]
878+
)
879+
self.profile.context.injector.bind_instance(
880+
BaseMultipleLedgerManager, mock_manager
881+
)
882+
883+
with mock.patch.object(
884+
test_module.web, "json_response", mock.Mock()
885+
) as json_response:
886+
result = await test_module.get_write_ledgers(self.request)
887+
888+
# Assert the response matches the expected structure
889+
json_response.assert_called_once_with(
890+
{"write_ledgers": ["ledger1", "ledger2", "ledger3"]}
891+
)
892+
assert result is json_response.return_value
893+
894+
# Single Ledger (No Multi-Ledger Manager)
895+
async def test_get_write_ledgers_single(self):
896+
# Ensure no multi-ledger manager is bound
897+
self.profile.context.injector.clear_binding(BaseMultipleLedgerManager)
898+
899+
result = await test_module.get_write_ledgers(self.request)
900+
901+
# Extract the JSON body from the response
902+
response_body = result.text
903+
response_body = json.loads(response_body)
904+
905+
# Assert the response is correct
906+
self.assertEqual(response_body, {"write_ledgers": ["default"]})
907+
908+
# Schema Validation
909+
async def test_get_write_ledgers_schema(self):
910+
# Mock the multiple ledger manager
911+
mock_manager = mock.MagicMock(BaseMultipleLedgerManager)
912+
mock_manager.get_write_ledgers = mock.CoroutineMock(
913+
return_value=["ledger1", "ledger2"]
914+
)
915+
self.profile.context.injector.bind_instance(
916+
BaseMultipleLedgerManager, mock_manager
917+
)
918+
919+
response = await test_module.get_write_ledgers(self.request)
920+
921+
# Validate against the schema
922+
schema = ConfigurableWriteLedgersSchema()
923+
data = json.loads(response.body)
924+
validated = schema.validate(data)
925+
assert validated == {}

0 commit comments

Comments
 (0)