Beispiel #1
0
 def test_revert_to_default_marks_document_as_dirty(self):
     document = FakeDocument()
     start_revision = document.revision
     fragment = DocumentFragment(document, None, "value", None,
                                 {"default": "value"})
     fragment.revert_to_default()
     self.assertNotEqual(document.revision, start_revision)
Beispiel #2
0
 def test_revert_to_default_marks_document_as_dirty(self):
     document = FakeDocument()
     start_revision = document.revision
     fragment = DocumentFragment(
         document, None, "value", None, {"default": "value"})
     fragment.revert_to_default()
     self.assertNotEqual(document.revision, start_revision)
Beispiel #3
0
 def test_is_orphaned_for_typical_fragments(self):
     document = object()
     parent = object()
     value = object()
     item = "item"
     fragment = DocumentFragment(document, parent, value, item)
     self.assertFalse(fragment.is_orphaned)
Beispiel #4
0
 def test_value_uses_schema_to_find_default_value(self):
     fragment = DocumentFragment(document=None,
                                 parent=None,
                                 value=DefaultValue,
                                 item=None,
                                 schema={"default": "default value"})
     self.assertEqual(fragment.value, "default value")
Beispiel #5
0
 def test_is_orphaned_for_orphans(self):
     document = None
     parent = None
     value = object()
     item = "item"
     fragment = DocumentFragment(document, parent, value, item)
     self.assertTrue(fragment.is_orphaned)
Beispiel #6
0
 def test_is_orphaned_for_root_fragment(self):
     document = object()
     parent = None
     value = object()
     item = None
     fragment = DocumentFragment(document, parent, value, item)
     self.assertFalse(fragment.is_orphaned)
Beispiel #7
0
 def test_length_works_on_dictionaries(self):
     fragment = DocumentFragment(document=None,
                                 parent=None,
                                 value={
                                     'one': 1,
                                     'two': 2
                                 })
     self.assertIs(len(fragment), 2)
Beispiel #8
0
 def test_contains_works_on_dictionaries(self):
     fragment = DocumentFragment(document=None,
                                 parent=None,
                                 value={
                                     'one': 1,
                                     'two': 2
                                 })
     self.assertIn('two', fragment)
Beispiel #9
0
 def test_iter_works_on_dictionaries(self):
     fragment = DocumentFragment(document=None,
                                 parent=None,
                                 value={
                                     'one': 1,
                                     'two': 2
                                 })
     self.assertEqual(sorted([item.value for item in fragment]), [1, 2])
Beispiel #10
0
 def test_get_passes_sub_schema_properly_when_no_schema_is_around(self):
     fragment = DocumentFragment(document=None,
                                 parent=None,
                                 value={"item": "value"},
                                 item=None,
                                 schema={"type": "object"})
     # This is coming from additionalProperties.default schema which allows
     # any objects.
     self.assertEqual(fragment["item"]._schema, {})
Beispiel #11
0
 def test_overwriting_setitem_mutates_value(self):
     fragment = DocumentFragment(document=self.document,
                                 parent=None,
                                 value={"item": "value"})
     sub_fragment = fragment["item"]
     self.assertEqual(sub_fragment.value, "value")
     fragment["item"] = "new value"
     self.assertEqual(sub_fragment.value, "new value")
     self.assertEqual(fragment._value, {"item": "new value"})
Beispiel #12
0
 def test_getitem_uses_default_value_for_missing_elements_with_schema(self):
     fragment = DocumentFragment(document=None,
                                 parent=None,
                                 value={},
                                 item=None,
                                 schema={
                                     "type": "object",
                                     "properties": {
                                         "item": {
                                             "default": "default value"
                                         }
                                     }
                                 })
     self.assertIs(fragment["item"]._value, DefaultValue)
     self.assertIn("item", fragment._fragment_cache)
Beispiel #13
0
 def test_getitem_passes_sub_schema_when_sub_value_is_missing(self):
     fragment = DocumentFragment(document=None,
                                 parent=None,
                                 value={},
                                 item=None,
                                 schema={
                                     "type": "object",
                                     "properties": {
                                         "item": {
                                             "default": "default value"
                                         }
                                     }
                                 })
     self.assertIs(fragment["item"]._schema,
                   fragment.schema.properties['item'])
Beispiel #14
0
    def test_getitem_uses_sub_value_class_from_object_property(self):

        class SpecialDocumentFragment(DocumentFragment):
            pass

        fragment = DocumentFragment(
            document=None,
            parent=None,
            value={
                "item": "value"},
            item=None,
            schema={
                "type": "object",
                "properties": {
                    "item": {
                        "__fragment_cls": SpecialDocumentFragment}}})
        self.assertIsInstance(fragment["item"], SpecialDocumentFragment)
        self.assertEqual(fragment["item"].value, "value")
        self.assertIsNotNone(fragment["item"].schema)
