Skip to content

Commit

Permalink
Moving test passed, admin does'nt uses get_absolute_url directly.
Browse files Browse the repository at this point in the history
  • Loading branch information
pcicman committed Jul 27, 2009
1 parent d887af5 commit b233813
Show file tree
Hide file tree
Showing 10 changed files with 160 additions and 612 deletions.
22 changes: 22 additions & 0 deletions cms/admin/pageadmin.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,8 @@ def __call__(self, request, url):
return self.remove_delete_state(request, unquote(url[:-20]))
elif url.endswith('/dialog/copy'):
return get_copy_dialog(request, unquote(url[:-12]))
elif url.endswith('/preview'):
return self.preview_page(request, unquote(url[:-8]))
# NOTE: revert plugin is newly integrated in overriden revision_view
if len(url.split("/?")):# strange bug in 1.0.2 if post and get variables in the same request
url = url.split("/?")[0]
Expand Down Expand Up @@ -212,6 +214,7 @@ def get_urls(self):
pat(r'^([0-9]+)/approve/$', self.approve_page), # approve page
pat(r'^([0-9]+)/remove-delete-state/$', self.remove_delete_state),
pat(r'^([0-9]+)/dialog/copy/$', get_copy_dialog), # copy dialog
pat(r'^([0-9]+)/preview/$', self.preview_page), # copy dialog
)

url_patterns.extend(super(PageAdmin, self).get_urls())
Expand Down Expand Up @@ -839,6 +842,25 @@ def remove_delete_state(self, request, object_id):
page.moderator_state = Page.MODERATOR_NEED_APPROVEMENT
page.save()
return HttpResponseRedirect("../../%d/" % page.id)

def preview_page(self, request, object_id):
"""Redirecting preview function based on draft_id
"""
instance = page = get_object_or_404(Page, id=object_id)
attrs = "?preview=1"
if request.REQUEST.get('public', None):
if not page.publisher_public_id:
raise Http404
instance = page.publisher_public
else:
attrs += "&draft=1"

url = instance.get_absolute_url() + attrs
site = Site.objects.get_current()

if not site == instance.site:
url = "http://%s%s%s" % (site.domain, url)
return HttpResponseRedirect(url)


class PageAdminMixins(admin.ModelAdmin):
Expand Down
6 changes: 3 additions & 3 deletions cms/templates/admin/cms/page/menu_item.html
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
{% if CMS_MODERATOR %}<div class="col-draft">
{% if moderator_should_approve %}<a href="./{{ page.id }}/approve/" class="icon approve" title="{% trans 'Approve directly' %}"></a>{% endif %}
<span class="state">{{ page_moderator_state.label }}</span>
<a href="{% if cl.current_site %}{% ifnotequal cl.current_site site %}http://{{ cl.current_site.domain }}{% endifnotequal %}{% endif %}{{ page.get_absolute_url }}?preview&amp;draft=1" title="{% trans "View on page" %}" class="icon selector-add viewpage" id="view-page-{{page.id}}"><span>{% trans "view" %}</span></a>
<a href="./{{ page.id }}/preview/" class="icon selector-add viewpage" id="view-page-{{page.id}}"><span>{% trans "view" %}</span></a>
</div>{% endif %}

<div class="col-published">
Expand All @@ -76,9 +76,9 @@

{% if CMS_MODERATOR %}
<label>{{ page.is_public_published|boolean_icon }}</label>
{% if page.is_public_published %}<a href="#" title="{% trans "View on page" %}" class="icon selector-add viewpage" id="view-page-{{page.id}}"><span>{% trans "view" %}</span></a>{% endif %}
{% if page.is_public_published %}<a href="./{{ page.id }}/preview/?public=1" title="{% trans "View on page" %}" class="icon selector-add viewpage" id="view-page-{{page.id}}"><span>{% trans "view" %}</span></a>{% endif %}
{% else %}
<a href="{% if cl.current_site %}{% ifnotequal cl.current_site site %}http://{{ cl.current_site.domain }}{% endifnotequal %}{% endif %}{{ page.get_absolute_url }}?preview&amp;draft=1" title="{% trans "View on page" %}" class="icon selector-add viewpage" id="view-page-{{page.id}}"><span>{% trans "view" %}</span></a>
<a href="./{{ page.id }}/preview/" class="icon selector-add viewpage" id="view-page-{{page.id}}"><span>{% trans "view" %}</span></a>
{% endif %}
</div>

Expand Down
136 changes: 131 additions & 5 deletions cms/tests/permmod.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from cms.tests.base import PageBaseTestCase, URL_CMS_PAGE_ADD, URL_CMS_PAGE,\
URL_CMS_PAGE_CHANGE
from cms.models import Title, Page
from publisher.models import Publisher


class PermissionModeratorTestCase(PageBaseTestCase):
Expand Down Expand Up @@ -56,7 +57,7 @@ def _add_plugin(self, user):
response = self.client.post(url, post_data)
assert(response.content == "1")

def _create_page(self, parent_page=None, user=None):
def _create_page(self, parent_page=None, user=None, position="first-child", title=None):
if user:
# change logged in user
self.login_user(user)
Expand All @@ -68,9 +69,12 @@ def _create_page(self, parent_page=None, user=None):
'_save': 'Save',
})

if title is not None:
page_data['title'] = page_data['slug'] = title

