combo/tests/test_pages.py

248 lines
6.9 KiB
Python

from StringIO import StringIO
import os
import pytest
import sys
from django.conf import settings
from django.contrib.auth.models import User, Group
from combo.data.models import Page, CellBase, TextCell, LinkCell
from combo.data.management.commands.import_site import Command as ImportSiteCommand
from combo.data.management.commands.export_site import Command as ExportSiteCommand
pytestmark = pytest.mark.django_db
def test_page_order():
page = Page()
page.title = u'foo'
page.save()
page2 = Page()
page2.title = u'bar'
page2.save()
assert Page.objects.get(id=page.id).order < Page.objects.get(id=page2.id)
def test_page_url():
page = Page()
page.slug = u'foo'
page.save()
assert page.get_online_url() == '/foo/'
page2 = Page()
page2.slug = 'bar'
page2.parent = page
assert page2.get_online_url() == '/foo/bar/'
def test_page_of_level():
parent_page = None
for i in range(10):
page = Page()
page.slug = 'level%d' % i
if parent_page:
page.parent = parent_page
page.save()
parent_page = page
assert page.get_page_of_level(2).slug == 'level2'
assert page.get_page_of_level(4).slug == 'level4'
assert page.get_page_of_level(14) is None
def test_page_siblings():
Page.objects.all().delete()
page = Page()
page.slug = 'foo'
page.save()
page2 = Page()
page2.slug = 'bar'
page2.parent = page
page2.save()
page3 = Page()
page3.slug = 'baz'
page3.parent = page
page3.save()
assert [x.slug for x in page3.get_siblings()] == ['bar', 'baz']
assert page.has_children()
assert not page2.has_children()
def test_flat_hierarchy():
Page.objects.all().delete()
page = Page()
page.slug = 'foo'
page.save()
page2 = Page()
page2.slug = 'bar'
page2.parent = page
page2.save()
page3 = Page()
page3.slug = 'baz'
page3.parent = page
page3.save()
pages = Page.get_as_reordered_flat_hierarchy(Page.objects.all())
assert [x.slug for x in pages] == ['foo', 'bar', 'baz']
page.order = 17
page.save()
pages = Page.get_as_reordered_flat_hierarchy(Page.objects.all())
assert [x.slug for x in pages] == ['foo', 'bar', 'baz']
page2.parent = None
page2.save()
pages = Page.get_as_reordered_flat_hierarchy(Page.objects.all())
assert [x.slug for x in pages] == ['bar', 'foo', 'baz']
page.parent = page2
page.save()
pages = Page.get_as_reordered_flat_hierarchy(Page.objects.all())
assert [x.slug for x in pages] == ['bar', 'foo', 'baz']
def test_page_visibility():
page = Page()
assert page.is_visible()
page.public = False
page.save()
assert not page.is_visible()
group = Group(name='foobar')
group.save()
user1 = User(username='foo')
user1.save()
user1.groups = [group]
user2 = User(username='bar')
user2.save()
assert page.is_visible(user1)
assert page.is_visible(user2)
page.groups = [group]
assert not page.is_visible()
assert page.is_visible(user1)
assert not page.is_visible(user2)
def test_import_export_pages():
page = Page(title=u'foo', slug='foo', order=0)
page.save()
cell = TextCell(page=page, text='foo', order=0)
cell.save()
page2 = Page(title=u'bar', slug='bar', order=1, parent=page)
page2.save()
cell = TextCell(page=page2, text='bar', order=0)
cell.save()
site_export = [x.get_serialized_page() for x in Page.objects.all()]
Page.objects.all().delete()
Page.load_serialized_pages(site_export)
new_page_1 = Page.objects.all().order_by('order')[0]
new_page_2 = Page.objects.all().order_by('order')[1]
assert new_page_1.title == 'foo'
assert new_page_2.title == 'bar'
assert len(CellBase.get_cells(page_id=new_page_1.id)) == 1
assert isinstance(CellBase.get_cells(page_id=new_page_1.id)[0], TextCell)
assert CellBase.get_cells(page_id=new_page_1.id)[0].text == 'foo'
def test_import_export_pages_with_links():
page = Page(title=u'foo', slug='foo', order=0)
page.save()
page2 = Page(title=u'bar', slug='bar', order=1)
page2.save()
cell = LinkCell(page=page, title='bar', link_page=page2, order=1)
cell.save()
cell2 = LinkCell(page=page2, title='foo', link_page=page, order=1)
cell2.save()
site_export = [x.get_serialized_page() for x in Page.objects.all()]
Page.objects.all().delete()
Page.load_serialized_pages(site_export)
new_page_1 = Page.objects.all().order_by('order')[0]
new_page_2 = Page.objects.all().order_by('order')[1]
assert CellBase.get_cells(page_id=new_page_1.id)[0].link_page_id == new_page_2.id
assert CellBase.get_cells(page_id=new_page_2.id)[0].link_page_id == new_page_1.id
def test_next_previous():
Page.objects.all().delete()
page = Page()
page.slug = 'foo'
page.save()
page2 = Page()
page2.slug = 'bar'
page2.parent = page
page2.order = 1
page2.save()
page3 = Page()
page3.slug = 'baz'
page3.parent = page
page3.order = 2
page3.save()
assert page.get_next_page(None).id == page2.id
assert page.get_previous_page(None) is None
assert page2.get_next_page(None).id == page3.id
assert page2.get_previous_page(None).id == page.id
page2.public = False
page2.save()
assert page.get_next_page(None).id == page3.id
assert page3.get_previous_page(None).id == page.id
user1 = User(username='foo')
user1.save()
assert page.get_next_page(user1).id == page2.id
assert page3.get_previous_page(user1).id == page2.id
page3.public = False
page3.save()
assert page.get_next_page(None) is None
def test_import_export_management_commands():
page = Page(title=u'foo', slug='foo', order=0)
page.save()
cell = TextCell(page=page, text='foo', order=0)
cell.save()
page2 = Page(title=u'bar', slug='bar', order=1, parent=page)
page2.save()
cell = TextCell(page=page2, text='bar', order=0)
cell.save()
export_filename = os.path.join(settings.MEDIA_ROOT, 'site-export.json')
if os.path.exists(export_filename):
os.unlink(export_filename)
cmd = ExportSiteCommand()
cmd.handle(export_filename)
assert os.path.exists(export_filename)
stdout = sys.stdout
try:
sys.stdout = StringIO()
cmd.handle('-')
assert sys.stdout.getvalue() == open(export_filename).read()
finally:
sys.stdout = stdout
Page.objects.all().delete()
cmd = ImportSiteCommand()
cmd.handle(export_filename)
new_page_1 = Page.objects.all().order_by('order')[0]
new_page_2 = Page.objects.all().order_by('order')[1]
assert new_page_1.title == 'foo'
assert new_page_2.title == 'bar'
assert len(CellBase.get_cells(page_id=new_page_1.id)) == 1
assert isinstance(CellBase.get_cells(page_id=new_page_1.id)[0], TextCell)
assert CellBase.get_cells(page_id=new_page_1.id)[0].text == 'foo'