Beispiel #15
0
    def test_getitem_uses_sub_value_classes_from_arrays(self):

        class SpecialDocumentFragment(DocumentFragment):
            pass

        class SpecialDocumentFragment2(DocumentFragment):
            pass

        fragment = DocumentFragment(
            document=None,
            parent=None,
            value=[{"foo": [{"foo2": "bar"}]}],
            item=None,
            schema={
                "type": "array",
                "items": {
                    "__fragment_cls": SpecialDocumentFragment,
                    "type": "object",
                    "properties": {
                        "foo": {
                            "type": "array",
                            "items": {
                                "__fragment_cls": SpecialDocumentFragment2,
                                "type": "object",
                                "properties": {
                                    "foo2": {"type": "string"}}}}}}})
        self.assertIsInstance(fragment[0], SpecialDocumentFragment)
        self.assertIsInstance(fragment[0]["foo"], DocumentFragment)
        self.assertIsInstance(fragment[0]["foo"][0], SpecialDocumentFragment2)
        self.assertEqual(fragment[0]["foo"][0]["foo2"].value, "bar")
        self.assertIsNotNone(fragment[0].schema)
        self.assertIsNotNone(fragment[0]["foo"].schema)
        self.assertIsNotNone(fragment[0]["foo"][0].schema)
        self.assertIsNotNone(fragment[0]["foo"][0]["foo2"].schema)
        self.assertIn("foo", fragment[0].schema.properties)
        self.assertIn("foo2", fragment[0]["foo"][0].schema.properties)
Beispiel #16
0
 def test_revert_to_default(self):
     document = FakeDocument()
     fragment = DocumentFragment(
         document, None, "value", None, {"default": "value"})
     fragment.revert_to_default()
     self.assertIs(fragment._value, DefaultValue)
Beispiel #17
0
 def test_value_returns_None_normally(self):
     fragment = DocumentFragment(document=None, parent=None, value=None)
     self.assertEqual(fragment.value, None)
Beispiel #18
0
 def test_setitem_mutates_value(self):
     fragment = DocumentFragment(document=self.document,
                                 parent=None,
                                 value={})
     fragment["item"] = "value"
     self.assertEqual(fragment._value, {"item": "value"})
Beispiel #19
0
 def test_iter_raises_type_error_on_none(self):
     fragment = DocumentFragment(document=None, parent=None, value=None)
     self.assertRaises(TypeError, iter, fragment)
Beispiel #20
0
 def test_contains_raises_type_error_on_none(self):
     fragment = DocumentFragment(document=None, parent=None, value=None)
     self.assertRaises(TypeError, fragment.__contains__, None)
Beispiel #21
0
 def test_iter_works_on_lists(self):
     fragment = DocumentFragment(document=None,
                                 parent=None,
                                 value=[1, 2, 3])
     self.assertEqual([item.value for item in fragment], [1, 2, 3])
Beispiel #22
0
 def test_overwriting_setitem_bumps_revision(self):
     fragment = DocumentFragment(document=self.document,
                                 parent=None,
                                 value={"item": "value"})
     fragment["item"] = "new value"
     self.assertNotEqual(self.document.revision, self.start_revision)
Beispiel #23
0
 def test_getitem_uses_existing_sub_value(self):
     fragment = DocumentFragment(document=None,
                                 parent=None,
                                 value={"item": "value"})
     self.assertEqual(fragment["item"]._value, "value")
     self.assertIn("item", fragment._fragment_cache)
Beispiel #24
0
 def test_length_raises_type_error_on_bools(self):
     fragment = DocumentFragment(document=None, parent=None, value=True)
     self.assertRaises(TypeError, len, fragment)
Beispiel #25
0
 def test_contains_works_on_lists(self):
     fragment = DocumentFragment(document=None,
                                 parent=None,
                                 value=[1, 2, 3])
     self.assertIn(2, fragment)
Beispiel #26
0
 def test_length_works_on_strings(self):
     fragment = DocumentFragment(document=None, parent=None, value="1234")
     self.assertIs(len(fragment), 4)
Beispiel #27
0
 def test_overwriting_setitem_with_same_value_retains_revision(self):
     fragment = DocumentFragment(document=self.document,
                                 parent=None,
                                 value={"item": "value"})
     fragment["item"] = "value"
     self.assertEqual(self.document.revision, self.start_revision)
Beispiel #28
0
 def test_length_works_on_lists(self):
     fragment = DocumentFragment(document=None,
                                 parent=None,
                                 value=[1, 2, 3])
     self.assertIs(len(fragment), 3)
Beispiel #29
0
 def test_value_returns_normal_values(self):
     fragment = DocumentFragment(document=None, parent=None, value="value")
     self.assertEqual(fragment.value, "value")
Beispiel #30
0
 def test_contains_works_on_strings(self):
     fragment = DocumentFragment(document=None, parent=None, value="1234")
     self.assertIn("3", fragment)
Beispiel #31
0
 def test_delitem_raises_item_error_for_missing_sub_values(self):
     fragment = DocumentFragment(document=None, parent=None, value={})
     self.assertRaises(KeyError, fragment.__delitem__, "item")
Beispiel #32
0
 def test_getitem_passes_sub_item(self):
     fragment = DocumentFragment(document=None,
                                 parent=None,
                                 value={"item": "value"})
     self.assertEqual(fragment["item"]._item, "item")