Source code for pouchdb.tests.objectstorage
# coding=UTF-8
#
#	Copyright 2014, Marten de Vries
#
#	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 StringIO
import pouchdb.objectstorage
from pouchdb.tests.utils import SyncPouchDBTestCaseWithDB
import datetime
[docs]class Person(object):
	def __init__(self, name, birth=None):
		self._name = name
		self._birth = birth or datetime.date.today()
		self.data = [{"a": [1, 2, 3]}]
	def __str__(self):
		return "Hi, I'm %s, nice to meet you! I was born at %s." % (self._name, self._birth)
[docs]	def sayHello(self, f=sys.stdout):
		f.write(str(self) + "\n")
  
[docs]class ObjectStorageTests(SyncPouchDBTestCaseWithDB):
[docs]	def testWithoutId(self):
		person = Person("Joe")
		storeResult = pouchdb.objectstorage.store(person, self._db)
		self.assertEqual(storeResult, person)
		person2 = pouchdb.objectstorage.load(self._db, person.id)
		f = StringIO.StringIO()
		person2.sayHello(f)
		self.assertTrue(f.getvalue().endswith("\n"))
		#will fail in the year 2100 :(
		self.assertTrue(f.getvalue().startswith("Hi, I'm Joe, nice to meet you! I was born at 20"))
		person3 = pouchdb.objectstorage.load(self._db, person2.id, person2.rev)
		self.assertEqual(person2.data, [{"a": [1, 2, 3]}])
 
[docs]	def testPrefix(self):
		prefix = "myprefix_"
		person = Person("Joe 2.0")
		pouchdb.objectstorage.store(person, self._db, id="joe", prefix=prefix)
		#one extra 'cause only for private fields the prefix should be
		#used in the first place.
		self.assertIn("myprefix__", str(self._db.get("joe")))
		loaded = pouchdb.objectstorage.load(self._db, "joe", prefix=prefix)
		self.assertIn("a", loaded.data[0])
 
[docs]	def testStoreAgainAfterUpdate(self):
		person = Person("Joe 3.0")
		person.id = "joe"
		pouchdb.objectstorage.store(person, self._db)
		old_rev = person.rev
		person.data = {"some": 1}
		pouchdb.objectstorage.store(person, self._db)
		old = pouchdb.objectstorage.load(self._db, "joe", rev=old_rev)
		new = pouchdb.objectstorage.load(self._db, "joe", rev=person.rev)
		self.assertIn("a", old.data[0])
		self.assertEqual(new.data, {"some": 1})