fixed tests for setting claim values
This commit is contained in:
parent
50721786d2
commit
2007c48af3
2 changed files with 84 additions and 84 deletions
|
@ -2113,7 +2113,9 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
return claim_results
|
return claim_results
|
||||||
|
|
||||||
@requires(WALLET_COMPONENT, conditions=[WALLET_IS_UNLOCKED])
|
@requires(WALLET_COMPONENT, conditions=[WALLET_IS_UNLOCKED])
|
||||||
async def jsonrpc_claim_abandon(self, claim_id=None, txid=None, nout=None, account_id=None, blocking=True):
|
async def jsonrpc_claim_abandon(
|
||||||
|
self, claim_id=None, txid=None, nout=None, account_id=None,
|
||||||
|
preview=False, blocking=True):
|
||||||
"""
|
"""
|
||||||
Abandon a name and reclaim credits from the claim
|
Abandon a name and reclaim credits from the claim
|
||||||
|
|
||||||
|
@ -2121,21 +2123,15 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
claim_abandon [<claim_id> | --claim_id=<claim_id>]
|
claim_abandon [<claim_id> | --claim_id=<claim_id>]
|
||||||
[<txid> | --txid=<txid>] [<nout> | --nout=<nout>]
|
[<txid> | --txid=<txid>] [<nout> | --nout=<nout>]
|
||||||
[--account_id=<account_id>]
|
[--account_id=<account_id>]
|
||||||
[--blocking]
|
[--preview] [--blocking]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--claim_id=<claim_id> : (str) claim_id of the claim to abandon
|
--claim_id=<claim_id> : (str) claim_id of the claim to abandon
|
||||||
--txid=<txid> : (str) txid of the claim to abandon
|
--txid=<txid> : (str) txid of the claim to abandon
|
||||||
--nout=<nout> : (int) nout of the claim to abandon
|
--nout=<nout> : (int) nout of the claim to abandon
|
||||||
--account_id=<account_id> : (str) id of the account to use
|
--account_id=<account_id> : (str) id of the account to use
|
||||||
|
--preview : (bool) do not broadcast the transaction
|
||||||
--blocking : (bool) wait until abandon is in mempool
|
--blocking : (bool) wait until abandon is in mempool
|
||||||
|
|
||||||
Returns:
|
|
||||||
(dict) Dictionary containing result of the claim
|
|
||||||
{
|
|
||||||
success: (bool) True if txn is successful
|
|
||||||
txid : (str) txid of resulting transaction
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
account = self.get_account_or_default(account_id)
|
account = self.get_account_or_default(account_id)
|
||||||
|
|
||||||
|
@ -2151,11 +2147,16 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
raise Exception('No claim found for the specified claim_id or txid:nout')
|
raise Exception('No claim found for the specified claim_id or txid:nout')
|
||||||
|
|
||||||
tx = await Transaction.abandon(claim, [account], account)
|
tx = await Transaction.abandon(claim, [account], account)
|
||||||
await account.ledger.broadcast(tx)
|
|
||||||
await self.analytics_manager.send_claim_action('abandon')
|
if not preview:
|
||||||
if blocking:
|
await account.ledger.broadcast(tx)
|
||||||
await self.ledger.wait(tx)
|
await self.analytics_manager.send_claim_action('abandon')
|
||||||
return {"success": True, "tx": tx}
|
if blocking:
|
||||||
|
await account.ledger.wait(tx)
|
||||||
|
else:
|
||||||
|
await account.ledger.release_tx(tx)
|
||||||
|
|
||||||
|
return tx
|
||||||
|
|
||||||
@requires(WALLET_COMPONENT)
|
@requires(WALLET_COMPONENT)
|
||||||
def jsonrpc_claim_list(self, account_id=None, page=None, page_size=None):
|
def jsonrpc_claim_list(self, account_id=None, page=None, page_size=None):
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import hashlib
|
import hashlib
|
||||||
from binascii import unhexlify
|
from binascii import unhexlify
|
||||||
from unittest import skip
|
|
||||||
|
|
||||||
|
import base64
|
||||||
import ecdsa
|
import ecdsa
|
||||||
|
|
||||||
from lbrynet.wallet.transaction import Transaction, Output
|
from lbrynet.wallet.transaction import Transaction, Output
|
||||||
|
@ -333,95 +333,93 @@ class ClaimCommands(CommandTestCase):
|
||||||
|
|
||||||
async def test_setting_claim_fields(self):
|
async def test_setting_claim_fields(self):
|
||||||
values = {
|
values = {
|
||||||
'title': "Cool Channel",
|
'title': "Cool Content",
|
||||||
'description': "Best channel on LBRY.",
|
'description': "Best content on LBRY.",
|
||||||
'contact_email': "human@email.com",
|
'author': "Jules Verne",
|
||||||
|
'language': "en",
|
||||||
'tags': ["cool", "awesome"],
|
'tags': ["cool", "awesome"],
|
||||||
'cover_url': "https://co.ol/cover.png",
|
'license': 'Public Domain',
|
||||||
'homepage_url': "https://co.ol",
|
'fee_currency': 'usd',
|
||||||
|
'fee_amount': '2.99',
|
||||||
|
'fee_address': 'mmCsWAiXMUVecFQ3fVzUwvpT9XFMXno2Ca',
|
||||||
|
'license_url': "https://co.ol/license",
|
||||||
'thumbnail_url': "https://co.ol/thumbnail.png",
|
'thumbnail_url': "https://co.ol/thumbnail.png",
|
||||||
'language': "en"
|
'release_time': 123456,
|
||||||
|
'video_width': 800,
|
||||||
|
'video_height': 600
|
||||||
}
|
}
|
||||||
|
|
||||||
# create new channel with all fields set
|
# create new channel with all fields set
|
||||||
tx = await self.out(self.create_channel('@bigchannel', **values))
|
tx = await self.out(self.create_claim('big', **values))
|
||||||
txo = tx['outputs'][0]
|
txo = tx['outputs'][0]
|
||||||
self.assertEqual(
|
stream = txo['value']['stream']
|
||||||
txo['value']['channel'],
|
fixed_values = values.copy()
|
||||||
{'public_key': txo['value']['channel']['public_key'], **values}
|
fixed_values['hash'] = stream['hash']
|
||||||
)
|
fixed_values['file'] = stream['file']
|
||||||
|
fixed_values['media_type'] = 'application/octet-stream'
|
||||||
|
fixed_values['release_time'] = str(values['release_time'])
|
||||||
|
fixed_values['fee'] = {
|
||||||
|
'address': base64.b64encode(Base58.decode(fixed_values.pop('fee_address'))).decode(),
|
||||||
|
'amount': fixed_values.pop('fee_amount').replace('.', ''),
|
||||||
|
'currency': fixed_values.pop('fee_currency').upper()
|
||||||
|
}
|
||||||
|
fixed_values['video'] = {
|
||||||
|
'height': fixed_values.pop('video_height'),
|
||||||
|
'width': fixed_values.pop('video_width')
|
||||||
|
}
|
||||||
|
self.assertEqual(stream, fixed_values)
|
||||||
|
|
||||||
# create channel with nothing set
|
# create channel with nothing set
|
||||||
tx = await self.out(self.create_channel('@lightchannel'))
|
tx = await self.out(self.create_claim('light'))
|
||||||
txo = tx['outputs'][0]
|
txo = tx['outputs'][0]
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
txo['value']['channel'],
|
txo['value']['stream'], {
|
||||||
{'public_key': txo['value']['channel']['public_key']}
|
'file': {'size': '3'},
|
||||||
|
'media_type': 'application/octet-stream',
|
||||||
|
'hash': txo['value']['stream']['hash']
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
# create channel with just some tags
|
# create channel with just some tags
|
||||||
tx = await self.out(self.create_channel('@updatedchannel', tags='blah'))
|
tx = await self.out(self.create_claim('updated', tags='blah'))
|
||||||
txo = tx['outputs'][0]
|
txo = tx['outputs'][0]
|
||||||
claim_id = txo['claim_id']
|
claim_id = txo['claim_id']
|
||||||
public_key = txo['value']['channel']['public_key']
|
fixed_values['hash'] = txo['value']['stream']['hash']
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
txo['value']['channel'],
|
txo['value']['stream'], {
|
||||||
{'public_key': public_key, 'tags': ['blah']}
|
'file': {'size': '3'},
|
||||||
|
'media_type': 'application/octet-stream',
|
||||||
|
'hash': fixed_values['hash'],
|
||||||
|
'tags': ['blah']
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
# update channel setting all fields
|
# update channel setting all fields
|
||||||
tx = await self.out(self.update_channel(claim_id, **values))
|
tx = await self.out(self.update_claim(claim_id, **values))
|
||||||
txo = tx['outputs'][0]
|
txo = tx['outputs'][0]
|
||||||
values['public_key'] = public_key
|
fixed_values['tags'].insert(0, 'blah') # existing tag
|
||||||
values['tags'].insert(0, 'blah') # existing tag
|
self.assertEqual(txo['value']['stream'], fixed_values)
|
||||||
self.assertEqual(
|
|
||||||
txo['value']['channel'],
|
|
||||||
values
|
|
||||||
)
|
|
||||||
|
|
||||||
# clearing and settings tags
|
# clearing and settings tags
|
||||||
tx = await self.out(self.update_channel(claim_id, tags='single', clear_tags=True))
|
tx = await self.out(self.update_claim(claim_id, tags='single', clear_tags=True))
|
||||||
txo = tx['outputs'][0]
|
txo = tx['outputs'][0]
|
||||||
values['tags'] = ['single']
|
fixed_values['tags'] = ['single']
|
||||||
self.assertEqual(
|
self.assertEqual(txo['value']['stream'], fixed_values)
|
||||||
txo['value']['channel'],
|
|
||||||
values
|
|
||||||
)
|
|
||||||
|
|
||||||
# reset signing key
|
# send claim to someone else
|
||||||
tx = await self.out(self.update_channel(claim_id, new_signing_key=True))
|
|
||||||
txo = tx['outputs'][0]
|
|
||||||
self.assertNotEqual(
|
|
||||||
txo['value']['channel']['public_key'],
|
|
||||||
values['public_key']
|
|
||||||
)
|
|
||||||
|
|
||||||
# send channel to someone else
|
|
||||||
new_account = await self.daemon.jsonrpc_account_create('second account')
|
new_account = await self.daemon.jsonrpc_account_create('second account')
|
||||||
account2_id, account2 = new_account['id'], self.daemon.get_account_or_error(new_account['id'])
|
account2_id, account2 = new_account['id'], self.daemon.get_account_or_error(new_account['id'])
|
||||||
|
|
||||||
# before sending
|
# before sending
|
||||||
self.assertEqual(len(await self.daemon.jsonrpc_channel_list()), 3)
|
self.assertEqual(len(await self.daemon.jsonrpc_claim_list()), 3)
|
||||||
self.assertEqual(len(await self.daemon.jsonrpc_channel_list(account_id=account2_id)), 0)
|
self.assertEqual(len(await self.daemon.jsonrpc_claim_list(account_id=account2_id)), 0)
|
||||||
|
|
||||||
other_address = await account2.receiving.get_or_create_usable_address()
|
other_address = await account2.receiving.get_or_create_usable_address()
|
||||||
tx = await self.out(self.update_channel(claim_id, claim_address=other_address))
|
tx = await self.out(self.update_claim(claim_id, claim_address=other_address))
|
||||||
|
|
||||||
# after sending
|
# after sending
|
||||||
self.assertEqual(len(await self.daemon.jsonrpc_channel_list()), 2)
|
self.assertEqual(len(await self.daemon.jsonrpc_claim_list()), 2)
|
||||||
self.assertEqual(len(await self.daemon.jsonrpc_channel_list(account_id=account2_id)), 1)
|
self.assertEqual(len(await self.daemon.jsonrpc_claim_list(account_id=account2_id)), 1)
|
||||||
|
|
||||||
# shoud not have private key
|
|
||||||
txo = (await account2.get_channels())[0]
|
|
||||||
self.assertIsNone(txo.private_key)
|
|
||||||
|
|
||||||
# send the private key too
|
|
||||||
txoid = f"{tx['outputs'][0]['txid']}:{tx['outputs'][0]['nout']}"
|
|
||||||
account2.channel_keys[txoid] = self.account.channel_keys[txoid]
|
|
||||||
|
|
||||||
# now should have private key
|
|
||||||
txo = (await account2.get_channels())[0]
|
|
||||||
self.assertIsNotNone(txo.private_key)
|
|
||||||
|
|
||||||
async def test_create_update_and_abandon_claim(self):
|
async def test_create_update_and_abandon_claim(self):
|
||||||
await self.assertBalance(self.account, '10.0')
|
await self.assertBalance(self.account, '10.0')
|
||||||
|
@ -481,25 +479,26 @@ class ClaimCommands(CommandTestCase):
|
||||||
)
|
)
|
||||||
self.assertEqual(not_a_claim, 'claim not found')
|
self.assertEqual(not_a_claim, 'claim not found')
|
||||||
|
|
||||||
@skip
|
async def test_claim_search(self):
|
||||||
async def test_claim_list(self):
|
|
||||||
channel = await self.create_channel('@abc', '1.0')
|
channel = await self.create_channel('@abc', '1.0')
|
||||||
channel_id = channel['outputs'][0]['claim_id']
|
channel_id = channel['outputs'][0]['claim_id']
|
||||||
claim = await self.create_claim('on-channel-claim', '0.0001', channel_id=channel_id)
|
claim = await self.create_claim('on-channel-claim', '0.0001', channel_id=channel_id)
|
||||||
unsigned_claim = await self.create_claim('unsigned', '0.0001')
|
unsigned_claim = await self.create_claim('unsigned', '0.0001')
|
||||||
|
|
||||||
channel_from_claim_list = await self.out(self.daemon.jsonrpc_channel_list('@abc'))
|
channel_from_claim_list = await self.out(self.daemon.jsonrpc_claim_search('@abc'))
|
||||||
self.assertEqual(channel_from_claim_list['claims'][0]['value'], channel['output']['value'])
|
self.assertEqual(channel_from_claim_list['claims'][0]['value'], channel['outputs'][0]['value'])
|
||||||
signed_claim_from_claim_list = await self.out(self.daemon.jsonrpc_claim_list('on-channel-claim'))
|
signed_claim_from_claim_list = await self.out(self.daemon.jsonrpc_claim_search('on-channel-claim'))
|
||||||
self.assertEqual(signed_claim_from_claim_list['claims'][0]['value'], claim['output']['value'])
|
self.assertEqual(signed_claim_from_claim_list['claims'][0]['value'], claim['outputs'][0]['value'])
|
||||||
unsigned_claim_from_claim_list = await self.out(self.daemon.jsonrpc_claim_list('unsigned'))
|
unsigned_claim_from_claim_list = await self.out(self.daemon.jsonrpc_claim_search('unsigned'))
|
||||||
self.assertEqual(unsigned_claim_from_claim_list['claims'][0]['value'], unsigned_claim['output']['value'])
|
self.assertEqual(unsigned_claim_from_claim_list['claims'][0]['value'], unsigned_claim['outputs'][0]['value'])
|
||||||
|
|
||||||
abandon = await self.out(self.daemon.jsonrpc_claim_abandon(txid=channel['tx']['txid'], nout=0, blocking=False))
|
abandon = await self.out(self.daemon.jsonrpc_claim_abandon(txid=channel['txid'], nout=0, blocking=False))
|
||||||
self.assertTrue(abandon['success'])
|
self.assertTrue(abandon['outputs'][0]['txid'], channel['txid'])
|
||||||
await self.confirm_tx(abandon['tx']['txid'])
|
await self.on_transaction_dict(abandon)
|
||||||
|
await self.generate(1)
|
||||||
|
await self.on_transaction_dict(abandon)
|
||||||
|
|
||||||
empty = await self.out(self.daemon.jsonrpc_claim_list('@abc'))
|
empty = await self.out(self.daemon.jsonrpc_claim_search('@abc'))
|
||||||
self.assertEqual(len(empty['claims']), 0)
|
self.assertEqual(len(empty['claims']), 0)
|
||||||
|
|
||||||
async def test_abandoned_channel_with_signed_claims(self):
|
async def test_abandoned_channel_with_signed_claims(self):
|
||||||
|
|
Loading…
Add table
Reference in a new issue