add test coverage for driver dict in RPC

This commit is contained in:
Matt Hauff 2022-04-22 12:46:54 -07:00 committed by Amine Khaldi
parent 20aa9b3476
commit 2d8d5c785d
No known key found for this signature in database
GPG Key ID: B1C074FFC904E2D9
3 changed files with 29 additions and 12 deletions

View File

@ -920,24 +920,26 @@ class WalletRpcApi:
offer: Dict[str, int] = request["offer"]
fee: uint64 = uint64(request.get("fee", 0))
validate_only: bool = request.get("validate_only", False)
driver_dict_str: Optional[Dict[str, str]] = request.get("driver_dict", None)
driver_dict_str: Optional[Dict[str, Any]] = request.get("driver_dict", None)
# This driver_dict construction is to maintain backward compatibility where everything is assumed to be a CAT
driver_dict: Dict[bytes32, PuzzleInfo] = {}
if driver_dict_str is None:
for key in offer:
if len(key) == 64:
asset_id = bytes32.from_hexstr(key)
driver_dict[asset_id] = PuzzleInfo({"type": AssetType.CAT, "tail": asset_id})
driver_dict[bytes32.from_hexstr(key)] = PuzzleInfo(
{"type": AssetType.CAT.value, "tail": "0x" + key}
)
else:
for key, value in driver_dict_str:
cast_type_driver_dict = driver_dict_str[key]
cast_type_driver_dict["type"] = AssetType(cast_type_driver_dict["type"])
driver_dict[bytes32.from_hexstr(key)] = PuzzleInfo(cast_type_driver_dict)
for key, value in driver_dict_str.items():
driver_dict[bytes32.from_hexstr(key)] = PuzzleInfo(value)
modified_offer = {}
for key in offer:
modified_offer[int(key)] = offer[key]
if len(key) == 64:
modified_offer[bytes32.from_hexstr(key)] = offer[key]
else:
modified_offer[int(key)] = offer[key]
async with self.service.wallet_state_manager.lock:
(

View File

@ -420,13 +420,24 @@ class WalletRpcClient(RpcClient):
# Offers
async def create_offer_for_ids(
self, offer_dict: Dict[uint32, int], fee=uint64(0), validate_only: bool = False
self,
offer_dict: Dict[uint32, int],
driver_dict: Dict[str, Any] = None,
fee=uint64(0),
validate_only: bool = False,
) -> Tuple[Optional[Offer], TradeRecord]:
send_dict: Dict[str, int] = {}
for key in offer_dict:
send_dict[str(key)] = offer_dict[key]
res = await self.fetch("create_offer_for_ids", {"offer": send_dict, "validate_only": validate_only, "fee": fee})
req = {
"offer": send_dict,
"validate_only": validate_only,
"fee": fee,
}
if driver_dict is not None:
req["driver_dict"] = driver_dict
res = await self.fetch("create_offer_for_ids", req)
offer: Optional[Offer] = None if validate_only else Offer.from_bech32(res["offer"])
offer_str: str = "" if offer is None else bytes(offer).hex()
return offer, TradeRecord.from_json_dict_convenience(res["trade_record"], offer_str)

View File

@ -677,12 +677,16 @@ async def test_offer_endpoints(wallet_rpc_environment: WalletRpcTestEnvironment)
await farm_transaction(full_node_api, wallet_node, spend_bundle)
# Create an offer of 5 chia for one CAT
offer, trade_record = await client.create_offer_for_ids({uint32(1): -5, cat_0_id: 1}, validate_only=True)
offer, trade_record = await client.create_offer_for_ids({uint32(1): -5, col.hex(): 1}, validate_only=True)
all_offers = await client.get_all_offers()
assert len(all_offers) == 0
assert offer is None
offer, trade_record = await client.create_offer_for_ids({uint32(1): -5, cat_0_id: 1}, fee=uint64(1))
offer, trade_record = await client.create_offer_for_ids(
{uint32(1): -5, col.hex(): 1},
driver_dict={col.hex(): {"type": "CAT", "tail": "0x" + col.hex()}},
fee=uint64(1),
)
assert offer is not None
col = await client.get_cat_asset_id(cat_0_id)