From c4af7f71050a03526cb699545f6572a348bca69b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Tue, 10 Oct 2017 15:58:32 +0200 Subject: [PATCH] dashboard: add option to set new tile position (#19346) --- combo/apps/dashboard/views.py | 11 +++++++++-- combo/settings.py | 2 ++ tests/test_dashboard.py | 29 +++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/combo/apps/dashboard/views.py b/combo/apps/dashboard/views.py index 58051623..b63deb88 100644 --- a/combo/apps/dashboard/views.py +++ b/combo/apps/dashboard/views.py @@ -20,6 +20,7 @@ from django.conf import settings from django.contrib.contenttypes.models import ContentType from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse +from django.db.models import Max, Min from django.http import Http404, HttpResponse, HttpResponseRedirect from django.views.decorators.csrf import csrf_exempt from django.views.generic import View @@ -64,8 +65,14 @@ class DashboardAddTileView(View): tile = Tile(dashboard=dashboard, cell=cell, - user=request.user) - tile.order = 0 + user=request.user, + order=0) + if settings.COMBO_DASHBOARD_NEW_TILE_POSITION == 'first': + order = Tile.objects.filter(dashboard=dashboard, user=request.user).aggregate(Min('order')).get('order__min') + tile.order = order - 1 if order is not None else 0 + elif settings.COMBO_DASHBOARD_NEW_TILE_POSITION == 'last': + order = Tile.objects.filter(dashboard=dashboard, user=request.user).aggregate(Max('order')).get('order_max') + tile.order = order + 1 if order is not None else 0 tile.save() cell_data = get_cell_data(cell) diff --git a/combo/settings.py b/combo/settings.py index 2a109959..913a8f2e 100644 --- a/combo/settings.py +++ b/combo/settings.py @@ -288,6 +288,8 @@ COMBO_WELCOME_PAGE_PATH = None # dashboard support COMBO_DASHBOARD_ENABLED = False +COMBO_DASHBOARD_NEW_TILE_POSITION = 'last' + # default position on maps COMBO_MAP_DEFAULT_POSITION = {'lat': '48.83369263315934', 'lng': '2.3233688436448574' diff --git a/tests/test_dashboard.py b/tests/test_dashboard.py index 1e1539e7..9ea7a560 100644 --- a/tests/test_dashboard.py +++ b/tests/test_dashboard.py @@ -55,11 +55,40 @@ def test_add_to_dashboard(app, site): assert Tile.objects.all()[0].cell.text == cell.text assert Tile.objects.all()[0].dashboard_id == dashboard.id assert Tile.objects.all()[0].user_id == user.id + assert Tile.objects.all()[0].order == 0 app = login(app) resp = app.get('/two/', status=200) assert 'hello world' in resp.body +def test_add_to_dashboard_order(app, site): + test_add_to_dashboard(app, site) + cell = TextCell.objects.get(order=101) + resp = app.get(reverse('combo-dashboard-add-tile', + kwargs={'cell_reference': cell.get_reference()})) + assert Tile.objects.count() == 2 + assert Tile.objects.all()[0].cell.text == 'hello world (100)' + assert Tile.objects.all()[1].cell.text == 'hello world (101)' + + cell = TextCell.objects.get(order=102) + resp = app.get(reverse('combo-dashboard-add-tile', + kwargs={'cell_reference': cell.get_reference()})) + assert Tile.objects.count() == 3 + assert Tile.objects.all()[0].cell.text == 'hello world (100)' + assert Tile.objects.all()[1].cell.text == 'hello world (101)' + assert Tile.objects.all()[2].cell.text == 'hello world (102)' + + with override_settings(COMBO_DASHBOARD_NEW_TILE_POSITION='first'): + cell = TextCell.objects.get(order=103) + resp = app.get(reverse('combo-dashboard-add-tile', + kwargs={'cell_reference': cell.get_reference()})) + assert Tile.objects.count() == 4 + assert Tile.objects.all()[0].cell.text == 'hello world (103)' + assert Tile.objects.all()[1].cell.text == 'hello world (100)' + assert Tile.objects.all()[2].cell.text == 'hello world (101)' + assert Tile.objects.all()[3].cell.text == 'hello world (102)' + + def test_ajax_add_to_dashboard(app, site): cell = TextCell.objects.get(order=100) resp = app.get(reverse('combo-dashboard-add-tile',