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)
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)
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)
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")
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)
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)
def test_length_works_on_dictionaries(self): fragment = DocumentFragment(document=None, parent=None, value={ 'one': 1, 'two': 2 }) self.assertIs(len(fragment), 2)
def test_contains_works_on_dictionaries(self): fragment = DocumentFragment(document=None, parent=None, value={ 'one': 1, 'two': 2 }) self.assertIn('two', fragment)
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])
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, {})
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"})
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)
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'])
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)
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)
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)
def test_value_returns_None_normally(self): fragment = DocumentFragment(document=None, parent=None, value=None) self.assertEqual(fragment.value, None)
def test_setitem_mutates_value(self): fragment = DocumentFragment(document=self.document, parent=None, value={}) fragment["item"] = "value" self.assertEqual(fragment._value, {"item": "value"})
def test_iter_raises_type_error_on_none(self): fragment = DocumentFragment(document=None, parent=None, value=None) self.assertRaises(TypeError, iter, fragment)
def test_contains_raises_type_error_on_none(self): fragment = DocumentFragment(document=None, parent=None, value=None) self.assertRaises(TypeError, fragment.__contains__, None)
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])
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)
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)
def test_length_raises_type_error_on_bools(self): fragment = DocumentFragment(document=None, parent=None, value=True) self.assertRaises(TypeError, len, fragment)
def test_contains_works_on_lists(self): fragment = DocumentFragment(document=None, parent=None, value=[1, 2, 3]) self.assertIn(2, fragment)
def test_length_works_on_strings(self): fragment = DocumentFragment(document=None, parent=None, value="1234") self.assertIs(len(fragment), 4)
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)
def test_length_works_on_lists(self): fragment = DocumentFragment(document=None, parent=None, value=[1, 2, 3]) self.assertIs(len(fragment), 3)
def test_value_returns_normal_values(self): fragment = DocumentFragment(document=None, parent=None, value="value") self.assertEqual(fragment.value, "value")
def test_contains_works_on_strings(self): fragment = DocumentFragment(document=None, parent=None, value="1234") self.assertIn("3", fragment)
def test_delitem_raises_item_error_for_missing_sub_values(self): fragment = DocumentFragment(document=None, parent=None, value={}) self.assertRaises(KeyError, fragment.__delitem__, "item")
def test_getitem_passes_sub_item(self): fragment = DocumentFragment(document=None, parent=None, value={"item": "value"}) self.assertEqual(fragment["item"]._item, "item")