From 679ea5306e92ddace7f3e1adc8f03c0b8d2886eb Mon Sep 17 00:00:00 2001 From: "create-issue-branch[bot]" <53036503+create-issue-branch[bot]@users.noreply.github.com> Date: Sun, 21 Mar 2021 20:50:58 +0100 Subject: [PATCH] Count of owned assets in user listing page is zero, even if they own assets (#64) We fixed this by getting assets separately when getting a user to render --- documentation/changelog.rst | 1 + flexmeasures/ui/crud/users.py | 20 ++++++++++++++++---- flexmeasures/ui/templates/crud/user.html | 2 +- flexmeasures/ui/tests/test_user_crud.py | 6 ++++++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/documentation/changelog.rst b/documentation/changelog.rst index de4358410..aa1035037 100644 --- a/documentation/changelog.rst +++ b/documentation/changelog.rst @@ -10,6 +10,7 @@ Bugfixes -------- * Show screenshots in documentation and add some missing content [see `PR #60 `_] * Documentation listed 2.0 API endpoints twice [see `PR #59 `_] +* User page did not list number of assets correctly [see `PR #64 `_] diff --git a/flexmeasures/ui/crud/users.py b/flexmeasures/ui/crud/users.py index 3979b8139..082616c07 100644 --- a/flexmeasures/ui/crud/users.py +++ b/flexmeasures/ui/crud/users.py @@ -32,11 +32,15 @@ class UserForm(FlaskForm): active = BooleanField("Activation Status", validators=[DataRequired()]) -def render_user(user: Optional[User], msg: str = None): +def render_user(user: Optional[User], asset_count: int = 0, msg: str = None): user_form = UserForm() user_form.process(obj=user) return render_flexmeasures_template( - "crud/user.html", user=user, user_form=user_form, msg=msg + "crud/user.html", + user=user, + user_form=user_form, + asset_count=asset_count, + msg=msg, ) @@ -88,8 +92,16 @@ def get(self, id: str): get_user_response = InternalApi().get( url_for("flexmeasures_api_v2_0.get_user", id=id) ) - user = process_internal_api_response(get_user_response.json(), make_obj=True) - return render_user(user) + user: User = process_internal_api_response( + get_user_response.json(), make_obj=True + ) + asset_count = 0 + if user: + get_users_assets_response = InternalApi().get( + url_for("flexmeasures_api_v2_0.get_assets", owner_id=user.id) + ) + asset_count = len(get_users_assets_response.json()) + return render_user(user, asset_count=asset_count) @roles_required("admin") def toggle_active(self, id: str): diff --git a/flexmeasures/ui/templates/crud/user.html b/flexmeasures/ui/templates/crud/user.html index 669970b64..6044878d7 100644 --- a/flexmeasures/ui/templates/crud/user.html +++ b/flexmeasures/ui/templates/crud/user.html @@ -67,7 +67,7 @@

Account overview for {{ user.username }}

Assets owned - {{ user.assets | length }} + {{ asset_count }} diff --git a/flexmeasures/ui/tests/test_user_crud.py b/flexmeasures/ui/tests/test_user_crud.py index 734858858..513b9d62a 100644 --- a/flexmeasures/ui/tests/test_user_crud.py +++ b/flexmeasures/ui/tests/test_user_crud.py @@ -41,11 +41,17 @@ def test_user_page(client, as_admin, requests_mock): requests_mock.get( "http://localhost//api/v2_0/user/2", status_code=200, json=mock_user ) + requests_mock.get( + "http://localhost//api/v2_0/assets", + status_code=200, + json=[{}, {}, {}], # we only care about the length + ) user_page = client.get(url_for("UserCrudUI:get", id=2), follow_redirects=True) assert user_page.status_code == 200 assert ( "Account overview for %s" % mock_user["username"] ).encode() in user_page.data + assert (">3").encode() in user_page.data # this is the asset count assert mock_user["email"].encode() in user_page.data