added more tests

include img in manifest
disclaimer in root cli script
add blinker to dev tools
version file included in package
cli bug fixes
This commit is contained in:
Matthew Scragg 2014-10-22 15:38:32 -05:00
parent 38e5ef85c0
commit bf3b3d3d74
13 changed files with 178 additions and 120 deletions

View file

@ -20,7 +20,7 @@ def cname_to_filename(cname):
:return: str -- Filename
"""
return cname.lower() + ".md"
return cname + ".md"
def filename_to_cname(filename):
@ -71,25 +71,26 @@ class Wiki(HookMixin):
return username, email
def revert_page(self, name, commit_sha, message, username):
def revert_page(self, name, commit_sha, message, username, email):
"""Revert page to passed commit sha1
:param name: Name of page to revert.
:param commit_sha: Commit Sha1 to revert to.
:param message: Commit message.
:param username:
:param username: Committer name.
:param email: Committer email.
:return: Git commit sha1
"""
page = self.get_page(name, commit_sha)
if not page:
raise PageNotFound()
raise PageNotFound('Commit not found')
if not message:
commit_info = gittle.utils.git.commit_info(self.gittle[commit_sha.encode('latin-1')])
message = commit_info['message']
return self.write_page(name, page['data'], message=message, username=username)
return self.write_page(name, page['data'], message=message, username=username, email=email)
def write_page(self, name, content, message=None, create=False, username=None, email=None):
"""Write page to git repo

View file

@ -1,39 +1,72 @@
import json
from nose.tools import *
from flask import url_for
from realms.modules.wiki.models import Wiki, cname_to_filename, filename_to_cname
from realms.modules.wiki.models import cname_to_filename, filename_to_cname
from realms.lib.test import BaseTest
class WikiTest(BaseTest):
class WikiBaseTest(BaseTest):
def write_page(self, name, message=None, content=None):
return self.client.post(url_for('wiki.page_write', name=name),
data=dict(message=message, content=content))
def test_wiki_routes(self):
self.assert_200(self.client.get(url_for("wiki.create")))
""" Create a test page first!
for route in ['page', 'edit', 'history', 'index']:
rv = self.client.get(url_for("wiki.%s" % route, name='test'))
self.assert_200(rv, "wiki.%s: %s" % (route, rv.status_code))
"""
def test_write_page(self):
self.assert_200(
self.client.post(url_for('wiki.page_write', name='test'), data=dict(
content='testing',
message='test message'
)))
self.assert_200(self.client.get(url_for('wiki.page', name='test')))
def test_delete_page(self):
self.assert_200(self.client.delete(url_for('wiki.page_write', name='test')))
self.assert_status(self.client.get(url_for('wiki.page', name='test')), 302)
def test_revert(self):
pass
class UtilTest(WikiBaseTest):
def test_cname_to_filename(self):
eq_(cname_to_filename('test'), 'test.md')
def test_filename_to_cname(self):
eq_(filename_to_cname('test-1-2-3.md'), 'test-1-2-3')
eq_(filename_to_cname('test-1-2-3.md'), 'test-1-2-3')
class WikiTest(WikiBaseTest):
def test_routes(self):
self.assert_200(self.client.get(url_for("wiki.create")))
self.write_page('test', message='test message', content='testing')
for route in ['page', 'edit', 'history']:
rv = self.client.get(url_for("wiki.%s" % route, name='test'))
self.assert_200(rv, "wiki.%s: %s" % (route, rv.status_code))
self.assert_200(self.client.get(url_for('wiki.index')))
def test_write_page(self):
self.assert_200(self.write_page('test', message='test message', content='testing'))
rv = self.client.get(url_for('wiki.page', name='test'))
self.assert_200(rv)
self.assert_context('name', 'test')
eq_(self.get_context_variable('page')['info']['message'], 'test message')
eq_(self.get_context_variable('page')['data'], 'testing')
def test_history(self):
self.assert_200(self.client.get(url_for('wiki.history', name='test')))
def test_delete_page(self):
self.app.config['WIKI_LOCKED_PAGES'] = ['test']
self.assert_403(self.client.delete(url_for('wiki.page_write', name='test')))
self.app.config['WIKI_LOCKED_PAGES'] = []
self.assert_200(self.client.delete(url_for('wiki.page_write', name='test')))
rv = self.client.get(url_for('wiki.page', name='test'))
self.assert_status(rv, 302)
def test_revert(self):
rv1 = self.write_page('test', message='test message', content='testing_old')
self.write_page('test', message='test message', content='testing_new')
data = json.loads(rv1.data)
self.client.post(url_for('wiki.revert'), data=dict(name='test', commit=data['sha']))
self.client.get(url_for('wiki.page', name='test'))
eq_(self.get_context_variable('page')['data'], 'testing_old')
self.assert_404(self.client.post(url_for('wiki.revert'), data=dict(name='test', commit='does not exist')))
self.app.config['WIKI_LOCKED_PAGES'] = ['test']
self.assert_403(self.client.post(url_for('wiki.revert'), data=dict(name='test', commit=data['sha'])))
self.app.config['WIKI_LOCKED_PAGES'] = []
class RelativePathTest(WikiTest):
def configure(self):
return dict(RELATIVE_PATH='wiki')

View file

@ -1,7 +1,7 @@
from flask import abort, g, render_template, request, redirect, Blueprint, flash, url_for, current_app
from flask.ext.login import login_required, current_user
from realms.lib.util import to_canonical, remove_ext
from .models import PageNotFound
blueprint = Blueprint('wiki', __name__)
@ -28,19 +28,22 @@ def compare(name, fsha, dots, lsha):
@blueprint.route("/_revert", methods=['POST'])
@login_required
def revert():
name = request.form.get('name')
cname = to_canonical(request.form.get('name'))
commit = request.form.get('commit')
cname = to_canonical(name)
message = request.form.get('message', "Reverting %s" % cname)
if cname in current_app.config.get('WIKI_LOCKED_PAGES'):
return dict(error=True, message="Page is locked")
return dict(error=True, message="Page is locked"), 403
try:
sha = g.current_wiki.revert_page(cname,
commit,
message=message,
username=current_user.username,
email=current_user.email)
except PageNotFound as e:
return dict(error=True, message=e.message), 404
sha = g.current_wiki.revert_page(name,
commit,
message=message,
username=current_user.username,
email=current_user.email)
if sha:
flash("Page reverted")
@ -104,7 +107,7 @@ def page_write(name):
if request.method == 'POST':
# Create
if cname in current_app.config.get('WIKI_LOCKED_PAGES'):
return dict(error=True, message="Page is locked")
return dict(error=True, message="Page is locked"), 403
sha = g.current_wiki.write_page(cname,
request.form['content'],
@ -117,7 +120,7 @@ def page_write(name):
edit_cname = to_canonical(request.form['name'])
if edit_cname in current_app.config.get('WIKI_LOCKED_PAGES'):
return dict(error=True, message="Page is locked")
return dict(error=True, message="Page is locked"), 403
if edit_cname != cname.lower():
g.current_wiki.rename_page(cname, edit_cname)
@ -132,6 +135,9 @@ def page_write(name):
else:
# DELETE
if cname in current_app.config.get('WIKI_LOCKED_PAGES'):
return dict(error=True, message="Page is locked"), 403
sha = g.current_wiki.delete_page(name,
username=current_user.username,
email=current_user.email)