Skip to content

Commit

Permalink
refactor: split and refactor wiki tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
sfermigier committed Apr 5, 2018
1 parent 3fb16b8 commit b1738e0
Show file tree
Hide file tree
Showing 4 changed files with 212 additions and 105 deletions.
Empty file.
89 changes: 89 additions & 0 deletions abilian/sbe/apps/wiki/tests/test_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# coding=utf-8
from __future__ import absolute_import, print_function, unicode_literals

from flask import g
from markdown import Markdown
from mock import MagicMock, patch
from six import text_type
from six.moves.urllib.parse import quote_plus

from abilian.sbe.apps.wiki.markup import SBEWikiLinkExtension
from abilian.sbe.apps.wiki.models import WikiPage

pytest_plugins = ['abilian.sbe.apps.communities.tests.fixtures']


def test_wikilink_extension():
text = '/*€('
wikilink = '[[' + text + ']]'

def build_url(label, base, end):
return '/?title=' + quote_plus(label.encode('utf-8')) + end

extension = SBEWikiLinkExtension([('build_url', build_url)])
ctx = {}
ctx['extensions'] = [extension, 'toc']
ctx['output_format'] = 'html5'
md = Markdown(**ctx)

page_exists_mock = MagicMock(return_value=True)
with patch('abilian.sbe.apps.wiki.forms.page_exists', page_exists_mock):
result = md.convert(wikilink)

qtext = text_type(quote_plus(text.encode('utf-8')))
expected = '<p><a class="wikilink" href="/?title={href}/">{text}</a></p>'
expected = expected.format(href=qtext, text=text)
assert expected == result

# make sur the class is 'wikilink new' if page exists'
page_exists_mock = MagicMock(return_value=False)
with patch('abilian.sbe.apps.wiki.forms.page_exists', page_exists_mock):
result = md.convert(wikilink)

qtext = text_type(quote_plus(text.encode('utf-8')))
expected = '<p><a class="wikilink new" href="/?title={href}/">{text}</a></p>'
expected = expected.format(href=qtext, text=text)
assert expected == result


def test_new_page(user, req_ctx):
g.user = user

page = WikiPage(title="Some page", body_src='abc')
assert page.title == 'Some page'
assert page.name == 'Some page'
assert page.body_src == 'abc'
assert page.body_html == '<p>abc</p>'
assert len(page.revisions) == 1

revision = page.revisions[0]
assert revision.number == 0
assert revision.author == user


def test_rename_page(user, req_ctx):
g.user = user

page = WikiPage(title="Some page", body_src='abc')
assert page.title == 'Some page'
assert page.name == 'Some page'

page.title = 'Title Renamed'
assert page.title == 'Title Renamed'
assert page.name == 'Title Renamed'

page.name = 'Name'
assert page.title == 'Name'
assert page.name == 'Name'


def test_create_revision(user, req_ctx):
g.user = user

page = WikiPage('abc')
page.create_revision("def", "page updated")

assert len(page.revisions) == 2
last_revision = page.revisions[1]
assert last_revision.number == 1
assert last_revision.author == user
Original file line number Diff line number Diff line change
Expand Up @@ -5,93 +5,11 @@

from abilian.core.models.subjects import User
from flask import g, url_for
from markdown import Markdown
from mock import MagicMock, patch
from six import text_type
from six.moves.urllib.parse import quote_plus
from toolz import first

from abilian.sbe.apps.communities.tests.base import CommunityBaseTestCase, \
CommunityIndexingTestCase
from abilian.sbe.apps.wiki.markup import SBEWikiLinkExtension

from . import views
from .models import WikiPage


def test_wikilink_extension():
text = '/*€('
wikilink = '[[' + text + ']]'

def build_url(label, base, end):
return '/?title=' + quote_plus(label.encode('utf-8')) + end

extension = SBEWikiLinkExtension([('build_url', build_url)])
ctx = {}
ctx['extensions'] = [extension, 'toc']
ctx['output_format'] = 'html5'
md = Markdown(**ctx)

page_exists_mock = MagicMock(return_value=True)
with patch('abilian.sbe.apps.wiki.forms.page_exists', page_exists_mock):
result = md.convert(wikilink)

qtext = text_type(quote_plus(text.encode('utf-8')))
expected = '<p><a class="wikilink" href="/?title={href}/">{text}</a></p>'
expected = expected.format(href=qtext, text=text)
assert expected == result

# make sur the class is 'wikilink new' if page exists'
page_exists_mock = MagicMock(return_value=False)
with patch('abilian.sbe.apps.wiki.forms.page_exists', page_exists_mock):
result = md.convert(wikilink)

qtext = text_type(quote_plus(text.encode('utf-8')))
expected = '<p><a class="wikilink new" href="/?title={href}/">{text}</a></p>'
expected = expected.format(href=qtext, text=text)
assert expected == result


