combo/tests/test_dashboard.py

109 lines
4.1 KiB
Python

import json
import mock
import os
import pytest
from webtest import TestApp
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.test import override_settings
from combo.wsgi import application
from combo.data.models import Page, CellBase, TextCell, ConfigJsonCell
from combo.apps.dashboard.models import DashboardCell, Tile
pytestmark = pytest.mark.django_db
from test_manager import admin_user, login
@pytest.fixture
def site(admin_user):
page = Page(title='One', slug='index')
page.save()
# order=100 will be useful to get to the cell later on
cell = TextCell(page=page, order=100, placeholder='content', text='hello world')
cell.save()
page = Page(title='Two', slug='two')
page.save()
dashboard_cell = DashboardCell(page=page, order=0, placeholder='content')
dashboard_cell.save()
def test_empty_dashboard(app, site):
resp = app.get('/', status=200)
assert 'hello world' in resp.body
resp = app.get('/two/', status=200)
assert not 'dashboardcell' in resp.body
app = login(app)
resp = app.get('/two/', status=200)
assert 'dashboardcell' in resp.body
def test_add_to_dashboard(app, site):
app = login(app)
cell = TextCell.objects.get(order=100)
dashboard = DashboardCell.objects.all()[0]
user = User.objects.all()[0]
resp = app.get(reverse('combo-dashboard-add-tile',
kwargs={'cell_reference': cell.get_reference()}))
assert Tile.objects.count() == 1
assert Tile.objects.all()[0].cell.id != cell.id
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
app = login(app)
resp = app.get('/two/', status=200)
assert 'hello world' in resp.body
def test_ajax_render(app, site):
test_add_to_dashboard(app, site)
app.reset() # logout
tile = Tile.objects.all()[0]
page = Page.objects.get(slug='two')
resp = app.get(reverse('combo-public-ajax-page-cell',
kwargs={'page_pk': page.id, 'cell_reference': tile.cell.get_reference()}),
status=403)
app = login(app)
resp = app.get(reverse('combo-public-ajax-page-cell',
kwargs={'page_pk': page.id, 'cell_reference': tile.cell.get_reference()}),
status=200)
user = User.objects.create_user('plop', email=None, password='plop')
app = login(app, username='plop', password='plop')
resp = app.get(reverse('combo-public-ajax-page-cell',
kwargs={'page_pk': page.id, 'cell_reference': tile.cell.get_reference()}),
status=403)
def test_remove_from_dashboard(app, site):
test_add_to_dashboard(app, site)
app.reset() # logout
tile = Tile.objects.all()[0]
resp = app.get(reverse('combo-dashboard-remove-tile',
kwargs={'cell_reference': tile.cell.get_reference()}), status=403)
app = login(app)
resp = app.get(reverse('combo-dashboard-remove-tile',
kwargs={'cell_reference': tile.cell.get_reference()}), status=302)
assert Tile.objects.count() == 0
assert TextCell.objects.count() == 1
def test_auto_tile(app, site):
with override_settings(JSON_CELL_TYPES={'test-config-json-cell': {'name': 'Foobar', 'url': 'http://test/'}},
TEMPLATE_DIRS=['%s/templates-1' % os.path.abspath(os.path.dirname(__file__))]):
with mock.patch('combo.utils.requests.get') as requests_get:
# logged out
requests_get.return_value = mock.Mock(content='<div>HELLO</div>', status_code=200)
resp = app.post(reverse('combo-dashboard-auto-tile', kwargs={'key': 'test-config-json-cell'}),
params=json.dumps({'var1': 'one', 'var2': 'two'}),
content_type='application/json')
assert resp.body.strip() == '/var1=one/var2=two/'
# and logged in
app = login(app)
resp = app.post(reverse('combo-dashboard-auto-tile', kwargs={'key': 'test-config-json-cell'}),
params=json.dumps({'var1': 'one', 'var2': 'two'}),
content_type='application/json')
assert resp.body.strip() == '/var1=one/var2=two/'