From 1dca1cc0501707537f200878c8b7d4342ee11c0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=A4ublein?= Date: Fri, 14 May 2021 05:28:39 +0200 Subject: [PATCH] Add option for hiding empty dashboard cards (#213) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add option for hiding empty dashboard cards * rework add option for hiding empty dashboard cards missed statistics.html * don't exit early in cards * add forms test for dashboard_hide_empty * add tests for cards * fix early exit in card_diaperchange_latest * change dependency of migration * rename migration * introduce hiding of cards in templates * linting * add context to test_card_diaperchange_last * setup MockUserRequest * add context to all cards test cases * add test for settings_dashboard_hide_empty_on * change dashboard_hide_test, but it doesn't work * add test for _user_wants_hide * fix test_user_wants_hide user object, simpliy check for data['empty'] * add test for user_wants_hide to every card * linting * fix trailing whitespace * rename user_wants_hide to hide_empty * fix hidden statistics * add user.refresh_from_db to test case, add test case for dashboard_refresh_rate * Follow redirect and correct assertion Co-authored-by: jcgoette Co-authored-by: Benjamin Häublein Co-authored-by: Christopher C. Wells --- babybuddy/admin.py | 2 +- babybuddy/forms.py | 7 +- .../migrations/0014_settings_hide_empty.py | 18 ++ babybuddy/models.py | 5 + .../babybuddy/user_settings_form.html | 5 + babybuddy/tests/tests_forms.py | 25 ++ dashboard/templates/cards/base.html | 22 +- dashboard/templates/cards/statistics.html | 72 +++--- dashboard/templatetags/cards.py | 233 +++++++++++++----- dashboard/tests/tests_templatetags.py | 73 ++++-- 10 files changed, 336 insertions(+), 126 deletions(-) create mode 100644 babybuddy/migrations/0014_settings_hide_empty.py diff --git a/babybuddy/admin.py b/babybuddy/admin.py index 0eb69815..285017cb 100644 --- a/babybuddy/admin.py +++ b/babybuddy/admin.py @@ -14,7 +14,7 @@ class SettingsInline(admin.StackedInline): can_delete = False fieldsets = ( (_('Dashboard'), { - 'fields': ('dashboard_refresh_rate',) + 'fields': ('dashboard_refresh_rate', 'dashboard_hide_empty',) }), ) diff --git a/babybuddy/forms.py b/babybuddy/forms.py index 4f0a7fbd..3bb49dfe 100644 --- a/babybuddy/forms.py +++ b/babybuddy/forms.py @@ -41,4 +41,9 @@ class UserPasswordForm(PasswordChangeForm): class UserSettingsForm(forms.ModelForm): class Meta: model = Settings - fields = ['dashboard_refresh_rate', 'language', 'timezone'] + fields = [ + 'dashboard_refresh_rate', + 'dashboard_hide_empty', + 'language', + 'timezone' + ] diff --git a/babybuddy/migrations/0014_settings_hide_empty.py b/babybuddy/migrations/0014_settings_hide_empty.py new file mode 100644 index 00000000..7afe1c76 --- /dev/null +++ b/babybuddy/migrations/0014_settings_hide_empty.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2021-01-19 23:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('babybuddy', '0013_auto_20210411_1241'), + ] + + operations = [ + migrations.AddField( + model_name='settings', + name='dashboard_hide_empty', + field=models.BooleanField(default=False, verbose_name='Hide Empty Dashboard Cards'), + ), + ] diff --git a/babybuddy/models.py b/babybuddy/models.py index d42f1b3e..90b708f3 100644 --- a/babybuddy/models.py +++ b/babybuddy/models.py @@ -34,6 +34,11 @@ class Settings(models.Model): (timezone.timedelta(minutes=15), _('15 min.')), (timezone.timedelta(minutes=30), _('30 min.')), ]) + dashboard_hide_empty = models.BooleanField( + verbose_name=_('Hide Empty Dashboard Cards'), + default=False, + editable=True + ) language = models.CharField( choices=settings.LANGUAGES, default=settings.LANGUAGE_CODE, diff --git a/babybuddy/templates/babybuddy/user_settings_form.html b/babybuddy/templates/babybuddy/user_settings_form.html index 9eaf4888..77f188db 100644 --- a/babybuddy/templates/babybuddy/user_settings_form.html +++ b/babybuddy/templates/babybuddy/user_settings_form.html @@ -64,6 +64,11 @@ {% include 'babybuddy/form_field.html' %} {% endwith %} +
+ {% with form_settings.dashboard_hide_empty as field %} + {% include 'babybuddy/form_field.html' %} + {% endwith %} +
{% trans "API" %} diff --git a/babybuddy/tests/tests_forms.py b/babybuddy/tests/tests_forms.py index 71af390c..2a99e76f 100644 --- a/babybuddy/tests/tests_forms.py +++ b/babybuddy/tests/tests_forms.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +import datetime + from django.contrib.auth.models import User from django.core.management import call_command from django.test import Client as HttpClient, override_settings, TestCase @@ -132,3 +134,26 @@ class FormsTestCase(TestCase): self.assertEqual(page.status_code, 200) self.assertEqual(timezone.get_current_timezone_name(), params['timezone']) + + def test_user_settings_dashboard_hide_empty_on(self): + self.c.login(**self.credentials) + + params = self.settings_template.copy() + params['dashboard_hide_empty'] = 'on' + + page = self.c.post('/user/settings/', data=params, follow=True) + self.assertEqual(page.status_code, 200) + self.user.refresh_from_db() + self.assertTrue(self.user.settings.dashboard_hide_empty) + + def test_user_settings_dashboard_refresh_rate(self): + self.c.login(**self.credentials) + + params = self.settings_template.copy() + params['dashboard_refresh_rate'] = '0:05:00' + + page = self.c.post('/user/settings/', data=params, follow=True) + self.assertEqual(page.status_code, 200) + self.user.refresh_from_db() + self.assertEqual(self.user.settings.dashboard_refresh_rate, + datetime.timedelta(seconds=300)) diff --git a/dashboard/templates/cards/base.html b/dashboard/templates/cards/base.html index 40bb0648..8aac9ad7 100644 --- a/dashboard/templates/cards/base.html +++ b/dashboard/templates/cards/base.html @@ -1,11 +1,13 @@ -
-
- - {% block header %}{% endblock %} +{% if not empty or not hide_empty %} +
+
+ + {% block header %}{% endblock %} +
+
+ {% block title %}{% endblock %} +
{% block content %}{% endblock %}
+
+ {% block listgroup %}{% endblock %}
-
- {% block title %}{% endblock %} -
{% block content %}{% endblock %}
-
- {% block listgroup %}{% endblock %} -
\ No newline at end of file +{% endif %} diff --git a/dashboard/templates/cards/statistics.html b/dashboard/templates/cards/statistics.html index 3a6c1abd..3485a515 100644 --- a/dashboard/templates/cards/statistics.html +++ b/dashboard/templates/cards/statistics.html @@ -1,40 +1,46 @@ {% load duration i18n %} -
-
- - {% trans "Statistics" %} -
-
-