Skip to content

Commit

Permalink
Wrote some unit tests for basic Bloog functionality.
Browse files Browse the repository at this point in the history
  • Loading branch information
Arachnid committed Nov 22, 2008
1 parent da54c8c commit 88c75c1
Showing 1 changed file with 153 additions and 21 deletions.
174 changes: 153 additions & 21 deletions dev/tests/test.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,163 @@
import unittest
import urllib
from utils import template
from google.appengine.api import apiproxy_stub_map
from google.appengine.api import datastore_file_stub
from google.appengine.api import user_service_stub
from google.appengine.api import urlfetch_stub
from google.appengine.api import mail_stub
from google.appengine.api.memcache import memcache_stub
from google.appengine.ext import webapp
import os
import time

APP_ID = u'test_app'
AUTH_DOMAIN = 'gmail.com'
LOGGED_IN_USER = '[email protected]' # set to '' for no logged in user
HOST = 'localhost:8080'

os.environ['SERVER_SOFTWARE'] = 'TestServer/1.0'
os.environ['APPLICATION_ID'] = 'test_app'
os.environ['TZ'] = 'UTC'
os.environ['USER_IS_ADMIN'] = '1'
time.tzset()

from handlers.bloog import blog
import models.blog

class BloogTest(unittest.TestCase):

def setUp(self):
# Start with a fresh api proxy.
apiproxy_stub_map.apiproxy = apiproxy_stub_map.APIProxyStubMap()

# Use a fresh stub datastore.
stub = datastore_file_stub.DatastoreFileStub(APP_ID, '/dev/null',
'/dev/null')
apiproxy_stub_map.apiproxy.RegisterStub('datastore_v3', stub)

# Use a fresh stub UserService.
apiproxy_stub_map.apiproxy.RegisterStub(
'user', user_service_stub.UserServiceStub())
os.environ['AUTH_DOMAIN'] = AUTH_DOMAIN
os.environ['USER_EMAIL'] = LOGGED_IN_USER

# Use a fresh urlfetch stub.
apiproxy_stub_map.apiproxy.RegisterStub(
'urlfetch', urlfetch_stub.URLFetchServiceStub())

# Use a fresh mail stub.
apiproxy_stub_map.apiproxy.RegisterStub(
'mail', mail_stub.MailServiceStub())

# Use a fresh memcache stub
apiproxy_stub_map.apiproxy.RegisterStub(
'memcache', memcache_stub.MemcacheServiceStub())

# Create a fake remplate renderer
self.render_calls = []
def template_render(filename, params, debug, template_dirs):
self.render_calls.append(params)
template.render = template_render

def createHandler(self, cls, uri, env=None, auth=False):
handler = cls()
environ = {
'wsgi.url_scheme': 'http',
'HTTP_HOST': HOST,
'SCRIPT_NAME': uri,
}
if auth:
environ['HTTP_COOKIE'] = 'dev_appserver_login="[email protected]:True"'
if env:
environ.update(env)
request = webapp.Request(environ)
response = webapp.Response()
handler.initialize(request, response)
return handler, request, response

def testRoot(self):
root, request, response = self.createHandler(blog.RootHandler, '/')
root.get()
self.failUnlessEqual(len(self.render_calls), 1)
self.failUnlessEqual(self.render_calls[0]['articles'], [])

class MyTest(unittest.TestCase):
def testArticleSubmission(self):
root, request, response = self.createHandler(blog.RootHandler, '/', {
'CONTENT_TYPE': 'application/x-www-form-urlencoded',
'REQUEST_METHOD': 'POST',
})
postdata = {
'title': 'Test post',
'body': 'Post body',
'format': 'html',
'published': '',
'updated': '',
'tags': 'foo,bar',
}
request.body = urllib.urlencode(postdata)
root.post()
self.failUnlessEqual(response.out.getvalue(), '/Test-post')

article = models.blog.Article.all().get()
self.failUnlessEqual(article.permalink, 'Test-post')
self.failUnlessEqual(article.title, postdata['title'])
self.failUnlessEqual(article.body, postdata['body'])
self.failUnlessEqual(article.tags, postdata['tags'].split(','))
self.failUnlessEqual(article.article_type, 'article')

articles, request, response = self.createHandler(blog.ArticlesHandler,
'/articles')
articles.get()
self.failUnlessEqual(len(self.render_calls), 1)
self.failUnlessEqual(self.render_calls[0]['articles'][0].key(),
article.key())

handler, request, response = self.createHandler(blog.ArticleHandler,
'/Test-post')
handler.get('Test-post')
self.failUnlessEqual(len(self.render_calls), 2)
self.failUnlessEqual(self.render_calls[1]['article'].key(),
article.key())

def setUp(self):
# Ensure we're in UTC.
os.environ['TZ'] = 'UTC'
time.tzset()
def testPostSubmission(self):
url = '2008/1'
root, request, response = self.createHandler(blog.MonthHandler, url, {
'CONTENT_TYPE': 'application/x-www-form-urlencoded',
'REQUEST_METHOD': 'POST',
})
postdata = {
'title': 'Test blog post',
'body': 'Another post body',
'format': 'html',
'published': '2008-01-01 12:00:00',
'updated': '',
'tags': 'foo,baz,bleh',
}
request.body = urllib.urlencode(postdata)
root.post('2008', '01')
self.failUnlessEqual(response.out.getvalue(), '/2008/1/Test-blog-post')

# Start with a fresh api proxy.
apiproxy_stub_map.apiproxy = apiproxy_stub_map.APIProxyStubMap()
article = models.blog.Article.all().get()
self.failUnlessEqual(article.permalink, '2008/1/Test-blog-post')
self.failUnlessEqual(article.title, postdata['title'])
self.failUnlessEqual(article.body, postdata['body'])
self.failUnlessEqual(article.tags, postdata['tags'].split(','))
self.failUnlessEqual(article.article_type, 'blog entry')

# Use a fresh stub datastore.
stub = datastore_file_stub.DatastoreFileStub(APP_ID, '/dev/null', '/dev/null')
apiproxy_stub_map.apiproxy.RegisterStub('datastore_v3', stub)
root, request, response = self.createHandler(blog.RootHandler, '/')
root.get()
self.failUnlessEqual(len(self.render_calls), 1)
self.failUnlessEqual(self.render_calls[0]['articles'][0].key(),
article.key())

# Use a fresh stub UserService.
apiproxy_stub_map.apiproxy.RegisterStub(
'user', user_service_stub.UserServiceStub())
os.environ['AUTH_DOMAIN'] = AUTH_DOMAIN
os.environ['USER_EMAIL'] = LOGGED_IN_USER
handler, request, response = self.createHandler(blog.BlogEntryHandler,
'/2008/1/Test-blog-post')
handler.get('2008', '1', 'Test-blog-post')
self.failUnlessEqual(len(self.render_calls), 2)
self.failUnlessEqual(self.render_calls[1]['article'].key(),
article.key())

# Use a fresh urlfetch stub.
apiproxy_stub_map.apiproxy.RegisterStub(
'urlfetch', urlfetch_stub.URLFetchServiceStub())

# Use a fresh mail stub.
apiproxy_stub_map.apiproxy.RegisterStub(
'mail', mail_stub.MailServiceStub())
if __name__ == '__main__':
unittest.main()

0 comments on commit 88c75c1

Please sign in to comment.