server/comments: add comment retrieving
This commit is contained in:
parent
10f8f443f1
commit
b75cfff8f7
26
API.md
26
API.md
|
@ -42,7 +42,7 @@
|
||||||
- ~~Listing comments~~
|
- ~~Listing comments~~
|
||||||
- [Creating comment](#creating-comment)
|
- [Creating comment](#creating-comment)
|
||||||
- [Updating comment](#updating-comment)
|
- [Updating comment](#updating-comment)
|
||||||
- ~~Getting comment~~
|
- [Getting comment](#getting-comment)
|
||||||
- [Deleting comment](#deleting-comment)
|
- [Deleting comment](#deleting-comment)
|
||||||
- ~~Rating comment~~
|
- ~~Rating comment~~
|
||||||
- Users
|
- Users
|
||||||
|
@ -740,6 +740,30 @@ data.
|
||||||
Updates an existing comment text.
|
Updates an existing comment text.
|
||||||
|
|
||||||
|
|
||||||
|
## Getting comment
|
||||||
|
- **Request**
|
||||||
|
|
||||||
|
`GET /comment/<id>`
|
||||||
|
|
||||||
|
- **Output**
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"comment": <comment>
|
||||||
|
}
|
||||||
|
```
|
||||||
|
...where `<comment>` is a [comment resource](#comment).
|
||||||
|
|
||||||
|
- **Errors**
|
||||||
|
|
||||||
|
- the comment does not exist
|
||||||
|
- privileges are too low
|
||||||
|
|
||||||
|
- **Description**
|
||||||
|
|
||||||
|
Retrieves information about an existing comment.
|
||||||
|
|
||||||
|
|
||||||
## Deleting comment
|
## Deleting comment
|
||||||
- **Request**
|
- **Request**
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,12 @@ class CommentListApi(BaseApi):
|
||||||
|
|
||||||
class CommentDetailApi(BaseApi):
|
class CommentDetailApi(BaseApi):
|
||||||
def get(self, ctx, comment_id):
|
def get(self, ctx, comment_id):
|
||||||
raise NotImplementedError()
|
auth.verify_privilege(ctx.user, 'comments:view')
|
||||||
|
comment = comments.get_comment_by_id(comment_id)
|
||||||
|
if not comment:
|
||||||
|
raise comments.CommentNotFoundError(
|
||||||
|
'Comment %r not found.' % comment_id)
|
||||||
|
return {'comment': comments.serialize_comment(comment, ctx.user)}
|
||||||
|
|
||||||
def put(self, ctx, comment_id):
|
def put(self, ctx, comment_id):
|
||||||
comment = comments.get_comment_by_id(comment_id)
|
comment = comments.get_comment_by_id(comment_id)
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
import datetime
|
||||||
|
import pytest
|
||||||
|
from szurubooru import api, db, errors
|
||||||
|
from szurubooru.func import util, comments
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def test_ctx(context_factory, config_injector, user_factory, comment_factory):
|
||||||
|
config_injector({
|
||||||
|
'privileges': {
|
||||||
|
'comments:list': 'regular_user',
|
||||||
|
'comments:view': 'regular_user',
|
||||||
|
},
|
||||||
|
'thumbnails': {'avatar_width': 200},
|
||||||
|
'ranks': ['anonymous', 'regular_user', 'mod', 'admin'],
|
||||||
|
'rank_names': {'regular_user': 'Peasant'},
|
||||||
|
})
|
||||||
|
ret = util.dotdict()
|
||||||
|
ret.context_factory = context_factory
|
||||||
|
ret.user_factory = user_factory
|
||||||
|
ret.comment_factory = comment_factory
|
||||||
|
ret.detail_api = api.CommentDetailApi()
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def test_retrieving_single(test_ctx):
|
||||||
|
comment = test_ctx.comment_factory(text='dummy text')
|
||||||
|
db.session.add(comment)
|
||||||
|
db.session.flush()
|
||||||
|
result = test_ctx.detail_api.get(
|
||||||
|
test_ctx.context_factory(
|
||||||
|
user=test_ctx.user_factory(rank='regular_user')),
|
||||||
|
comment.comment_id)
|
||||||
|
assert 'comment' in result
|
||||||
|
assert 'id' in result['comment']
|
||||||
|
assert 'lastEditTime' in result['comment']
|
||||||
|
assert 'creationTime' in result['comment']
|
||||||
|
assert 'text' in result['comment']
|
||||||
|
assert 'user' in result['comment']
|
||||||
|
assert 'name' in result['comment']['user']
|
||||||
|
assert 'post' in result['comment']
|
||||||
|
assert 'id' in result['comment']['post']
|
||||||
|
|
||||||
|
def test_trying_to_retrieve_single_non_existing(test_ctx):
|
||||||
|
with pytest.raises(comments.CommentNotFoundError):
|
||||||
|
test_ctx.detail_api.get(
|
||||||
|
test_ctx.context_factory(
|
||||||
|
user=test_ctx.user_factory(rank='regular_user')),
|
||||||
|
5)
|
||||||
|
|
||||||
|
def test_trying_to_retrieve_single_without_privileges(test_ctx):
|
||||||
|
with pytest.raises(errors.AuthError):
|
||||||
|
test_ctx.detail_api.get(
|
||||||
|
test_ctx.context_factory(
|
||||||
|
user=test_ctx.user_factory(rank='anonymous')),
|
||||||
|
5)
|
|
@ -47,7 +47,6 @@ def test_retrieving_single(test_ctx):
|
||||||
db.session.add(test_ctx.tag_factory(names=['tag']))
|
db.session.add(test_ctx.tag_factory(names=['tag']))
|
||||||
result = test_ctx.detail_api.get(
|
result = test_ctx.detail_api.get(
|
||||||
test_ctx.context_factory(
|
test_ctx.context_factory(
|
||||||
input={'query': '', 'page': 1},
|
|
||||||
user=test_ctx.user_factory(rank='regular_user')),
|
user=test_ctx.user_factory(rank='regular_user')),
|
||||||
'tag')
|
'tag')
|
||||||
assert result == {
|
assert result == {
|
||||||
|
@ -66,7 +65,6 @@ def test_trying_to_retrieve_single_non_existing(test_ctx):
|
||||||
with pytest.raises(tags.TagNotFoundError):
|
with pytest.raises(tags.TagNotFoundError):
|
||||||
test_ctx.detail_api.get(
|
test_ctx.detail_api.get(
|
||||||
test_ctx.context_factory(
|
test_ctx.context_factory(
|
||||||
input={'query': '', 'page': 1},
|
|
||||||
user=test_ctx.user_factory(rank='regular_user')),
|
user=test_ctx.user_factory(rank='regular_user')),
|
||||||
'-')
|
'-')
|
||||||
|
|
||||||
|
@ -74,6 +72,5 @@ def test_trying_to_retrieve_single_without_privileges(test_ctx):
|
||||||
with pytest.raises(errors.AuthError):
|
with pytest.raises(errors.AuthError):
|
||||||
test_ctx.detail_api.get(
|
test_ctx.detail_api.get(
|
||||||
test_ctx.context_factory(
|
test_ctx.context_factory(
|
||||||
input={'query': '', 'page': 1},
|
|
||||||
user=test_ctx.user_factory(rank='anonymous')),
|
user=test_ctx.user_factory(rank='anonymous')),
|
||||||
'-')
|
'-')
|
||||||
|
|
|
@ -46,7 +46,6 @@ def test_retrieving_single(test_ctx):
|
||||||
db.session.add(test_ctx.user_factory(name='u1', rank='regular_user'))
|
db.session.add(test_ctx.user_factory(name='u1', rank='regular_user'))
|
||||||
result = test_ctx.detail_api.get(
|
result = test_ctx.detail_api.get(
|
||||||
test_ctx.context_factory(
|
test_ctx.context_factory(
|
||||||
input={'query': '', 'page': 1},
|
|
||||||
user=test_ctx.user_factory(rank='regular_user')),
|
user=test_ctx.user_factory(rank='regular_user')),
|
||||||
'u1')
|
'u1')
|
||||||
assert result == {
|
assert result == {
|
||||||
|
@ -66,7 +65,6 @@ def test_trying_to_retrieve_single_non_existing(test_ctx):
|
||||||
with pytest.raises(users.UserNotFoundError):
|
with pytest.raises(users.UserNotFoundError):
|
||||||
test_ctx.detail_api.get(
|
test_ctx.detail_api.get(
|
||||||
test_ctx.context_factory(
|
test_ctx.context_factory(
|
||||||
input={'query': '', 'page': 1},
|
|
||||||
user=test_ctx.user_factory(rank='regular_user')),
|
user=test_ctx.user_factory(rank='regular_user')),
|
||||||
'-')
|
'-')
|
||||||
|
|
||||||
|
@ -74,6 +72,5 @@ def test_trying_to_retrieve_single_without_privileges(test_ctx):
|
||||||
with pytest.raises(errors.AuthError):
|
with pytest.raises(errors.AuthError):
|
||||||
test_ctx.detail_api.get(
|
test_ctx.detail_api.get(
|
||||||
test_ctx.context_factory(
|
test_ctx.context_factory(
|
||||||
input={'query': '', 'page': 1},
|
|
||||||
user=test_ctx.user_factory(rank='anonymous')),
|
user=test_ctx.user_factory(rank='anonymous')),
|
||||||
'-')
|
'-')
|
||||||
|
|
Loading…
Reference in New Issue