Source code for pouchdb.tests.mapping

# 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 pouchdb
import pouchdb.mapping as m
from pouchdb.tests.utils import SyncPouchDBTestCaseWithDB
import datetime
import time
import unittest

[docs]class Test(m.Document): test = m.TextField(default="Hello World!")
[docs]class NoStorageMappingTests(unittest.TestCase):
[docs] def testNonFunctionDefault(self): self.assertEqual(Test().test, "Hello World!")
[docs] def testClassAccess(self): self.assertIsInstance(Test.test, m.TextField)
[docs] def testUnrecognizedKwarg(self): with self.assertRaises(TypeError) as cm: Test(unexisting_field="Hi") self.assertIn("unexisting_field", str(cm.exception))
[docs] def testDeletingField(self): with self.assertRaises(TypeError) as cm: del Test().test self.assertIn("Can't delete a document field.", str(cm.exception))
[docs] def testTimeField(self): class TimeDoc(m.Document): time = m.TimeField() doc = TimeDoc(time=1000) self.assertIsInstance(doc.time, datetime.time)
[docs] def testDateField(self): class DateDoc(m.Document): #yes, this is a weird way of entering a date. But it's #possible. date = m.DateField() doc = DateDoc(date=time.struct_time((1, 1, 1, 1, 1, 1, 1, 1, 1))) self.assertIsInstance(doc.date, datetime.date)
[docs]class DocWithViews(m.Document): syntaxErrorView = m.ViewField("test", """ function (doc) { emit(doc._id, "hi"); }} """) otherView = m.ViewField("test", """ function (doc) { emit(Math.round(Math.random()), 1); } """, "_sum")
[docs]class StorageMappingTests(SyncPouchDBTestCaseWithDB):
[docs] def testAsDictAfterStore(self): self.assertIn("_rev", Test().store(self._db).as_dict)
[docs] def testViews(self): #two 'tests' in one function so we also test updating the design #doc to include the second view. doc = DocWithViews() with self.assertRaises(pouchdb.PouchDBError): doc.syntaxErrorView(self._db) self._db.post({}) self.assertEqual(doc.otherView(self._db)["rows"], [ { "key": None, "value": 1 } ])