Skip to content
This repository has been archived by the owner on May 31, 2023. It is now read-only.

HOME画面に、レビュー件数(総数)を表示する #235

Merged
merged 9 commits into from
May 23, 2022
Merged
6 changes: 3 additions & 3 deletions bee_slack_app/service/review.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,12 @@ def get_review(*, logger: Any, user_id: str, isbn: str) -> Optional[ReviewConten
return None


def get_reviews(
def get_reviews( # pylint: disable=dangerous-default-value
*,
logger: Any,
conditions: Optional[GetConditions] = None,
limit: int,
keys: list[ReviewItemKey],
limit: Optional[int] = None,
keys: list[ReviewItemKey] = [],
) -> Optional[GetResponse]:
"""
次のlimit分のレビューを取得する
Expand Down
111 changes: 111 additions & 0 deletions bee_slack_app/service/test_review.py
Original file line number Diff line number Diff line change
Expand Up @@ -420,3 +420,114 @@ def test_post_reviewでreview_repositoryの処理でエラーが発生した場
assert mock_review_repository_create.call_count == 1

assert review is None


def test_get_reviewsで条件を指定しない場合はレビューを全件一括で取得できること(monkeypatch):
def mock_review_repository_get_some(_, **__):
return {
"items": [
{
"user_id": "user_id_0",
"book_title": "仕事ではじめる機械学習",
"isbn": "12345",
"score_for_me": "1",
"score_for_others": "5",
"review_comment": "とても良いです",
"book_image_url": "dummy_book_image_url_0",
"book_author": "dummy_book_author_0",
"book_url": "dummy_book_url_0",
},
{
"user_id": "user_id_1",
"book_title": "仕事ではじめる機械学習",
"isbn": "12345",
"score_for_me": "3",
"score_for_others": "4",
"review_comment": "まあまあです",
"book_image_url": "dummy_book_image_url_1",
"book_author": "dummy_book_author_1",
"book_url": "dummy_book_url_1",
},
{
"user_id": "user_id_2",
"book_title": "Python チュートリアル",
"isbn": "67890",
"score_for_me": "2",
"score_for_others": "4",
"review_comment": "そこそこです",
"book_image_url": "dummy_book_image_url_2",
"book_author": "dummy_book_author_2",
"book_url": "dummy_book_url_2",
},
],
"last_key": None,
}

monkeypatch.setattr(ReviewRepository, "get_some", mock_review_repository_get_some)

def mock_user_repository_get_all(_, **__):
return [
{
"user_id": "user_id_0",
"department": "department_0",
"job_type": "job_type_0",
"age_range": "age_range_0",
"updated_at": "2022-04-11T09:23:04+09:00",
"user_name": "user_name_0",
},
{
"user_id": "user_id_1",
"department": "department_1",
"job_type": "job_type_1",
"age_range": "age_range_1",
"updated_at": "2022-04-12T09:23:04+09:00",
"user_name": "user_name_1",
},
{
"user_id": "user_id_2",
"department": "department_2",
"job_type": "job_type_2",
"age_range": "age_range_2",
"updated_at": "2022-04-12T09:23:04+09:00",
"user_name": "user_name_2",
},
]

monkeypatch.setattr(UserRepository, "get_all", mock_user_repository_get_all)

reviews = get_reviews(logger=getLogger(), limit=[], keys=[])["items"]

assert len(reviews) == 3

assert reviews[0]["user_id"] == "user_id_0"
assert reviews[0]["user_name"] == "user_name_0"
assert reviews[0]["isbn"] == "12345"
assert reviews[0]["book_title"] == "仕事ではじめる機械学習"
assert reviews[0]["score_for_me"] == "1"
assert reviews[0]["score_for_others"] == "5"
assert reviews[0]["review_comment"] == "とても良いです"
assert reviews[0]["book_image_url"] == "dummy_book_image_url_0"
assert reviews[0]["book_author"] == "dummy_book_author_0"
assert reviews[0]["book_url"] == "dummy_book_url_0"

assert reviews[1]["user_id"] == "user_id_1"
assert reviews[1]["user_name"] == "user_name_1"
assert reviews[1]["isbn"] == "12345"
assert reviews[1]["book_title"] == "仕事ではじめる機械学習"
assert reviews[1]["score_for_me"] == "3"
assert reviews[1]["score_for_others"] == "4"
assert reviews[1]["review_comment"] == "まあまあです"
assert reviews[1]["book_image_url"] == "dummy_book_image_url_1"
assert reviews[1]["book_author"] == "dummy_book_author_1"
assert reviews[1]["book_url"] == "dummy_book_url_1"

assert reviews[2]["user_id"] == "user_id_2"
assert reviews[2]["user_name"] == "user_name_2"
assert reviews[2]["isbn"] == "67890"
assert reviews[2]["book_title"] == "Python チュートリアル"
assert reviews[2]["score_for_me"] == "2"
assert reviews[2]["score_for_others"] == "4"
assert reviews[2]["review_comment"] == "そこそこです"
assert reviews[2]["book_image_url"] == "dummy_book_image_url_2"
assert reviews[2]["book_author"] == "dummy_book_author_2"
assert reviews[2]["book_url"] == "dummy_book_url_2"
13 changes: 12 additions & 1 deletion bee_slack_app/view/home.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ def home(
see_more_recommended_book_action_id: str,
read_review_action_id: str,
post_review_action_id: str,
user_info_action_id: str
user_info_action_id: str,
total_review_count: int,
):
"""
アプリホーム画面
Expand All @@ -13,6 +14,7 @@ def home(
read_review_action_id: 「レビューを閲覧する」ボタンのaction_id
post_review_action_id: 「レビューを投稿する」ボタンのaction_id
user_info_action_id: 「プロフィール」ボタンのaction_id
total_review_count: 表示する「レビュー投稿数」
"""
return {
"type": "home",
Expand Down Expand Up @@ -75,6 +77,15 @@ def home(
"type": "header",
"text": {"type": "plain_text", "text": "本のレビュー", "emoji": True},
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": f"*現在のレビュー投稿数 {total_review_count}件*",
}, # type:ignore
],
},
{
"type": "actions",
"elements": [
Expand Down
8 changes: 8 additions & 0 deletions bee_slack_app/view_controller/home.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
from logging import getLogger

from bee_slack_app.service.review import get_reviews
from bee_slack_app.view.home import home


Expand All @@ -6,12 +9,17 @@ def home_controller(app):
def update_home_view(ack, event, client):
ack()

reviews = get_reviews(logger=getLogger())

total_review_count = len(reviews["items"]) if reviews else 0

client.views_publish(
user_id=event["user"],
view=home(
read_review_action_id="read_review",
post_review_action_id="post_review",
see_more_recommended_book_action_id="book_recommend",
user_info_action_id="user_info",
total_review_count=total_review_count,
),
)