fix comment tests and json generat
This commit is contained in:
parent
ccb250b410
commit
4905e65f14
2 changed files with 71 additions and 65 deletions
|
@ -13,6 +13,7 @@ from lbry.extras.cli import set_kwargs, get_argument_parser
|
||||||
from lbry.extras.daemon.daemon import (
|
from lbry.extras.daemon.daemon import (
|
||||||
Daemon, jsonrpc_dumps_pretty, encode_pagination_doc
|
Daemon, jsonrpc_dumps_pretty, encode_pagination_doc
|
||||||
)
|
)
|
||||||
|
from tests.integration.other.test_comment_commands import MockedCommentServer
|
||||||
from lbry.extras.daemon.json_response_encoder import (
|
from lbry.extras.daemon.json_response_encoder import (
|
||||||
encode_tx_doc, encode_txo_doc, encode_account_doc, encode_file_doc,
|
encode_tx_doc, encode_txo_doc, encode_account_doc, encode_file_doc,
|
||||||
encode_wallet_doc
|
encode_wallet_doc
|
||||||
|
@ -66,6 +67,10 @@ class Examples(CommandTestCase):
|
||||||
|
|
||||||
async def asyncSetUp(self):
|
async def asyncSetUp(self):
|
||||||
await super().asyncSetUp()
|
await super().asyncSetUp()
|
||||||
|
self.daemon.conf.comment_server = 'http://localhost:2903/api'
|
||||||
|
self.comment_server = MockedCommentServer(2903)
|
||||||
|
await self.comment_server.start()
|
||||||
|
self.addCleanup(self.comment_server.stop)
|
||||||
self.recorder = ExampleRecorder(self)
|
self.recorder = ExampleRecorder(self)
|
||||||
|
|
||||||
async def play(self):
|
async def play(self):
|
||||||
|
|
|
@ -2,6 +2,7 @@ import re
|
||||||
import time
|
import time
|
||||||
import typing
|
import typing
|
||||||
from math import ceil
|
from math import ceil
|
||||||
|
import secrets
|
||||||
|
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
|
|
||||||
|
@ -50,7 +51,7 @@ class MockedCommentServer:
|
||||||
self.server = None
|
self.server = None
|
||||||
self.comments = []
|
self.comments = []
|
||||||
self.reacts = {}
|
self.reacts = {}
|
||||||
self.comment_id = 0
|
self.index = 0
|
||||||
self.react_id = 0
|
self.react_id = 0
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -66,14 +67,15 @@ class MockedCommentServer:
|
||||||
return schema
|
return schema
|
||||||
|
|
||||||
def create_comment(self, claim_id=None, parent_id=None, channel_name=None, channel_id=None, **kwargs):
|
def create_comment(self, claim_id=None, parent_id=None, channel_name=None, channel_id=None, **kwargs):
|
||||||
comment_id = self.comment_id
|
comment_id = secrets.token_hex(64)
|
||||||
channel_url = 'lbry://' + channel_name + '#' + channel_id if channel_id else None
|
channel_url = 'lbry://' + channel_name + '#' + channel_id if channel_id else None
|
||||||
|
|
||||||
if parent_id:
|
if parent_id:
|
||||||
claim_id = self.comments[self.get_comment_id(parent_id)]['claim_id']
|
parent_comment = list(filter(lambda c: c['comment_id'] == parent_id, self.comments))[0]
|
||||||
|
claim_id = parent_comment['claim_id']
|
||||||
|
|
||||||
comment = self._create_comment(
|
comment = self._create_comment(
|
||||||
comment_id=str(comment_id),
|
comment_id=comment_id,
|
||||||
channel_name=channel_name,
|
channel_name=channel_name,
|
||||||
channel_id=channel_id,
|
channel_id=channel_id,
|
||||||
channel_url=channel_url,
|
channel_url=channel_url,
|
||||||
|
@ -83,15 +85,14 @@ class MockedCommentServer:
|
||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
self.comments.append(comment)
|
self.comments.append(comment)
|
||||||
self.comment_id += 1
|
|
||||||
return self.clean(comment)
|
return self.clean(comment)
|
||||||
|
|
||||||
def abandon_comment(self, comment_id: int, channel_id: str, **kwargs):
|
def abandon_comment(self, comment_id: str, channel_id: str, **kwargs):
|
||||||
deleted = False
|
deleted = False
|
||||||
comment_id = self.get_comment_id(comment_id)
|
index = self.get_index_for_comment_id(comment_id)
|
||||||
try:
|
try:
|
||||||
if self.comments[comment_id]['channel_id'] == channel_id:
|
if index >= 0:
|
||||||
self.comments.pop(comment_id)
|
self.comments.pop(index)
|
||||||
deleted = True
|
deleted = True
|
||||||
finally:
|
finally:
|
||||||
return {
|
return {
|
||||||
|
@ -100,42 +101,41 @@ class MockedCommentServer:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def edit_comment(self, comment_id: typing.Union[str, int], comment: str, channel_id: str,
|
def edit_comment(self, comment_id: str, comment: str, channel_id: str,
|
||||||
channel_name: str, signature: str, signing_ts: str) -> dict:
|
channel_name: str, signature: str, signing_ts: str) -> dict:
|
||||||
edited = False
|
edited = False
|
||||||
if self.credentials_are_valid(channel_id, channel_name, signature, signing_ts) \
|
if self.credentials_are_valid(channel_id, channel_name, signature, signing_ts) \
|
||||||
and self.is_valid_body(comment):
|
and self.is_valid_body(comment):
|
||||||
comment_id = self.get_comment_id(comment_id)
|
index = self.get_index_for_comment_id(comment_id)
|
||||||
if self.comments[comment_id]['channel_id'] == channel_id:
|
if self.comments[index]['channel_id'] == channel_id:
|
||||||
self.comments[comment_id].update({
|
self.comments[index].update({
|
||||||
'comment': comment,
|
'comment': comment,
|
||||||
'signature': signature,
|
'signature': signature,
|
||||||
'signing_ts': signing_ts
|
'signing_ts': signing_ts
|
||||||
})
|
})
|
||||||
edited = True
|
edited = True
|
||||||
|
|
||||||
return self.comments[comment_id] if edited else None
|
return self.comments[index] if edited else None
|
||||||
|
|
||||||
def hide_comment(self, comment_id: typing.Union[int, str], signing_ts: str, signature: str):
|
def hide_comment(self, comment_id: str, signing_ts: str, signature: str):
|
||||||
comment_id = self.get_comment_id(comment_id)
|
|
||||||
if self.is_signable(signature, signing_ts):
|
if self.is_signable(signature, signing_ts):
|
||||||
self.comments[comment_id]['is_hidden'] = True
|
self.comments[self.get_index_for_comment_id(comment_id)]['is_hidden'] = True
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def pin_comment(
|
def pin_comment(
|
||||||
self,
|
self,
|
||||||
comment_id: typing.Union[int, str],
|
comment_id: str,
|
||||||
channel_name: str, channel_id: str, remove: bool,
|
channel_name: str, channel_id: str, remove: bool,
|
||||||
signing_ts: str, signature: str
|
signing_ts: str, signature: str
|
||||||
):
|
):
|
||||||
comment_id = self.get_comment_id(comment_id)
|
index = self.get_index_for_comment_id(comment_id)
|
||||||
if self.is_signable(signature, signing_ts):
|
if self.is_signable(signature, signing_ts):
|
||||||
if remove:
|
if remove:
|
||||||
self.comments[comment_id]['is_pinned'] = False
|
self.comments[index]['is_pinned'] = False
|
||||||
else:
|
else:
|
||||||
self.comments[comment_id]['is_pinned'] = True
|
self.comments[index]['is_pinned'] = True
|
||||||
return self.comments[comment_id]
|
return self.comments[index]
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def hide_comments(self, pieces: list):
|
def hide_comments(self, pieces: list):
|
||||||
|
@ -164,15 +164,15 @@ class MockedCommentServer:
|
||||||
'has_hidden_comments': bool(list(filter(lambda x: x['is_hidden'], self.comments)))
|
'has_hidden_comments': bool(list(filter(lambda x: x['is_hidden'], self.comments)))
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_comment_channel_by_id(self, comment_id: int, **kwargs):
|
def get_comment_channel_by_id(self, comment_id: str, **kwargs):
|
||||||
comment = self.comments[self.get_comment_id(comment_id)]
|
comment = self.comments[self.get_index_for_comment_id(comment_id)]
|
||||||
return {
|
return {
|
||||||
'channel_id': comment['channel_id'],
|
'channel_id': comment['channel_id'],
|
||||||
'channel_name': comment['channel_name'],
|
'channel_name': comment['channel_name'],
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_comments_by_id(self, comment_ids: list):
|
def get_comments_by_id(self, comment_ids: list):
|
||||||
comments = [self.comments[self.get_comment_id(cid)] for cid in comment_ids]
|
comments = [self.comments[self.get_index_for_comment_id(cid)] for cid in comment_ids]
|
||||||
return {
|
return {
|
||||||
'page': 1,
|
'page': 1,
|
||||||
'page_size': len(comment_ids),
|
'page_size': len(comment_ids),
|
||||||
|
@ -331,17 +331,18 @@ class MockedCommentServer:
|
||||||
return 0 < len(comment) <= 2000
|
return 0 < len(comment) <= 2000
|
||||||
|
|
||||||
def is_valid_comment_id(self, comment_id: typing.Union[int, str]) -> bool:
|
def is_valid_comment_id(self, comment_id: typing.Union[int, str]) -> bool:
|
||||||
if isinstance(comment_id, str) and comment_id.isalnum():
|
if isinstance(comment_id, str):
|
||||||
comment_id = int(comment_id)
|
return True
|
||||||
|
|
||||||
if isinstance(comment_id, int):
|
|
||||||
return 0 <= comment_id < len(self.comments)
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def get_comment_id(self, cid: typing.Union[int, str, any]) -> int:
|
def get_comment_for_id(self, cid: str) -> dict:
|
||||||
if not self.is_valid_comment_id(cid):
|
return list(filter(lambda c: c['comment_id'] == cid, self.comments))[0]
|
||||||
raise ValueError('Comment ID is Invalid')
|
|
||||||
return cid if isinstance(cid, int) else int(cid)
|
def get_index_for_comment_id(self, value: str):
|
||||||
|
for i, dic in enumerate(self.comments):
|
||||||
|
if dic['comment_id'] == value:
|
||||||
|
return i
|
||||||
|
return -1
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def claim_id_is_valid(claim_id: str) -> bool:
|
def claim_id_is_valid(claim_id: str) -> bool:
|
||||||
|
@ -384,7 +385,6 @@ class MockedCommentServer:
|
||||||
(parent_id is None or self.is_valid_comment_id(parent_id))
|
(parent_id is None or self.is_valid_comment_id(parent_id))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CommentCommands(CommandTestCase):
|
class CommentCommands(CommandTestCase):
|
||||||
|
|
||||||
async def asyncSetUp(self):
|
async def asyncSetUp(self):
|
||||||
|
@ -412,7 +412,7 @@ class CommentCommands(CommandTestCase):
|
||||||
self.assertEqual(stream['claim_id'], comments[0]['claim_id'])
|
self.assertEqual(stream['claim_id'], comments[0]['claim_id'])
|
||||||
|
|
||||||
channel2 = (await self.channel_create('@BuffettJimmy'))['outputs'][0]
|
channel2 = (await self.channel_create('@BuffettJimmy'))['outputs'][0]
|
||||||
await self.daemon.jsonrpc_comment_create(
|
comment2 = await self.daemon.jsonrpc_comment_create(
|
||||||
claim_id=stream['claim_id'],
|
claim_id=stream['claim_id'],
|
||||||
channel_name=channel2['name'],
|
channel_name=channel2['name'],
|
||||||
comment='Let\'s all go to Margaritaville',
|
comment='Let\'s all go to Margaritaville',
|
||||||
|
@ -712,7 +712,8 @@ class CommentCommands(CommandTestCase):
|
||||||
claim_id=claim_id,
|
claim_id=claim_id,
|
||||||
channel_id=bee['claim_id']
|
channel_id=bee['claim_id']
|
||||||
)
|
)
|
||||||
all_comments = [second_comment, first_comment]
|
first_comment_id = first_comment['comment_id']
|
||||||
|
second_comment_id = second_comment['comment_id']
|
||||||
comment_list = await self.daemon.jsonrpc_comment_list(claim_id)
|
comment_list = await self.daemon.jsonrpc_comment_list(claim_id)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
{'items', 'page', 'page_size', 'has_hidden_comments', 'total_items', 'total_pages'},
|
{'items', 'page', 'page_size', 'has_hidden_comments', 'total_items', 'total_pages'},
|
||||||
|
@ -721,29 +722,29 @@ class CommentCommands(CommandTestCase):
|
||||||
self.assertEqual(comment_list['total_items'], 2)
|
self.assertEqual(comment_list['total_items'], 2)
|
||||||
|
|
||||||
bee_like_reaction = await self.daemon.jsonrpc_comment_react(
|
bee_like_reaction = await self.daemon.jsonrpc_comment_react(
|
||||||
comment_ids=first_comment['comment_id'],
|
comment_ids=first_comment_id,
|
||||||
channel_id=bee['claim_id'],
|
channel_id=bee['claim_id'],
|
||||||
channel_name=bee['name'],
|
channel_name=bee['name'],
|
||||||
react_type='like',
|
react_type='like',
|
||||||
)
|
)
|
||||||
|
|
||||||
moth_like_reaction = await self.daemon.jsonrpc_comment_react(
|
moth_like_reaction = await self.daemon.jsonrpc_comment_react(
|
||||||
comment_ids=first_comment['comment_id'],
|
comment_ids=first_comment_id,
|
||||||
channel_id=moth['claim_id'],
|
channel_id=moth['claim_id'],
|
||||||
channel_name=moth['name'],
|
channel_name=moth['name'],
|
||||||
react_type='like',
|
react_type='like',
|
||||||
)
|
)
|
||||||
reactions = await self.daemon.jsonrpc_comment_react_list(
|
reactions = await self.daemon.jsonrpc_comment_react_list(
|
||||||
comment_ids=first_comment['comment_id'],
|
comment_ids=first_comment_id,
|
||||||
channel_id=moth['claim_id'],
|
channel_id=moth['claim_id'],
|
||||||
channel_name=moth['name'],
|
channel_name=moth['name'],
|
||||||
)
|
)
|
||||||
# {'my_reactions': {'0': {'like': 1}}, 'others_reactions': {'0': {'like': 1}}}
|
# {'my_reactions': {'0': {'like': 1}}, 'others_reactions': {'0': {'like': 1}}}
|
||||||
self.assertEqual(reactions['my_reactions']['0']['like'], 1)
|
self.assertEqual(reactions['my_reactions'][first_comment_id]['like'], 1)
|
||||||
self.assertEqual(reactions['others_reactions']['0']['like'], 1)
|
self.assertEqual(reactions['others_reactions'][first_comment_id]['like'], 1)
|
||||||
|
|
||||||
bee_dislike_reaction = await self.daemon.jsonrpc_comment_react(
|
bee_dislike_reaction = await self.daemon.jsonrpc_comment_react(
|
||||||
comment_ids=first_comment['comment_id'],
|
comment_ids=first_comment_id,
|
||||||
channel_id=bee['claim_id'],
|
channel_id=bee['claim_id'],
|
||||||
channel_name=bee['name'],
|
channel_name=bee['name'],
|
||||||
react_type='dislike',
|
react_type='dislike',
|
||||||
|
@ -751,30 +752,30 @@ class CommentCommands(CommandTestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
reactions_after_bee_dislikes = await self.daemon.jsonrpc_comment_react_list(
|
reactions_after_bee_dislikes = await self.daemon.jsonrpc_comment_react_list(
|
||||||
comment_ids=first_comment['comment_id'],
|
comment_ids=first_comment_id,
|
||||||
channel_id=moth['claim_id'],
|
channel_id=moth['claim_id'],
|
||||||
channel_name=moth['name'],
|
channel_name=moth['name'],
|
||||||
)
|
)
|
||||||
# {'my_reactions': {'0': {'like': 1, 'dislike', 0}}, 'others_reactions': {'0': {'like': 0, 'dislike': 1}}}
|
# {'my_reactions': {'0': {'like': 1, 'dislike', 0}}, 'others_reactions': {'0': {'like': 0, 'dislike': 1}}}
|
||||||
self.assertEqual(reactions_after_bee_dislikes['my_reactions']['0']['like'], 1)
|
self.assertEqual(reactions_after_bee_dislikes['my_reactions'][first_comment_id]['like'], 1)
|
||||||
self.assertEqual(reactions_after_bee_dislikes['my_reactions']['0']['dislike'], 0)
|
self.assertEqual(reactions_after_bee_dislikes['my_reactions'][first_comment_id]['dislike'], 0)
|
||||||
self.assertEqual(reactions_after_bee_dislikes['others_reactions']['0']['dislike'], 1)
|
self.assertEqual(reactions_after_bee_dislikes['others_reactions'][first_comment_id]['dislike'], 1)
|
||||||
self.assertEqual(reactions_after_bee_dislikes['others_reactions']['0']['like'], 0)
|
self.assertEqual(reactions_after_bee_dislikes['others_reactions'][first_comment_id]['like'], 0)
|
||||||
|
|
||||||
only_likes_after_bee_dislikes = await self.daemon.jsonrpc_comment_react_list(
|
only_likes_after_bee_dislikes = await self.daemon.jsonrpc_comment_react_list(
|
||||||
comment_ids=first_comment['comment_id'],
|
comment_ids=first_comment_id,
|
||||||
channel_id=moth['claim_id'],
|
channel_id=moth['claim_id'],
|
||||||
channel_name=moth['name'],
|
channel_name=moth['name'],
|
||||||
react_types='like',
|
react_types='like',
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(only_likes_after_bee_dislikes['my_reactions']['0']['like'], 1)
|
self.assertEqual(only_likes_after_bee_dislikes['my_reactions'][first_comment_id]['like'], 1)
|
||||||
self.assertEqual(only_likes_after_bee_dislikes['my_reactions']['0']['dislike'], 0)
|
self.assertEqual(only_likes_after_bee_dislikes['my_reactions'][first_comment_id]['dislike'], 0)
|
||||||
self.assertEqual(only_likes_after_bee_dislikes['others_reactions']['0']['dislike'], 0)
|
self.assertEqual(only_likes_after_bee_dislikes['others_reactions'][first_comment_id]['dislike'], 0)
|
||||||
self.assertEqual(only_likes_after_bee_dislikes['others_reactions']['0']['like'], 0)
|
self.assertEqual(only_likes_after_bee_dislikes['others_reactions'][first_comment_id]['like'], 0)
|
||||||
|
|
||||||
bee_un_dislike_reaction = await self.daemon.jsonrpc_comment_react(
|
bee_un_dislike_reaction = await self.daemon.jsonrpc_comment_react(
|
||||||
comment_ids=first_comment['comment_id'],
|
comment_ids=first_comment_id,
|
||||||
channel_id=bee['claim_id'],
|
channel_id=bee['claim_id'],
|
||||||
channel_name=bee['name'],
|
channel_name=bee['name'],
|
||||||
remove=True,
|
remove=True,
|
||||||
|
@ -782,30 +783,30 @@ class CommentCommands(CommandTestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
reactions_after_bee_absconds = await self.daemon.jsonrpc_comment_react_list(
|
reactions_after_bee_absconds = await self.daemon.jsonrpc_comment_react_list(
|
||||||
comment_ids=first_comment['comment_id'],
|
comment_ids=first_comment_id,
|
||||||
channel_id=moth['claim_id'],
|
channel_id=moth['claim_id'],
|
||||||
channel_name=moth['name'],
|
channel_name=moth['name'],
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(reactions_after_bee_absconds['my_reactions']['0']['like'], 1)
|
self.assertEqual(reactions_after_bee_absconds['my_reactions'][first_comment_id]['like'], 1)
|
||||||
self.assertNotIn('dislike', reactions_after_bee_absconds['my_reactions']['0'])
|
self.assertNotIn('dislike', reactions_after_bee_absconds['my_reactions'][first_comment_id])
|
||||||
self.assertEqual(reactions_after_bee_absconds['others_reactions']['0']['like'], 0)
|
self.assertEqual(reactions_after_bee_absconds['others_reactions'][first_comment_id]['like'], 0)
|
||||||
self.assertNotIn('dislike', reactions_after_bee_absconds['others_reactions']['0'])
|
self.assertNotIn('dislike', reactions_after_bee_absconds['others_reactions'][first_comment_id])
|
||||||
|
|
||||||
bee_reacts_to_both_comments = await self.daemon.jsonrpc_comment_react(
|
bee_reacts_to_both_comments = await self.daemon.jsonrpc_comment_react(
|
||||||
comment_ids=first_comment['comment_id'] + ',' + second_comment['comment_id'],
|
comment_ids=first_comment_id + ',' + second_comment_id,
|
||||||
channel_id=bee['claim_id'],
|
channel_id=bee['claim_id'],
|
||||||
channel_name=bee['name'],
|
channel_name=bee['name'],
|
||||||
react_type='frozen_tom',
|
react_type='frozen_tom',
|
||||||
)
|
)
|
||||||
|
|
||||||
reactions_after_double_frozen_tom = await self.daemon.jsonrpc_comment_react_list(
|
reactions_after_double_frozen_tom = await self.daemon.jsonrpc_comment_react_list(
|
||||||
comment_ids=first_comment['comment_id'] + ',' + second_comment['comment_id'],
|
comment_ids=first_comment_id + ',' + second_comment_id,
|
||||||
channel_id=moth['claim_id'],
|
channel_id=moth['claim_id'],
|
||||||
channel_name=moth['name'],
|
channel_name=moth['name'],
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(reactions_after_double_frozen_tom['my_reactions']['0']['like'], 1)
|
self.assertEqual(reactions_after_double_frozen_tom['my_reactions'][first_comment_id]['like'], 1)
|
||||||
self.assertNotIn('dislike', reactions_after_double_frozen_tom['my_reactions']['0'])
|
self.assertNotIn('dislike', reactions_after_double_frozen_tom['my_reactions'][first_comment_id])
|
||||||
self.assertEqual(reactions_after_double_frozen_tom['others_reactions']['0']['frozen_tom'], 1)
|
self.assertEqual(reactions_after_double_frozen_tom['others_reactions'][first_comment_id]['frozen_tom'], 1)
|
||||||
self.assertEqual(reactions_after_double_frozen_tom['others_reactions']['1']['frozen_tom'], 1)
|
self.assertEqual(reactions_after_double_frozen_tom['others_reactions'][second_comment_id]['frozen_tom'], 1)
|
||||||
|
|
Loading…
Reference in a new issue