class WikiBaseTestCase(CommunityBaseTestCase):
def setUp(self):
super(WikiBaseTestCase, self).setUp()
g.user = User.query.all()[0]


class TestModels(WikiBaseTestCase):
def test_create_page(self):
page = WikiPage(title="Some page", body_src='abc')
assert page.title == 'Some page'
assert page.name == 'Some page'
assert page.body_src == 'abc'
assert page.body_html == '<p>abc</p>'
assert len(page.revisions) == 1

revision = page.revisions[0]
assert revision.number == 0
assert revision.author == g.user

def test_rename_page(self):
page = WikiPage(title="Some page", body_src='abc')
assert page.title == 'Some page'
assert page.name == 'Some page'

page.title = 'Title Renamed'
assert page.title == 'Title Renamed'
assert page.name == 'Title Renamed'

page.name = 'Name'
assert page.title == 'Name'
assert page.name == 'Name'

def test_create_revision(self):
page = WikiPage('abc')
page.create_revision("def", "page updated")

assert len(page.revisions) == 2
last_revision = page.revisions[1]
assert last_revision.number == 1
assert last_revision.author == g.user
from abilian.sbe.apps.wiki.models import WikiPage


class TestIndexing(CommunityIndexingTestCase):
Expand Down Expand Up @@ -127,28 +45,10 @@ def test_wiki_indexed(self):
assert hit['object_key'] == page_other.object_key


class TestsViews(WikiBaseTestCase):
def test_home(self):
response = self.client.get(
url_for("wiki.index", community_id=self.community.slug),
)
assert response.status_code == 302

response = self.client.get(
url_for(
"wiki.page",
title='Home',
community_id=self.community.slug,
),
)
assert response.status_code == 200

def test_create_page_initial_form(self):
g.community = self.community
view = views.PageCreate()
view.prepare_args([], {})
form = view.form
assert form['last_revision_id'].data is None
class TestsViews(CommunityBaseTestCase):
def setUp(self):
super(TestsViews, self).setUp()
g.user = User.query.all()[0]

def test_create_page(self):
title = 'Some page name'
Expand Down
118 changes: 118 additions & 0 deletions abilian/sbe/apps/wiki/tests/test_web_new.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# coding=utf-8
from __future__ import absolute_import, print_function, unicode_literals

import re

from abilian.testing.util import login
from flask import g, url_for
from pytest import mark
from toolz import first

from abilian.sbe.apps.wiki import views

pytest_plugins = ['abilian.sbe.apps.communities.tests.fixtures']


def test_home(client, community1, login_admin):
response = client.get(
url_for("wiki.index", community_id=community1.slug),
)
assert response.status_code == 302

response = client.get(
url_for(
"wiki.page",
title='Home',
community_id=community1.slug,
),
)
assert response.status_code == 200


def test_create_page_initial_form(community1, user, req_ctx):
g.user = user
g.community = community1
view = views.PageCreate()
view.prepare_args([], {})
form = view.form
assert form['last_revision_id'].data is None


@mark.skip # TODO: fixme later
def test_create_page(client, community1, req_ctx):
community = community1
user = community.test_user

with login(client, user):
title = 'Some page name'
url = url_for("wiki.page_new", community_id=community.slug)
url += '?title=Some+page+name'
response = client.get(url)
assert response.status_code == 200
# make sure the title is filled when coming from wikilink
assert 'value="Some page name"' in response.get_data(as_text=True)

title = 'Some page'
body = "LuuP3jai"
url = url_for("wiki.page_new", community_id=community.slug)
data = {'title': title, 'body_src': body, '__action': "create"}
response = client.post(url, data=data)
assert response.status_code == 302

url = url_for(
"wiki.page",
community_id=community.slug,
title=title,
)
response = client.get(url)
assert response.status_code == 200
assert body in response.get_data(as_text=True)

# edit
url = url_for(
"wiki.page_edit",
community_id=community.slug,
title=title,
)
response = client.get(url)
assert response.status_code == 200

# Slightly hackish way to get the page_id
line = first(
l for l in response.get_data(as_text=True).split("\n")
if 'name="page_id"' in l
)
m = re.search('value="(.*?)"', line)
page_id = int(m.group(1))

url = url_for(
"wiki.page_changes",
community_id=community.slug,
title=title,
)
response = client.get(url)
assert response.status_code == 200

url = url_for(
"wiki.page_source",
community_id=community.slug,
title=title,
)
response = client.get(url)
assert response.status_code == 200

url = url_for("wiki.page_edit", community_id=community.slug)
data = {'title': title, 'page_id': page_id, 'body_src': "abc def"}
data['__action'] = 'edit'
response = client.post(url, data=data)
assert response.status_code == 302

url = url_for(
"wiki.page_compare",
rev0="on",
rev1="on",
community_id=community.slug,
title=title,
)
response = client.get(url)
assert response.status_code == 200

0 comments on commit b1738e0

Please sign in to comment.