Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-wiki
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
django-wiki
Commits
3f88b01e
Commit
3f88b01e
authored
May 17, 2014
by
benjaoming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix py3 syntax error, refactor tests to be run with DiscoverRunner
parent
77413fee
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
157 additions
and
157 deletions
+157
-157
wiki/tests/__init__.py
+0
-156
wiki/tests/test_basic.py
+156
-0
wiki/views/article.py
+1
-1
No files found.
wiki/tests/__init__.py
View file @
3f88b01e
from
__future__
import
print_function
from
__future__
import
unicode_literals
from
django.core.urlresolvers
import
reverse
from
django.test
import
TestCase
from
django.test.client
import
Client
import
pprint
class
InitialWebClientTest
(
TestCase
):
"""Tests by the dummy web client, with manual creating the root article."""
def
setUp
(
self
):
try
:
from
django.contrib.auth
import
get_user_model
User
=
get_user_model
()
except
ImportError
:
from
django.contrib.auth.models
import
User
User
.
objects
.
create_superuser
(
'admin'
,
'nobody@example.com'
,
'secret'
)
self
.
c
=
c
=
Client
()
c
.
login
(
username
=
'admin'
,
password
=
'secret'
)
def
test_root_article
(
self
):
"""Test redirecting to /create-root/, creating the root article and a simple markup."""
c
=
self
.
c
response
=
c
.
get
(
reverse
(
'wiki:root'
))
# url '/'
self
.
assertRedirects
(
response
,
reverse
(
'wiki:root_create'
))
# url '/create-root/'
response
=
c
.
post
(
reverse
(
'wiki:root_create'
),
{
'content'
:
'test heading h1
\n
====
\n
'
,
'title'
:
'Wiki Test'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:root'
))
response
=
c
.
get
(
reverse
(
'wiki:root'
))
self
.
assertContains
(
response
,
'test heading h1</h1>'
)
class
WebClientTest
(
TestCase
):
"""Tests by the dummy web client."""
def
setUp
(
self
):
try
:
from
django.contrib.auth
import
get_user_model
User
=
get_user_model
()
except
ImportError
:
from
django.contrib.auth.models
import
User
User
.
objects
.
create_superuser
(
'admin'
,
'nobody@example.com'
,
'secret'
)
self
.
c
=
c
=
Client
()
c
.
login
(
username
=
'admin'
,
password
=
'secret'
)
response
=
self
.
c
.
post
(
reverse
(
'wiki:root_create'
),
{
'content'
:
'root article content'
,
'title'
:
'Root Article'
})
self
.
example_data
=
{
'content'
:
'The modified text'
,
'current_revision'
:
'1'
,
'preview'
:
'1'
,
#'save': '1', # probably not too important
'summary'
:
'why edited'
,
'title'
:
'wiki test'
}
def
tearDown
(
self
):
# clear Article cache before the next test
from
wiki.models
import
Article
Article
.
objects
.
all
()
.
delete
()
def
get_by_path
(
self
,
path
):
"""Get the article response for the path.
Example: self.get_by_path("Level1/Slug2/").title
"""
return
self
.
c
.
get
(
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
path
}))
def
dump_db_status
(
self
,
message
=
''
):
"""Debug printing of the complete important database content."""
print
(
'*** db status *** {}'
.
format
(
message
))
from
wiki.models
import
Article
,
ArticleRevision
,
URLPath
for
klass
in
(
Article
,
ArticleRevision
,
URLPath
):
print
(
'* {} *'
.
format
(
klass
.
__name__
))
pprint
.
pprint
(
list
(
klass
.
objects
.
values
()),
width
=
240
)
def
test_preview_save
(
self
):
"""Test edit preview, edit save and messages."""
c
=
self
.
c
# test preview
response
=
c
.
post
(
reverse
(
'wiki:preview'
,
kwargs
=
{
'path'
:
''
}),
self
.
example_data
)
# url: '/_preview/'
self
.
assertContains
(
response
,
'The modified text'
)
# test save and messages
example2
=
self
.
example_data
.
copy
()
example2
[
'content'
]
=
'Something 2'
response
=
c
.
post
(
reverse
(
'wiki:edit'
,
kwargs
=
{
'path'
:
''
}),
example2
)
message
=
c
.
cookies
[
'messages'
]
.
value
if
'messages'
in
c
.
cookies
else
None
self
.
assertRedirects
(
response
,
reverse
(
'wiki:root'
))
response
=
c
.
get
(
reverse
(
'wiki:root'
))
#self.dump_db_status('test_preview_save')
# Why it doesn't display the latest revison text if other test preceded? It is correctly in the db.
self
.
assertContains
(
response
,
'Something 2'
)
self
.
assertTrue
(
'succesfully added'
in
message
)
def
test_redirect_create
(
self
):
"""Test that redirects to create if the slug is unknown."""
response
=
self
.
get_by_path
(
'Unknown/'
)
self
.
assertRedirects
(
response
,
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
''
})
+
'?slug=Unknown'
)
def
test_cleared_cache
(
self
):
"""Test the article cache is cleared after delete."""
# That bug is tested by one individual test, otherwise it could be
# revealed only by sequence of tests in some particular order
c
=
self
.
c
response
=
c
.
post
(
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
''
}),
{
'title'
:
'Test cache'
,
'slug'
:
'TestCache'
,
'content'
:
'Content 1'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
'TestCache/'
}))
response
=
c
.
post
(
reverse
(
'wiki:delete'
,
kwargs
=
{
'path'
:
'TestCache/'
}),
{
'confirm'
:
'on'
,
'purge'
:
'on'
,
'revision'
:
'2'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
''
}))
response
=
c
.
post
(
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
''
}),
{
'title'
:
'Test cache'
,
'slug'
:
'TestCache'
,
'content'
:
'Content 2'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
'TestCache/'
}))
# test the cache
self
.
assertContains
(
self
.
get_by_path
(
'TestCache/'
),
'Content 2'
)
def
test_article_list_update
(
self
):
"""Test automatic adding and removing the new article to/from article_list."""
c
=
self
.
c
root_data
=
{
'content'
:
'[article_list depth:2]'
,
'current_revision'
:
'1'
,
'preview'
:
'1'
,
'title'
:
'Root Article'
}
response
=
c
.
post
(
reverse
(
'wiki:edit'
,
kwargs
=
{
'path'
:
''
}),
root_data
)
self
.
assertRedirects
(
response
,
reverse
(
'wiki:root'
))
# verify the new article is added to article_list
response
=
c
.
post
(
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
''
}),
{
'title'
:
'Sub Article 1'
,
'slug'
:
'SubArticle1'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
'SubArticle1/'
}))
self
.
assertContains
(
self
.
get_by_path
(
''
),
'Sub Article 1'
)
self
.
assertContains
(
self
.
get_by_path
(
''
),
'SubArticle1/'
)
# verify the deleted article is removed from article_list
response
=
c
.
post
(
reverse
(
'wiki:delete'
,
kwargs
=
{
'path'
:
'SubArticle1/'
}),
{
'confirm'
:
'on'
,
'purge'
:
'on'
,
'revision'
:
'3'
})
message
=
c
.
cookies
[
'messages'
]
.
value
if
'messages'
in
c
.
cookies
else
None
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
''
}))
self
.
assertTrue
(
'This article together with all its contents are now completely gone'
in
message
)
self
.
assertNotContains
(
self
.
get_by_path
(
''
),
'Sub Article 1'
)
def
test_revision_conflict
(
self
):
"""Test the warning if the same article is beeing edited concurrently."""
c
=
self
.
c
response
=
c
.
post
(
reverse
(
'wiki:edit'
,
kwargs
=
{
'path'
:
''
}),
self
.
example_data
)
self
.
assertRedirects
(
response
,
reverse
(
'wiki:root'
))
response
=
c
.
post
(
reverse
(
'wiki:edit'
,
kwargs
=
{
'path'
:
''
}),
self
.
example_data
)
self
.
assertContains
(
response
,
'While you were editing, someone else changed the revision.'
)
#self.dump_db_status('after test_revision_conflict')
def
test_nested_create
(
self
):
c
=
self
.
c
response
=
c
.
post
(
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
''
}),
{
'title'
:
'Level 1'
,
'slug'
:
'Level1'
,
'content'
:
'Content level 1'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
'Level1/'
}))
response
=
c
.
post
(
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
'Level1/'
}),
{
'title'
:
'test'
,
'slug'
:
'Test'
,
'content'
:
'Content on level 2'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
'Level1/Test/'
}))
response
=
c
.
post
(
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
''
}),
{
'title'
:
'test'
,
'slug'
:
'Test'
,
'content'
:
'Other content on level 1'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
'Test/'
}))
self
.
assertContains
(
self
.
get_by_path
(
'Test/'
),
'Other content on level 1'
)
self
.
assertContains
(
self
.
get_by_path
(
'Level1/Test/'
),
'Content'
)
# on level 2')
wiki/tests/test_basic.py
0 → 100644
View file @
3f88b01e
from
__future__
import
print_function
from
__future__
import
unicode_literals
from
django.core.urlresolvers
import
reverse
from
django.test
import
TestCase
from
django.test.client
import
Client
import
pprint
class
InitialWebClientTest
(
TestCase
):
"""Tests by the dummy web client, with manual creating the root article."""
def
setUp
(
self
):
try
:
from
django.contrib.auth
import
get_user_model
User
=
get_user_model
()
except
ImportError
:
from
django.contrib.auth.models
import
User
User
.
objects
.
create_superuser
(
'admin'
,
'nobody@example.com'
,
'secret'
)
self
.
c
=
c
=
Client
()
c
.
login
(
username
=
'admin'
,
password
=
'secret'
)
def
test_root_article
(
self
):
"""Test redirecting to /create-root/, creating the root article and a simple markup."""
c
=
self
.
c
response
=
c
.
get
(
reverse
(
'wiki:root'
))
# url '/'
self
.
assertRedirects
(
response
,
reverse
(
'wiki:root_create'
))
# url '/create-root/'
response
=
c
.
post
(
reverse
(
'wiki:root_create'
),
{
'content'
:
'test heading h1
\n
====
\n
'
,
'title'
:
'Wiki Test'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:root'
))
response
=
c
.
get
(
reverse
(
'wiki:root'
))
self
.
assertContains
(
response
,
'test heading h1</h1>'
)
class
WebClientTest
(
TestCase
):
"""Tests by the dummy web client."""
def
setUp
(
self
):
try
:
from
django.contrib.auth
import
get_user_model
User
=
get_user_model
()
except
ImportError
:
from
django.contrib.auth.models
import
User
User
.
objects
.
create_superuser
(
'admin'
,
'nobody@example.com'
,
'secret'
)
self
.
c
=
c
=
Client
()
c
.
login
(
username
=
'admin'
,
password
=
'secret'
)
response
=
self
.
c
.
post
(
reverse
(
'wiki:root_create'
),
{
'content'
:
'root article content'
,
'title'
:
'Root Article'
})
self
.
example_data
=
{
'content'
:
'The modified text'
,
'current_revision'
:
'1'
,
'preview'
:
'1'
,
#'save': '1', # probably not too important
'summary'
:
'why edited'
,
'title'
:
'wiki test'
}
def
tearDown
(
self
):
# clear Article cache before the next test
from
wiki.models
import
Article
Article
.
objects
.
all
()
.
delete
()
def
get_by_path
(
self
,
path
):
"""Get the article response for the path.
Example: self.get_by_path("Level1/Slug2/").title
"""
return
self
.
c
.
get
(
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
path
}))
def
dump_db_status
(
self
,
message
=
''
):
"""Debug printing of the complete important database content."""
print
(
'*** db status *** {}'
.
format
(
message
))
from
wiki.models
import
Article
,
ArticleRevision
,
URLPath
for
klass
in
(
Article
,
ArticleRevision
,
URLPath
):
print
(
'* {} *'
.
format
(
klass
.
__name__
))
pprint
.
pprint
(
list
(
klass
.
objects
.
values
()),
width
=
240
)
def
test_preview_save
(
self
):
"""Test edit preview, edit save and messages."""
c
=
self
.
c
# test preview
response
=
c
.
post
(
reverse
(
'wiki:preview'
,
kwargs
=
{
'path'
:
''
}),
self
.
example_data
)
# url: '/_preview/'
self
.
assertContains
(
response
,
'The modified text'
)
# test save and messages
example2
=
self
.
example_data
.
copy
()
example2
[
'content'
]
=
'Something 2'
response
=
c
.
post
(
reverse
(
'wiki:edit'
,
kwargs
=
{
'path'
:
''
}),
example2
)
message
=
c
.
cookies
[
'messages'
]
.
value
if
'messages'
in
c
.
cookies
else
None
self
.
assertRedirects
(
response
,
reverse
(
'wiki:root'
))
response
=
c
.
get
(
reverse
(
'wiki:root'
))
#self.dump_db_status('test_preview_save')
# Why it doesn't display the latest revison text if other test preceded? It is correctly in the db.
self
.
assertContains
(
response
,
'Something 2'
)
self
.
assertTrue
(
'succesfully added'
in
message
)
def
test_redirect_create
(
self
):
"""Test that redirects to create if the slug is unknown."""
response
=
self
.
get_by_path
(
'Unknown/'
)
self
.
assertRedirects
(
response
,
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
''
})
+
'?slug=Unknown'
)
def
test_cleared_cache
(
self
):
"""Test the article cache is cleared after delete."""
# That bug is tested by one individual test, otherwise it could be
# revealed only by sequence of tests in some particular order
c
=
self
.
c
response
=
c
.
post
(
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
''
}),
{
'title'
:
'Test cache'
,
'slug'
:
'TestCache'
,
'content'
:
'Content 1'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
'TestCache/'
}))
response
=
c
.
post
(
reverse
(
'wiki:delete'
,
kwargs
=
{
'path'
:
'TestCache/'
}),
{
'confirm'
:
'on'
,
'purge'
:
'on'
,
'revision'
:
'2'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
''
}))
response
=
c
.
post
(
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
''
}),
{
'title'
:
'Test cache'
,
'slug'
:
'TestCache'
,
'content'
:
'Content 2'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
'TestCache/'
}))
# test the cache
self
.
assertContains
(
self
.
get_by_path
(
'TestCache/'
),
'Content 2'
)
def
test_article_list_update
(
self
):
"""Test automatic adding and removing the new article to/from article_list."""
c
=
self
.
c
root_data
=
{
'content'
:
'[article_list depth:2]'
,
'current_revision'
:
'1'
,
'preview'
:
'1'
,
'title'
:
'Root Article'
}
response
=
c
.
post
(
reverse
(
'wiki:edit'
,
kwargs
=
{
'path'
:
''
}),
root_data
)
self
.
assertRedirects
(
response
,
reverse
(
'wiki:root'
))
# verify the new article is added to article_list
response
=
c
.
post
(
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
''
}),
{
'title'
:
'Sub Article 1'
,
'slug'
:
'SubArticle1'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
'SubArticle1/'
}))
self
.
assertContains
(
self
.
get_by_path
(
''
),
'Sub Article 1'
)
self
.
assertContains
(
self
.
get_by_path
(
''
),
'SubArticle1/'
)
# verify the deleted article is removed from article_list
response
=
c
.
post
(
reverse
(
'wiki:delete'
,
kwargs
=
{
'path'
:
'SubArticle1/'
}),
{
'confirm'
:
'on'
,
'purge'
:
'on'
,
'revision'
:
'3'
})
message
=
c
.
cookies
[
'messages'
]
.
value
if
'messages'
in
c
.
cookies
else
None
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
''
}))
self
.
assertTrue
(
'This article together with all its contents are now completely gone'
in
message
)
self
.
assertNotContains
(
self
.
get_by_path
(
''
),
'Sub Article 1'
)
def
test_revision_conflict
(
self
):
"""Test the warning if the same article is beeing edited concurrently."""
c
=
self
.
c
response
=
c
.
post
(
reverse
(
'wiki:edit'
,
kwargs
=
{
'path'
:
''
}),
self
.
example_data
)
self
.
assertRedirects
(
response
,
reverse
(
'wiki:root'
))
response
=
c
.
post
(
reverse
(
'wiki:edit'
,
kwargs
=
{
'path'
:
''
}),
self
.
example_data
)
self
.
assertContains
(
response
,
'While you were editing, someone else changed the revision.'
)
#self.dump_db_status('after test_revision_conflict')
def
test_nested_create
(
self
):
c
=
self
.
c
response
=
c
.
post
(
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
''
}),
{
'title'
:
'Level 1'
,
'slug'
:
'Level1'
,
'content'
:
'Content level 1'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
'Level1/'
}))
response
=
c
.
post
(
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
'Level1/'
}),
{
'title'
:
'test'
,
'slug'
:
'Test'
,
'content'
:
'Content on level 2'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
'Level1/Test/'
}))
response
=
c
.
post
(
reverse
(
'wiki:create'
,
kwargs
=
{
'path'
:
''
}),
{
'title'
:
'test'
,
'slug'
:
'Test'
,
'content'
:
'Other content on level 1'
})
self
.
assertRedirects
(
response
,
reverse
(
'wiki:get'
,
kwargs
=
{
'path'
:
'Test/'
}))
self
.
assertContains
(
self
.
get_by_path
(
'Test/'
),
'Other content on level 1'
)
self
.
assertContains
(
self
.
get_by_path
(
'Level1/Test/'
),
'Content'
)
# on level 2')
wiki/views/article.py
View file @
3f88b01e
...
...
@@ -94,7 +94,7 @@ class Create(FormView, ArticleMixin):
messages
.
success
(
self
.
request
,
_
(
"New article '
%
s' created."
)
%
self
.
newpath
.
article
.
current_revision
.
title
)
transaction
.
commit
()
# TODO: Handle individual exceptions better and give good feedback.
except
Exception
,
e
:
except
Exception
as
e
:
log
.
exception
(
"Exception creating article."
)
transaction
.
rollback
()
if
self
.
request
.
user
.
is_superuser
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment