Most unit tests for controller.Forums(). Still need unit tests for controller.Forum.create_thread().
This commit is contained in:
parent
58a7ca67af
commit
1baa85bff1
|
@ -97,10 +97,17 @@ class Forum( object ):
|
|||
)
|
||||
def index( self, start = 0, count = 50, user_id = None ):
|
||||
"""
|
||||
Provide the information necessary to display the current threads within a forum.
|
||||
Provide the information necessary to display the current threads within a forum (in reverse
|
||||
chronological order).
|
||||
|
||||
@type start: integer or NoneType
|
||||
@param start: index of first forum thread to display (optional, defaults to 0)
|
||||
@type count: integer or NoneType
|
||||
@param count: how many forum threads to display (optional, defaults to quite a few)
|
||||
@type user_id: unicode or NoneType
|
||||
@param user_id: id of the current user
|
||||
@rtype: unicode
|
||||
@return: rendered HTML page
|
||||
"""
|
||||
result = self.__users.current( user_id )
|
||||
parents = [ notebook for notebook in result[ u"notebooks" ] if notebook.trash_id and not notebook.deleted ]
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
import urllib
|
||||
import cherrypy
|
||||
from datetime import datetime
|
||||
from model.Note import Note
|
||||
from model.Notebook import Notebook
|
||||
from model.User import User
|
||||
from model.Tag import Tag
|
||||
from Test_controller import Test_controller
|
||||
|
||||
|
||||
|
@ -40,16 +43,436 @@ class Test_forums( Test_controller ):
|
|||
self.database.save( self.anonymous )
|
||||
self.database.execute( self.anonymous.sql_save_notebook( self.anon_notebook.object_id ) )
|
||||
|
||||
def XXXtest_index( self ): # TODO
|
||||
tag_id = self.database.next_id( Tag, commit = False )
|
||||
self.forum_tag = Tag.create(
|
||||
tag_id,
|
||||
notebook_id = None, # this tag is not in the namespace of a single notebook
|
||||
user_id = self.user.object_id,
|
||||
name = u"forum",
|
||||
description = u"a discussion forum"
|
||||
)
|
||||
self.database.save( self.forum_tag )
|
||||
|
||||
self.general_thread = Notebook.create( self.database.next_id( Notebook ), u"Welcome to the general forum!" )
|
||||
self.database.save( self.general_thread )
|
||||
self.database.execute(
|
||||
self.anonymous.sql_save_notebook( self.general_thread.object_id, read_write = Notebook.READ_WRITE_FOR_OWN_NOTES ),
|
||||
)
|
||||
self.database.execute(
|
||||
self.anonymous.sql_save_notebook_tag( self.general_thread.object_id, self.forum_tag.object_id, value = u"general" ),
|
||||
)
|
||||
|
||||
self.support_thread = Notebook.create( self.database.next_id( Notebook ), u"Welcome to the support forum!" )
|
||||
self.database.save( self.support_thread )
|
||||
self.database.execute(
|
||||
self.anonymous.sql_save_notebook( self.support_thread.object_id, read_write = Notebook.READ_WRITE_FOR_OWN_NOTES ),
|
||||
)
|
||||
self.database.execute(
|
||||
self.anonymous.sql_save_notebook_tag( self.support_thread.object_id, self.forum_tag.object_id, value = u"support" ),
|
||||
)
|
||||
|
||||
def test_index( self ):
|
||||
result = self.http_get( "/forums/" )
|
||||
|
||||
assert result
|
||||
assert result.get( u"redirect" ) is None
|
||||
assert result[ u"user" ].username == u"anonymous"
|
||||
assert len( result[ u"notebooks" ] ) == 1
|
||||
assert len( result[ u"notebooks" ] ) == 3
|
||||
assert result[ u"first_notebook" ] == None
|
||||
assert result[ u"login_url" ] == u"https://luminotes.com/notebooks/%s?note_id=%s" % (
|
||||
self.anon_notebook.object_id, self.login_note.object_id,
|
||||
)
|
||||
assert result[ u"logout_url" ] == u"https://luminotes.com/users/logout"
|
||||
assert result[ u"rate_plan" ]
|
||||
|
||||
def test_index_with_login( self ):
|
||||
self.login()
|
||||
|
||||
result = self.http_get( "/forums/", session_id = self.session_id )
|
||||
|
||||
assert result
|
||||
assert result.get( u"redirect" ) is None
|
||||
assert result[ u"user" ].username == self.user.username
|
||||
assert len( result[ u"notebooks" ] ) == 4
|
||||
assert result[ u"first_notebook" ].object_id == self.notebook.object_id
|
||||
assert result[ u"login_url" ] == None
|
||||
assert result[ u"logout_url" ] == u"https://luminotes.com/users/logout"
|
||||
assert result[ u"rate_plan" ]
|
||||
|
||||
@staticmethod
|
||||
def __assert_threads_equal( thread1, thread2 ):
|
||||
assert thread1.object_id == thread2.object_id
|
||||
assert thread1.revision == thread2.revision
|
||||
assert thread1.name == thread2.name
|
||||
assert thread1.trash_id == thread2.trash_id
|
||||
assert thread1.read_write == thread2.read_write
|
||||
assert thread1.owner == thread2.owner
|
||||
assert thread1.deleted == thread2.deleted
|
||||
assert thread1.user_id == thread2.user_id
|
||||
assert thread1.rank == thread2.rank
|
||||
|
||||
def test_general( self ):
|
||||
result = self.http_get( "/forums/general/" )
|
||||
|
||||
assert result[ u"forum_name" ] == u"general"
|
||||
assert len( result[ u"threads" ] ) == 1
|
||||
|
||||
self.__assert_threads_equal( result[ u"threads" ][ 0 ], self.general_thread )
|
||||
|
||||
assert result[ u"start" ] == 0
|
||||
assert result[ u"count" ] == 50
|
||||
assert result[ u"total_thread_count" ] == 1
|
||||
|
||||
def test_support( self ):
|
||||
result = self.http_get( "/forums/support/" )
|
||||
|
||||
assert result[ u"forum_name" ] == u"support"
|
||||
assert len( result[ u"threads" ] ) == 1
|
||||
|
||||
self.__assert_threads_equal( result[ u"threads" ][ 0 ], self.support_thread )
|
||||
|
||||
assert result[ u"start" ] == 0
|
||||
assert result[ u"count" ] == 50
|
||||
assert result[ u"total_thread_count" ] == 1
|
||||
|
||||
def test_unknown_forum( self ):
|
||||
result = self.http_get( "/forums/unknown/" )
|
||||
|
||||
assert u"404" in result[ "body" ][ 0 ]
|
||||
|
||||
def __make_extra_threads( self ):
|
||||
self.general_thread2 = Notebook.create( self.database.next_id( Notebook ), u"How does this thing work?" )
|
||||
self.database.save( self.general_thread2 )
|
||||
self.database.execute(
|
||||
self.anonymous.sql_save_notebook( self.general_thread2.object_id, read_write = Notebook.READ_WRITE_FOR_OWN_NOTES ),
|
||||
)
|
||||
self.database.execute(
|
||||
self.anonymous.sql_save_notebook_tag( self.general_thread2.object_id, self.forum_tag.object_id, value = u"general" ),
|
||||
)
|
||||
|
||||
self.general_thread3 = Notebook.create( self.database.next_id( Notebook ), u"I have a problem with my pantalones." )
|
||||
self.database.save( self.general_thread3 )
|
||||
self.database.execute(
|
||||
self.anonymous.sql_save_notebook( self.general_thread3.object_id, read_write = Notebook.READ_WRITE_FOR_OWN_NOTES ),
|
||||
)
|
||||
self.database.execute(
|
||||
self.anonymous.sql_save_notebook_tag( self.general_thread3.object_id, self.forum_tag.object_id, value = u"general" ),
|
||||
)
|
||||
|
||||
def test_general_several_threads( self ):
|
||||
self.__make_extra_threads()
|
||||
|
||||
result = self.http_get( "/forums/general/" )
|
||||
|
||||
assert result[ u"forum_name" ] == u"general"
|
||||
assert len( result[ u"threads" ] ) == 3
|
||||
|
||||
self.__assert_threads_equal( result[ u"threads" ][ 0 ], self.general_thread3 )
|
||||
self.__assert_threads_equal( result[ u"threads" ][ 1 ], self.general_thread2 )
|
||||
self.__assert_threads_equal( result[ u"threads" ][ 2 ], self.general_thread )
|
||||
|
||||
assert result[ u"start" ] == 0
|
||||
assert result[ u"count" ] == 50
|
||||
assert result[ u"total_thread_count" ] == 3
|
||||
|
||||
def test_general_several_threads_with_start( self ):
|
||||
self.__make_extra_threads()
|
||||
|
||||
result = self.http_get( "/forums/general/?start=1" )
|
||||
|
||||
assert result[ u"forum_name" ] == u"general"
|
||||
assert len( result[ u"threads" ] ) == 2
|
||||
|
||||
self.__assert_threads_equal( result[ u"threads" ][ 0 ], self.general_thread2 )
|
||||
self.__assert_threads_equal( result[ u"threads" ][ 1 ], self.general_thread )
|
||||
|
||||
assert result[ u"start" ] == 1
|
||||
assert result[ u"count" ] == 50
|
||||
assert result[ u"total_thread_count" ] == 3
|
||||
|
||||
def test_general_several_threads_with_count( self ):
|
||||
self.__make_extra_threads()
|
||||
|
||||
result = self.http_get( "/forums/general/?count=2" )
|
||||
|
||||
assert result[ u"forum_name" ] == u"general"
|
||||
assert len( result[ u"threads" ] ) == 2
|
||||
|
||||
self.__assert_threads_equal( result[ u"threads" ][ 0 ], self.general_thread3 )
|
||||
self.__assert_threads_equal( result[ u"threads" ][ 1 ], self.general_thread2 )
|
||||
|
||||
assert result[ u"start" ] == 0
|
||||
assert result[ u"count" ] == 2
|
||||
assert result[ u"total_thread_count" ] == 3
|
||||
|
||||
def test_general_several_threads_with_start_and_count( self ):
|
||||
self.__make_extra_threads()
|
||||
|
||||
result = self.http_get( "/forums/general/?start=1&count=1" )
|
||||
|
||||
assert result[ u"forum_name" ] == u"general"
|
||||
assert len( result[ u"threads" ] ) == 1
|
||||
|
||||
self.__assert_threads_equal( result[ u"threads" ][ 0 ], self.general_thread2 )
|
||||
|
||||
assert result[ u"start" ] == 1
|
||||
assert result[ u"count" ] == 1
|
||||
assert result[ u"total_thread_count" ] == 3
|
||||
|
||||
def test_general_thread_default( self ):
|
||||
result = self.http_get( "/forums/general/%s" % self.general_thread.object_id )
|
||||
|
||||
assert result.get( u"user" ).object_id == self.anonymous.object_id
|
||||
assert len( result.get( u"notebooks" ) ) == 3
|
||||
assert result.get( u"notebooks" )[ 0 ].object_id == self.anon_notebook.object_id
|
||||
assert result.get( u"login_url" )
|
||||
assert result.get( u"logout_url" )
|
||||
assert result.get( u"rate_plan" )
|
||||
assert result.get( u"notebook" ).object_id == self.general_thread.object_id
|
||||
assert len( result.get( u"startup_notes" ) ) == 0
|
||||
assert result.get( u"notes" ) == []
|
||||
assert result.get( u"parent_id" ) == None
|
||||
assert result.get( u"note_read_write" ) in ( None, True )
|
||||
assert result.get( u"total_notes_count" ) == 0
|
||||
|
||||
invites = result[ "invites" ]
|
||||
assert len( invites ) == 0
|
||||
|
||||
user = self.database.load( User, self.user.object_id )
|
||||
assert user.storage_bytes == 0
|
||||
|
||||
def test_general_thread_default_with_login( self ):
|
||||
self.login()
|
||||
|
||||
result = self.http_get(
|
||||
"/forums/general/%s" % self.general_thread.object_id,
|
||||
session_id = self.session_id,
|
||||
)
|
||||
|
||||
assert result.get( u"user" ).object_id == self.user.object_id
|
||||
assert len( result.get( u"notebooks" ) ) == 4
|
||||
assert result.get( u"notebooks" )[ 0 ].object_id == self.notebook.object_id
|
||||
assert result.get( u"login_url" ) is None
|
||||
assert result.get( u"logout_url" )
|
||||
assert result.get( u"rate_plan" )
|
||||
assert result.get( u"notebook" ).object_id == self.general_thread.object_id
|
||||
assert len( result.get( u"startup_notes" ) ) == 0
|
||||
assert result.get( u"notes" ) == []
|
||||
assert result.get( u"parent_id" ) == None
|
||||
assert result.get( u"note_read_write" ) in ( None, True )
|
||||
assert result.get( u"total_notes_count" ) == 0
|
||||
|
||||
invites = result[ "invites" ]
|
||||
assert len( invites ) == 0
|
||||
|
||||
user = self.database.load( User, self.user.object_id )
|
||||
assert user.storage_bytes == 0
|
||||
|
||||
def test_general_thread_default_with_unknown_thread_id( self ):
|
||||
path = "/forums/general/unknownthreadid"
|
||||
result = self.http_get( path )
|
||||
|
||||
headers = result.get( "headers" )
|
||||
assert headers
|
||||
assert headers.get( "Location" ) == u"http:///login?after_login=%s" % urllib.quote( path )
|
||||
|
||||
def __make_notes( self ):
|
||||
note_id = self.database.next_id( Note, commit = False )
|
||||
note = Note.create(
|
||||
note_id,
|
||||
u"<h3>foo</h3>bar",
|
||||
self.general_thread.object_id,
|
||||
startup = True,
|
||||
rank = 0,
|
||||
user_id = self.anonymous.object_id,
|
||||
creation = datetime.now(),
|
||||
)
|
||||
self.database.save( note, commit = False )
|
||||
self.note = note
|
||||
|
||||
note_id = self.database.next_id( Note, commit = False )
|
||||
note = Note.create(
|
||||
note_id,
|
||||
u"<h3>bar</h3>baz",
|
||||
self.general_thread.object_id,
|
||||
startup = True,
|
||||
rank = 0,
|
||||
user_id = self.anonymous.object_id,
|
||||
creation = datetime.now(),
|
||||
)
|
||||
self.database.save( note, commit = False )
|
||||
|
||||
note_id = self.database.next_id( Note, commit = False )
|
||||
note = Note.create(
|
||||
note_id,
|
||||
u"<h3>baz</h3>quux",
|
||||
self.general_thread.object_id,
|
||||
startup = True,
|
||||
rank = 0,
|
||||
user_id = self.anonymous.object_id,
|
||||
creation = datetime.now(),
|
||||
)
|
||||
self.database.save( note, commit = False )
|
||||
|
||||
self.database.commit()
|
||||
|
||||
def test_general_thread_default_with_notes( self ):
|
||||
self.__make_notes()
|
||||
|
||||
result = self.http_get( "/forums/general/%s" % self.general_thread.object_id )
|
||||
|
||||
assert result.get( u"user" ).object_id == self.anonymous.object_id
|
||||
assert len( result.get( u"notebooks" ) ) == 3
|
||||
assert result.get( u"notebooks" )[ 0 ].object_id == self.anon_notebook.object_id
|
||||
assert result.get( u"login_url" )
|
||||
assert result.get( u"logout_url" )
|
||||
assert result.get( u"rate_plan" )
|
||||
assert result.get( u"notebook" ).object_id == self.general_thread.object_id
|
||||
assert len( result.get( u"startup_notes" ) ) == 3
|
||||
assert result[ u"startup_notes" ][ 0 ].title == u"foo"
|
||||
assert result[ u"startup_notes" ][ 1 ].title == u"bar"
|
||||
assert result[ u"startup_notes" ][ 2 ].title == u"baz"
|
||||
assert len( result.get( u"notes" ) ) == 3
|
||||
assert result[ u"notes" ][ 0 ].title == u"foo"
|
||||
assert result[ u"notes" ][ 1 ].title == u"bar"
|
||||
assert result[ u"notes" ][ 2 ].title == u"baz"
|
||||
assert result.get( u"parent_id" ) == None
|
||||
assert result.get( u"note_read_write" ) in ( None, True )
|
||||
assert result.get( u"total_notes_count" ) == 3
|
||||
|
||||
invites = result[ "invites" ]
|
||||
assert len( invites ) == 0
|
||||
|
||||
user = self.database.load( User, self.user.object_id )
|
||||
assert user.storage_bytes == 0
|
||||
|
||||
def test_general_thread_default_with_notes_and_start( self ):
|
||||
self.__make_notes()
|
||||
|
||||
result = self.http_get( "/forums/general/%s?start=1" % self.general_thread.object_id )
|
||||
|
||||
assert result.get( u"user" ).object_id == self.anonymous.object_id
|
||||
assert len( result.get( u"notebooks" ) ) == 3
|
||||
assert result.get( u"notebooks" )[ 0 ].object_id == self.anon_notebook.object_id
|
||||
assert result.get( u"login_url" )
|
||||
assert result.get( u"logout_url" )
|
||||
assert result.get( u"rate_plan" )
|
||||
assert result.get( u"notebook" ).object_id == self.general_thread.object_id
|
||||
assert len( result.get( u"startup_notes" ) ) == 3
|
||||
assert result[ u"startup_notes" ][ 0 ].title == u"foo"
|
||||
assert result[ u"startup_notes" ][ 1 ].title == u"bar"
|
||||
assert result[ u"startup_notes" ][ 2 ].title == u"baz"
|
||||
assert len( result.get( u"notes" ) ) == 2
|
||||
assert result[ u"notes" ][ 0 ].title == u"bar"
|
||||
assert result[ u"notes" ][ 1 ].title == u"baz"
|
||||
assert result.get( u"parent_id" ) == None
|
||||
assert result.get( u"note_read_write" ) in ( None, True )
|
||||
assert result.get( u"total_notes_count" ) == 3
|
||||
|
||||
invites = result[ "invites" ]
|
||||
assert len( invites ) == 0
|
||||
|
||||
user = self.database.load( User, self.user.object_id )
|
||||
assert user.storage_bytes == 0
|
||||
|
||||
def test_general_thread_default_with_notes_and_count( self ):
|
||||
self.__make_notes()
|
||||
|
||||
result = self.http_get( "/forums/general/%s?count=2" % self.general_thread.object_id )
|
||||
|
||||
assert result.get( u"user" ).object_id == self.anonymous.object_id
|
||||
assert len( result.get( u"notebooks" ) ) == 3
|
||||
assert result.get( u"notebooks" )[ 0 ].object_id == self.anon_notebook.object_id
|
||||
assert result.get( u"login_url" )
|
||||
assert result.get( u"logout_url" )
|
||||
assert result.get( u"rate_plan" )
|
||||
assert result.get( u"notebook" ).object_id == self.general_thread.object_id
|
||||
assert len( result.get( u"startup_notes" ) ) == 3
|
||||
assert result[ u"startup_notes" ][ 0 ].title == u"foo"
|
||||
assert result[ u"startup_notes" ][ 1 ].title == u"bar"
|
||||
assert result[ u"startup_notes" ][ 2 ].title == u"baz"
|
||||
assert len( result.get( u"notes" ) ) == 2
|
||||
assert result[ u"notes" ][ 0 ].title == u"foo"
|
||||
assert result[ u"notes" ][ 1 ].title == u"bar"
|
||||
assert result.get( u"parent_id" ) == None
|
||||
assert result.get( u"note_read_write" ) in ( None, True )
|
||||
assert result.get( u"total_notes_count" ) == 3
|
||||
|
||||
invites = result[ "invites" ]
|
||||
assert len( invites ) == 0
|
||||
|
||||
user = self.database.load( User, self.user.object_id )
|
||||
assert user.storage_bytes == 0
|
||||
|
||||
def test_general_thread_default_with_notes_and_start_and_count( self ):
|
||||
self.__make_notes()
|
||||
|
||||
result = self.http_get( "/forums/general/%s?start=1&count=1" % self.general_thread.object_id )
|
||||
|
||||
assert result.get( u"user" ).object_id == self.anonymous.object_id
|
||||
assert len( result.get( u"notebooks" ) ) == 3
|
||||
assert result.get( u"notebooks" )[ 0 ].object_id == self.anon_notebook.object_id
|
||||
assert result.get( u"login_url" )
|
||||
assert result.get( u"logout_url" )
|
||||
assert result.get( u"rate_plan" )
|
||||
assert result.get( u"notebook" ).object_id == self.general_thread.object_id
|
||||
assert len( result.get( u"startup_notes" ) ) == 3
|
||||
assert result[ u"startup_notes" ][ 0 ].title == u"foo"
|
||||
assert result[ u"startup_notes" ][ 1 ].title == u"bar"
|
||||
assert result[ u"startup_notes" ][ 2 ].title == u"baz"
|
||||
assert len( result.get( u"notes" ) ) == 1
|
||||
assert result[ u"notes" ][ 0 ].title == u"bar"
|
||||
assert result.get( u"parent_id" ) == None
|
||||
assert result.get( u"note_read_write" ) in ( None, True )
|
||||
assert result.get( u"total_notes_count" ) == 3
|
||||
|
||||
invites = result[ "invites" ]
|
||||
assert len( invites ) == 0
|
||||
|
||||
user = self.database.load( User, self.user.object_id )
|
||||
assert user.storage_bytes == 0
|
||||
|
||||
def test_general_thread_default_with_notes_and_note_id( self ):
|
||||
self.__make_notes()
|
||||
|
||||
result = self.http_get( "/forums/general/%s?note_id=%s" % ( self.general_thread.object_id, self.note.object_id ) )
|
||||
|
||||
assert result.get( u"user" ).object_id == self.anonymous.object_id
|
||||
assert len( result.get( u"notebooks" ) ) == 3
|
||||
assert result.get( u"notebooks" )[ 0 ].object_id == self.anon_notebook.object_id
|
||||
assert result.get( u"login_url" )
|
||||
assert result.get( u"logout_url" )
|
||||
assert result.get( u"rate_plan" )
|
||||
assert result.get( u"notebook" ).object_id == self.general_thread.object_id
|
||||
assert len( result.get( u"startup_notes" ) ) == 3
|
||||
assert result[ u"startup_notes" ][ 0 ].title == u"foo"
|
||||
assert result[ u"startup_notes" ][ 1 ].title == u"bar"
|
||||
assert result[ u"startup_notes" ][ 2 ].title == u"baz"
|
||||
assert len( result.get( u"notes" ) ) == 1
|
||||
assert result[ u"notes" ][ 0 ].title == u"foo"
|
||||
assert result[ u"notes" ][ 0 ].object_id == self.note.object_id
|
||||
assert result.get( u"parent_id" ) == None
|
||||
assert result.get( u"note_read_write" ) in ( None, True )
|
||||
assert result.get( u"total_notes_count" ) == 3
|
||||
|
||||
invites = result[ "invites" ]
|
||||
assert len( invites ) == 0
|
||||
|
||||
user = self.database.load( User, self.user.object_id )
|
||||
assert user.storage_bytes == 0
|
||||
|
||||
def login( self ):
|
||||
result = self.http_post( "/users/login", dict(
|
||||
username = self.username,
|
||||
password = self.password,
|
||||
login_button = u"login",
|
||||
) )
|
||||
self.session_id = result[ u"session_id" ]
|
||||
|
||||
def login2( self ):
|
||||
result = self.http_post( "/users/login", dict(
|
||||
username = self.username2,
|
||||
password = self.password2,
|
||||
login_button = u"login",
|
||||
) )
|
||||
self.session_id = result[ u"session_id" ]
|
||||
|
|
Reference in New Issue