Switch to side-by-side view

--- a
+++ b/Ming/ming/tests/test_schema.py
@@ -0,0 +1,55 @@
+from datetime import datetime
+from decimal import Decimal
+from unittest import TestCase, main
+
+import mock
+
+from ming.base import Object, Document, Field, Cursor
+from ming import schema as S
+from pymongo.bson import ObjectId
+
+class TestSchemaItem(TestCase):
+
+    def test_make_array(self):
+        si_any = S.SchemaItem.make([])
+        si_int = S.SchemaItem.make([int])
+        self.assertEqual(S.Array, si_any.__class__)
+        self.assertEqual(S.Anything, si_any.field_type.__class__)
+        self.assertEqual(S.Int, si_int.field_type.__class__)
+        self.assertRaises(ValueError, S.SchemaItem.make, [int, str])
+
+    def test_migrate(self):
+        si = S.Migrate(int, str, str)
+        self.assertEqual(si.validate(1), '1')
+        self.assertEqual(si.validate('1'), '1')
+        si = S.Migrate(
+            {str:{'a':int}},
+            [ dict(key=str, a=int) ],
+            S.Migrate.obj_to_list('key'))
+        self.assertEqual(si.validate(dict(foo=dict(a=1))),
+                         [ dict(key='foo', a=1) ])
+        si = S.Migrate(
+            {str:int},
+            [ dict(key=str, value=int) ],
+            S.Migrate.obj_to_list('key', 'value'))
+        self.assertEqual(si.validate(dict(foo=1)),
+                         [ dict(key='foo', value=1) ])
+
+    def test_deprecated(self):
+        si = S.SchemaItem.make(dict(
+                a=S.Deprecated(),
+                b=int))
+        self.assertEqual(si.validate(dict(a=5, b=6)),
+                         dict(b=6))
+
+    def test_fancy(self):
+        si = S.SchemaItem.make(dict(
+                a=S.Int(required=True),
+                b=S.Int(if_missing=5)))
+        self.assertRaises(S.Invalid, si.validate, dict(b=10))
+        self.assertEqual(si.validate(dict(a=10)),
+                         dict(a=10, b=5))
+
+if __name__ == '__main__':
+    main()
+