1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-17 22:47:59 +00:00

[wiki] Updates and tests

This commit is contained in:
zhengxie 2018-02-09 11:56:48 +08:00
parent 642198cc80
commit 2103d80302
4 changed files with 26 additions and 8 deletions

View File

@ -69,6 +69,7 @@ class WikiManager(models.Manager):
if self.filter(slug=slug).count() > 0: if self.filter(slug=slug).count() > 0:
raise DuplicateWikiNameError raise DuplicateWikiNameError
now = timezone.now()
if repo_id is None: # create new repo to store the wiki pages if repo_id is None: # create new repo to store the wiki pages
if org_id > 0: if org_id > 0:
repo_id = seafile_api.create_org_repo(wiki_name, '', username, repo_id = seafile_api.create_org_repo(wiki_name, '', username,
@ -77,8 +78,12 @@ class WikiManager(models.Manager):
repo_id = seafile_api.create_repo(wiki_name, '', username, repo_id = seafile_api.create_repo(wiki_name, '', username,
passwd=None) passwd=None)
repo = seafile_api.get_repo(repo_id)
assert repo is not None
wiki = self.model(username=username, name=wiki_name, slug=slug, wiki = self.model(username=username, name=wiki_name, slug=slug,
repo_id=repo_id, permission=permission) repo_id=repo.id, permission=permission,
created_at=now)
wiki.save(using=self._db) wiki.save(using=self._db)
return wiki return wiki
@ -88,9 +93,9 @@ class Wiki(models.Model):
personal wiki. personal wiki.
""" """
PERM_CHOICES = ( PERM_CHOICES = (
('private', _('private')), ('private', 'private'),
('public', _('public')), ('public', 'public'),
('login-user', _('login user')) ('login-user', 'login user')
) )
username = LowerCaseCharField(max_length=255) username = LowerCaseCharField(max_length=255)
@ -131,6 +136,7 @@ class Wiki(models.Model):
return { return {
'id': self.pk, 'id': self.pk,
'name': self.name, 'name': self.name,
'slug': self.slug,
'link': self.link, 'link': self.link,
'permission': self.permission, 'permission': self.permission,
'created_at': datetime_to_isoformat_timestr(self.created_at), 'created_at': datetime_to_isoformat_timestr(self.created_at),

View File

@ -172,9 +172,10 @@ def convert_wiki_link(content, url_prefix, repo_id, username):
return re.sub(r'\[\[(.+?)\]\]|(`.+?`)', repl, content) return re.sub(r'\[\[(.+?)\]\]|(`.+?`)', repl, content)
def is_valid_wiki_name(name): def is_valid_wiki_name(name):
if len(name) > 255: name = name.strip()
if len(name) > 255 or len(name) < 1:
return False return False
return re.match('^[\w\s-]+$', name, re.U) return True if re.match('^[\w\s-]+$', name, re.U) else False
def slugfy_wiki_name(name): def slugfy_wiki_name(name):
return slugify(name, ok=SLUG_OK) return slugify(name, ok=SLUG_OK)

View File

@ -63,7 +63,8 @@ def slug(request, slug, page_name="home"):
# create missing page... # create missing page...
filename = page_name_to_file_name(clean_page_name(page_name)) filename = page_name_to_file_name(clean_page_name(page_name))
if not seaserv.post_empty_file(repo.id, "/", filename, username): if not seaserv.post_empty_file(repo.id, "/", filename, username):
return render_error(request, _("Failed to create wiki page. Please retry later.")) logger.error('Faied to post empty file.')
return render_error(request, _("Internal Server Error"))
# ...and redirect # ...and redirect
return HttpResponseRedirect(reverse('wiki:slug', args=[slug, page_name])) return HttpResponseRedirect(reverse('wiki:slug', args=[slug, page_name]))

View File

@ -1,16 +1,26 @@
from seahub.wiki.models import Wiki from seahub.wiki.models import Wiki
from seahub.utils.timeutils import dt
from seahub.test_utils import BaseTestCase from seahub.test_utils import BaseTestCase
from seaserv import seafile_api from seaserv import seafile_api
class WikiTest(BaseTestCase): class WikiTest(BaseTestCase):
def test_to_dict(self): def test_to_dict(self):
wiki = Wiki.objects.add('new wiki', self.user.username) wiki = Wiki.objects.add('new wiki', self.user.username)
d = wiki.to_dict() d = wiki.to_dict()
assert 'wikis/new-wiki/' in d['link'] assert 'wikis/new-wiki/' in d['link']
assert 'new-wiki' == d['slug']
assert 'T' in d['created_at'] assert 'T' in d['created_at']
assert 'T' in d['updated_at'] assert 'T' in d['updated_at']
# clean
seafile_api.remove_repo(wiki.repo_id) seafile_api.remove_repo(wiki.repo_id)
class WikiManagerTest(BaseTestCase):
def test_add(self):
wiki = Wiki.objects.add('new wiki', self.user.username)
assert wiki is not None
assert wiki.created_at.replace(microsecond=0) <= dt(wiki.updated_at)