# add page
if parent_page:
url = URL_CMS_PAGE_ADD + "?target=%d&position=first-child" % parent_page.pk
url = URL_CMS_PAGE_ADD + "?target=%d&position=%s" % (parent_page.pk, position)
else:
url = URL_CMS_PAGE_ADD
response = self.client.post(url, page_data)
Expand Down Expand Up @@ -166,6 +170,16 @@ def _copy_page(self, page, target_page):
copied_page = self.assertObjectExist(Page.objects, title_set__slug=copied_slug, parent=target_page)
return copied_page

def _move_page(self, page, target_page, position="first-child"):
data = {
'position': position,
'target': target_page.pk,
}
response = self.client.post(URL_CMS_PAGE + "%d/move-page/" % page.pk, data)
assert(response.status_code, 200)
return self._reload(page)


def assertObjectExist(self, qs, **filter):
try:
return qs.get(**filter)
Expand Down Expand Up @@ -299,7 +313,6 @@ def test_09_same_order(self):
# approve last 2 pages in reverse order
for slug in reversed(slugs[2:]):
page = self.assertObjectExist(Page.objects.drafts(), title_set__slug=slug)
print "\n\n************************************ publish:", page, "\n\n"
page = self._publish_page(page, True)
self._check_published_page_attributes(page)

Expand Down Expand Up @@ -426,7 +439,7 @@ def test_15_moderator_flags(self):

# approve it by master
self.login_user(self.user_master)

# approve this page - but it doesn't get published yet, because
# slave home is not published
page = self._approve_page(page)
Expand Down Expand Up @@ -457,10 +470,123 @@ def test_15_moderator_flags(self):


def test_16_patricks_move(self):
"""Special name, special case test, thanks Patrick!
"""Special name, special case..
1. build following tree (msater node is approved and published)
slave-home
/ | \
A B C
/ \
D E
/ | \
F G H
2. perform move oparations:
1. move G under C
2. move E under G
slave-home
/ | \
A B C
/ \
D G
\
E
/ \
F H
3. approve nodes in following order:
1. approve H
2. approve G
3. approve E
4. approve F
"""
self.login_user(self.user_slave)

# all of them are under moderation...
pa = self._create_page(self.slave_page, title="pa")
pb = self._create_page(pa, position="right", title="pb")
pc = self._create_page(pb, position="right", title="pc")

pd = self._create_page(pb, title="pd")
pe = self._create_page(pd, position="right", title="pe")

pf = self._create_page(pe, title="pf")
pg = self._create_page(pf, position="right", title="pg")
ph = self._create_page(pf, position="right", title="ph")


assert(not pg.publisher_public)

# login as master for approvement
self.login_user(self.user_master)

# first approve slave-home
self._publish_page(self.slave_page, approve=True)

# publish and approve them all
pa = self._publish_page(pa, approve=True)
pb = self._publish_page(pb, approve=True)
pc = self._publish_page(pc, approve=True)
pd = self._publish_page(pd, approve=True)
pe = self._publish_page(pe, approve=True)
pf = self._publish_page(pf, approve=True)
pg = self._publish_page(pg, approve=True)
ph = self._publish_page(ph, approve=True)

# parent check
self.assertEqual(pe.parent, pb)
self.assertEqual(pg.parent, pe)
self.assertEqual(ph.parent, pe)

# not published yet, cant exist
assert(pg.publisher_public)

# check urls
self.assertEqual(pg.publisher_public.get_absolute_url(), u'/master/slave-home/pb/pe/pg/')
self.assertEqual(ph.publisher_public.get_absolute_url(), u'/master/slave-home/pb/pe/ph/')

# perform movings under slave...
self.login_user(self.user_slave)
pg = self._move_page(pg, pc)
pe = self._move_page(pe, pg)

# reload all - moving has changed some attributes
pa = self._reload(pa)
pb = self._reload(pb)
pc = self._reload(pc)
pd = self._reload(pd)
pe = self._reload(pe)
pf = self._reload(pf)
pg = self._reload(pg)
ph = self._reload(ph)


# check urls - they should stay them same, there wasn't approvement yet
self.assertEqual(pg.publisher_public.get_absolute_url(), u'/master/slave-home/pb/pe/pg/')
self.assertEqual(ph.publisher_public.get_absolute_url(), u'/master/slave-home/pb/pe/ph/')

# pg & pe should require approvement
self.assertEqual(pg.requires_approvement(), True)
self.assertEqual(pe.requires_approvement(), True)
self.assertEqual(ph.requires_approvement(), False)

# login as master, and approve moves
self.login_user(self.user_master)
pg = self._approve_page(pg)
pe = self._approve_page(pe)
ph = self._approve_page(ph)
pf = self._approve_page(pf)

# public parent check after move
self.assertEqual(pg.publisher_public.parent.pk, pc.publisher_public_id)
self.assertEqual(pe.publisher_public.parent.pk, pg.publisher_public_id)
self.assertEqual(ph.publisher_public.parent.pk, pe.publisher_public_id)

# check if urls are correct after move
self.assertEqual(pg.publisher_public.get_absolute_url(), u'/master/slave-home/pc/pg/')
self.assertEqual(ph.publisher_public.get_absolute_url(), u'/master/slave-home/pc/pg/pe/ph/')



15 changes: 0 additions & 15 deletions publisher-old/__init__.py

This file was deleted.

Loading

0 comments on commit b233813

Please sign in to comment.