diff -r a525a55833f1 -r 0ede2f3adbc1 app/taggable-mixin/taggable_tests.py --- a/app/taggable-mixin/taggable_tests.py Fri Jul 24 21:00:04 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,243 +0,0 @@ -#!/usr/bin/env python - -#Copyright 2008 Adam A. Crossland -# -#Licensed under the Apache License, Version 2.0 (the "License"); -#you may not use this file except in compliance with the License. -#You may obtain a copy of the License at -# -#http://www.apache.org/licenses/LICENSE-2.0 -# -#Unless required by applicable law or agreed to in writing, software -#distributed under the License is distributed on an "AS IS" BASIS, -#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -#See the License for the specific language governing permissions and -#limitations under the License. - -import sys -import os.path - -APPENGINE_PATH = '../../thirdparty/google_appengine' - -# Add app-engine related libraries to your path -paths = [ - APPENGINE_PATH, - os.path.join(APPENGINE_PATH, 'lib', 'django'), - os.path.join(APPENGINE_PATH, 'lib', 'webob'), - os.path.join(APPENGINE_PATH, 'lib', 'yaml', 'lib') -] -for path in paths: - if not os.path.exists(path): - raise 'Path does not exist: %s' % path -sys.path = paths + sys.path - -import unittest -from google.appengine.api import apiproxy_stub_map -from google.appengine.api import datastore_file_stub -from google.appengine.api import mail_stub -from google.appengine.api import user_service_stub -from google.appengine.ext import webapp -from google.appengine.ext import db -from google.appengine.api.memcache import memcache_stub -from taggable import * - -APP_ID = u'taggable' -AUTH_DOMAIN = 'gmail.com' -LOGGED_IN_USER = 'me@example.com' # set to '' for no logged in user - -BLOG_NAME='test_blog' - -class BlogIndex(db.Model): - "A global counter used to provide the index of the next blog post." - index = db.IntegerProperty(required=True, default=0) - "The next available index for a Post." - -class Post(Taggable, db.Model): - index = db.IntegerProperty(required=True, default=0) - body = db.TextProperty(required = True) - title = db.StringProperty() - added = db.DateTimeProperty(auto_now_add=True) - added_month = db.IntegerProperty() - added_year = db.IntegerProperty() - edited = db.DateTimeProperty() - - def __init__(self, parent=None, key_name=None, app=None, **entity_values): - db.Model.__init__(self, parent, key_name, app, **entity_values) - Taggable.__init__(self) - - def get_all_posts(): - return db.GqlQuery("SELECT * from Post ORDER BY added DESC") - Get_All_Posts = staticmethod(get_all_posts) - - @classmethod - def get_posts(cls, start_index=0, count=10): - start_index = int(start_index) # Just make sure that we have an int - posts = Post.gql('WHERE index <= :1 ORDER BY index DESC', start_index).fetch(count + 1) - if len(posts) > count: - posts = posts[:count] - - return posts - - @classmethod - def new_post(cls, new_title=None, new_body=None, new_tags=[]): - new_post = None - if new_title is not None and new_body is not None: - def txn(): - blog_index = BlogIndex.get_by_key_name(BLOG_NAME) - if blog_index is None: - blog_index = BlogIndex(key_name=BLOG_NAME) - new_index = blog_index.index - blog_index.index += 1 - blog_index.put() - - new_post_key_name = BLOG_NAME + str(new_index) - new_post = Post(key_name=new_post_key_name, parent=blog_index, - index = new_index, title = new_title, - body = new_body) - new_post.put() - - return new_post - new_post = db.run_in_transaction(txn) - - new_post.tags = new_tags - new_post.put() - else: - raise Exception("Must supply both new_title and new_body when creating a new Post.") - - return new_post - - def delete(self): - # Perform any actions that are required to maintain data integrity - # when this Post is delete. - # Disassociate this Post from any Tag - self.set_tags([]) - - # Finally, call the real delete - db.Model.delete(self) - -class MyTest(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 memcache stub. - apiproxy_stub_map.apiproxy.RegisterStub('memcache', memcache_stub.MemcacheServiceStub()) - - # 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 - os.environ['APPLICATION_ID'] = APP_ID - - def testSimpleTagAdding(self): - new_post = Post.new_post(new_title='test post 1', new_body='This is a test post. Please ignore.') - assert new_post is not None - - new_post.tags = "test, testing, tests" - self.assertEqual(len(new_post.tags), 3) - - def testComplexTagAdding(self): - new_post = Post.new_post(new_title='test post 1', new_body='This is a test post. Please ignore.') - assert new_post is not None - - new_post.tags = " test, testing, tests,,,tag with spaces" - self.assertEqual(len(new_post.tags), 4) - - tag = new_post.tags[3] - assert tag is not None - self.assertEqual(tag.tag, 'tag with spaces') - self.assertEqual(tag.tagged_count, 1) - - tag2 = Tag.get_by_name('tag with spaces') - assert tag2 is not None - self.assertEqual(tag.tag, 'tag with spaces') - self.assertEqual(tag.tagged_count, 1) - - def testTagDeletion(self): - new_post = Post.new_post(new_title='test post 2', new_body='This is a test post. Please continue to ignore.') - assert new_post is not None - - new_post.tags = "test, testing, tests" - self.assertEqual(len(new_post.tags), 3) - - new_post.tags = "test" - self.assertEqual(len(new_post.tags), 1) - - def testTagCounts(self): - new_post3 = Post.new_post(new_title='test post 3', new_body='This is a test post. Please continue to ignore.') - assert new_post3 is not None - new_post3.tags = "foo, bar, baz" - new_post4 = Post.new_post(new_title='test post 4', new_body='This is a test post. Please continue to ignore.') - assert new_post4 is not None - new_post4.tags = "bar, baz, bletch" - new_post5 = Post.new_post(new_title='test post 5', new_body='This is a test post. Please continue to ignore.') - assert new_post5 is not None - new_post5.tags = "baz, bletch, quux" - - foo_tag = Tag.get_by_name('foo') - assert foo_tag is not None - self.assertEqual(foo_tag.tagged_count, 1) - - bar_tag = Tag.get_by_name('bar') - assert bar_tag is not None - self.assertEqual(bar_tag.tagged_count, 2) - - baz_tag = Tag.get_by_name('baz') - assert baz_tag is not None - self.assertEqual(baz_tag.tagged_count, 3) - - bletch_tag = Tag.get_by_name('bletch') - assert bletch_tag is not None - self.assertEqual(bletch_tag.tagged_count, 2) - - quux_tag = Tag.get_by_name('quux') - assert quux_tag is not None - self.assertEqual(quux_tag.tagged_count, 1) - - new_post3.tags = 'bar, baz' - foo_tag = Tag.get_by_name('foo') - assert foo_tag is not None - self.assertEqual(len(new_post3.tags), 2) - self.assertEqual(foo_tag.tagged_count, 0) - - def testTagGetTagsForKey(self): - new_post = Post.new_post(new_title='test post 6', new_body='This is a test post. Please continue to ignore.', new_tags='foo,bar,bletch,quux') - assert new_post is not None - - tags = Tag.get_tags_for_key(new_post.key()) - assert tags is not None - self.assertEqual(type(tags), type([])) - self.assertEqual(len(tags), 4) - - def testTagGetByName(self): - new_post = Post.new_post(new_title='test post 6', new_body='This is a test post. Please continue to ignore.', new_tags='foo,bar,bletch,quux') - assert new_post is not None - - quux_tag = Tag.get_by_name('quux') - assert quux_tag is not None - - zizzle_tag = Tag.get_by_name('zizzle') - assert zizzle_tag is None - - def testTagsString(self): - new_post = Post.new_post(new_title='test post 6', new_body='This is a test post. Please continue to ignore.', new_tags=' pal,poll ,,pip,pony') - assert new_post is not None - self.assertEqual(new_post.tags_string(), "pal,poll,pip,pony") - new_post.tag_separator = "|" - self.assertEqual(new_post.tags_string(), "pal|poll|pip|pony") - new_post.tag_separator = " , " - self.assertEqual(new_post.tags_string(), "pal , poll , pip , pony") - - new_post.tag_separator = ", " - new_post.tags = "pal, pill, pip" - self.assertEqual(len(new_post.tags), 3) - self.assertEqual(new_post.tags_string(), "pal, pill, pip") - -if __name__ == '__main__': - unittest.main()