From 13a02ec17a0e6620bd4527683c79ab3eedb6cdf4 Mon Sep 17 00:00:00 2001 From: Gracjan Sadowicz Date: Thu, 18 Apr 2024 17:12:20 +0200 Subject: [PATCH] RDBC-835 new_change should return DocumentsChanges, not dict --- ravendb/documents/session/misc.py | 16 +-- ravendb/json/json_operation.py | 8 +- .../crud_tests/test_RavenDB_15531.py | 25 ++--- .../crud_tests/test_crud.py | 97 ++++++++++--------- .../what_changed_tests/test_RavenDB_11649.py | 16 +-- .../what_changed_tests/test_what_changed.py | 49 +++++----- 6 files changed, 104 insertions(+), 107 deletions(-) diff --git a/ravendb/documents/session/misc.py b/ravendb/documents/session/misc.py index 60ab6f27..8a658485 100644 --- a/ravendb/documents/session/misc.py +++ b/ravendb/documents/session/misc.py @@ -124,14 +124,14 @@ def __init__(self, query: Query): class DocumentsChanges: class ChangeType(Enum): - DOCUMENT_DELETED = "document_deleted" - DOCUMENT_ADDED = "document_added" - FIELD_CHANGED = "field_changed" - NEW_FIELD = "new_field" - REMOVED_FIELD = "removed_field" - ARRAY_VALUE_CHANGED = "array_value_changed" - ARRAY_VALUE_ADDED = "array_value_added" - ARRAY_VALUE_REMOVED = "array_value_removed" + DOCUMENT_DELETED = "DocumentDeleted" + DOCUMENT_ADDED = "DocumentAdded" + FIELD_CHANGED = "FieldChanged" + NEW_FIELD = "NewField" + REMOVED_FIELD = "RemovedField" + ARRAY_VALUE_CHANGED = "ArrayValueChanged" + ARRAY_VALUE_ADDED = "ArrayValueAdded" + ARRAY_VALUE_REMOVED = "ArrayValueRemoved" def __str__(self): return self.value diff --git a/ravendb/json/json_operation.py b/ravendb/json/json_operation.py index 7d33e5b4..746fd24e 100644 --- a/ravendb/json/json_operation.py +++ b/ravendb/json/json_operation.py @@ -24,13 +24,7 @@ def entity_changed(new_obj: dict, document_info: DocumentInfo, changes: Dict[str @staticmethod def new_change(field_path, name, new_value, old_value, doc_changes, change_type): - changes = { - "old_value": old_value, - "new_value": new_value, - "change": change_type, - "field_name": name, - "field_path": field_path, - } + changes = DocumentsChanges(old_value, new_value, change_type, name, field_path) doc_changes.append(changes) @staticmethod diff --git a/ravendb/tests/jvm_migrated_tests/crud_tests/test_RavenDB_15531.py b/ravendb/tests/jvm_migrated_tests/crud_tests/test_RavenDB_15531.py index e5e1c9db..d4875c34 100644 --- a/ravendb/tests/jvm_migrated_tests/crud_tests/test_RavenDB_15531.py +++ b/ravendb/tests/jvm_migrated_tests/crud_tests/test_RavenDB_15531.py @@ -1,3 +1,4 @@ +from ravendb import DocumentsChanges from ravendb.tests.test_base import TestBase @@ -23,10 +24,10 @@ def test_should_work(self): self.assertIsNotNone(changes) self.assertEqual(1, len(changes)) - self.assertEqual(str(changes[0]["change"]), "field_changed") - self.assertEqual(changes[0]["field_name"], "name") - self.assertEqual(changes[0]["old_value"], "State1") - self.assertEqual(changes[0]["new_value"], "State2") + self.assertEqual(changes[0].change, DocumentsChanges.ChangeType.FIELD_CHANGED) + self.assertEqual(changes[0].field_name, "name") + self.assertEqual(changes[0].field_old_value, "State1") + self.assertEqual(changes[0].field_new_value, "State2") session.save_changes() doc.name = "State3" @@ -35,10 +36,10 @@ def test_should_work(self): self.assertIsNotNone(changes) self.assertEqual(1, len(changes)) - self.assertEqual(str(changes[0]["change"]), "field_changed") - self.assertEqual(changes[0]["field_name"], "name") - self.assertEqual(changes[0]["old_value"], "State2") - self.assertEqual(changes[0]["new_value"], "State3") + self.assertEqual(changes[0].change, DocumentsChanges.ChangeType.FIELD_CHANGED) + self.assertEqual(changes[0].field_name, "name") + self.assertEqual(changes[0].field_old_value, "State2") + self.assertEqual(changes[0].field_new_value, "State3") doc = session.advanced.refresh(doc) @@ -48,8 +49,8 @@ def test_should_work(self): self.assertIsNotNone(changes) self.assertEqual(1, len(changes)) - self.assertEqual(str(changes[0]["change"]), "field_changed") - self.assertEqual(changes[0]["field_name"], "name") - self.assertEqual(changes[0]["old_value"], "State2") - self.assertEqual(changes[0]["new_value"], "State4") + self.assertEqual(changes[0].change, DocumentsChanges.ChangeType.FIELD_CHANGED) + self.assertEqual(changes[0].field_name, "name") + self.assertEqual(changes[0].field_old_value, "State2") + self.assertEqual(changes[0].field_new_value, "State4") session.save_changes() diff --git a/ravendb/tests/jvm_migrated_tests/crud_tests/test_crud.py b/ravendb/tests/jvm_migrated_tests/crud_tests/test_crud.py index 7d187b4b..4cc5b377 100644 --- a/ravendb/tests/jvm_migrated_tests/crud_tests/test_crud.py +++ b/ravendb/tests/jvm_migrated_tests/crud_tests/test_crud.py @@ -1,3 +1,4 @@ +from ravendb import DocumentsChanges from ravendb.tests.test_base import TestBase, User @@ -73,27 +74,27 @@ def test_crud_operations_with_array_of_objects(self): self.assertEqual(4, len(changes["family/1"])) # just dealing with async results to make proper assertion - changes = sorted(changes["family/1"], key=lambda change: (change["field_name"], change["old_value"])) + changes = sorted(changes["family/1"], key=lambda change: (change.field_name, change.field_old_value)) - self.assertEqual("age", changes[0]["field_name"]) - self.assertEqual("field_changed", str(changes[0]["change"])) - self.assertEqual(4, changes[0]["old_value"]) - self.assertEqual(8, changes[0]["new_value"]) + self.assertEqual("age", changes[0].field_name) + self.assertEqual(DocumentsChanges.ChangeType.FIELD_CHANGED, changes[0].change) + self.assertEqual(4, changes[0].field_old_value) + self.assertEqual(8, changes[0].field_new_value) - self.assertEqual("age", changes[1]["field_name"]) - self.assertEqual("field_changed", str(changes[1]["change"])) - self.assertEqual(8, changes[1]["old_value"]) - self.assertEqual(4, changes[1]["new_value"]) + self.assertEqual("age", changes[1].field_name) + self.assertEqual(DocumentsChanges.ChangeType.FIELD_CHANGED, changes[1].change) + self.assertEqual(8, changes[1].field_old_value) + self.assertEqual(4, changes[1].field_new_value) - self.assertEqual("name", changes[2]["field_name"]) - self.assertEqual("field_changed", str(changes[2]["change"])) - self.assertEqual("Hibernating Rhinos", changes[2]["old_value"]) - self.assertEqual("RavenDB", changes[2]["new_value"]) + self.assertEqual("name", changes[2].field_name) + self.assertEqual(DocumentsChanges.ChangeType.FIELD_CHANGED, changes[2].change) + self.assertEqual("Hibernating Rhinos", changes[2].field_old_value) + self.assertEqual("RavenDB", changes[2].field_new_value) - self.assertEqual("name", changes[3]["field_name"]) - self.assertEqual("field_changed", str(changes[3]["change"])) - self.assertEqual("RavenDB", changes[3]["old_value"]) - self.assertEqual("Hibernating Rhinos", changes[3]["new_value"]) + self.assertEqual("name", changes[3].field_name) + self.assertEqual(DocumentsChanges.ChangeType.FIELD_CHANGED, changes[3].change) + self.assertEqual("RavenDB", changes[3].field_old_value) + self.assertEqual("Hibernating Rhinos", changes[3].field_new_value) member1 = Member("Toli", 5) member2 = Member("Boki", 15) @@ -103,27 +104,27 @@ def test_crud_operations_with_array_of_objects(self): self.assertEqual(1, len(changes)) self.assertEqual(4, len(changes["family/1"])) - changes = sorted(changes["family/1"], key=lambda change: (change["field_name"], change["old_value"])) + changes = sorted(changes["family/1"], key=lambda change: (change.field_name, change.field_old_value)) - self.assertEqual("age", changes[0]["field_name"]) - self.assertEqual("field_changed", str(changes[0]["change"])) - self.assertEqual(4, changes[0]["old_value"]) - self.assertEqual(15, changes[0]["new_value"]) + self.assertEqual("age", changes[0].field_name) + self.assertEqual(DocumentsChanges.ChangeType.FIELD_CHANGED, changes[0].change) + self.assertEqual(4, changes[0].field_old_value) + self.assertEqual(15, changes[0].field_new_value) - self.assertEqual("age", changes[1]["field_name"]) - self.assertEqual("field_changed", str(changes[1]["change"])) - self.assertEqual(8, changes[1]["old_value"]) - self.assertEqual(5, changes[1]["new_value"]) + self.assertEqual("age", changes[1].field_name) + self.assertEqual(DocumentsChanges.ChangeType.FIELD_CHANGED, changes[1].change) + self.assertEqual(8, changes[1].field_old_value) + self.assertEqual(5, changes[1].field_new_value) - self.assertEqual("name", changes[2]["field_name"]) - self.assertEqual("field_changed", str(changes[2]["change"])) - self.assertEqual("Hibernating Rhinos", changes[2]["old_value"]) - self.assertEqual("Toli", changes[2]["new_value"]) + self.assertEqual("name", changes[2].field_name) + self.assertEqual(DocumentsChanges.ChangeType.FIELD_CHANGED, changes[2].change) + self.assertEqual("Hibernating Rhinos", changes[2].field_old_value) + self.assertEqual("Toli", changes[2].field_new_value) - self.assertEqual("name", changes[3]["field_name"]) - self.assertEqual("field_changed", str(changes[3]["change"])) - self.assertEqual("RavenDB", changes[3]["old_value"]) - self.assertEqual("Boki", changes[3]["new_value"]) + self.assertEqual("name", changes[3].field_name) + self.assertEqual(DocumentsChanges.ChangeType.FIELD_CHANGED, changes[3].change) + self.assertEqual("RavenDB", changes[3].field_old_value) + self.assertEqual("Boki", changes[3].field_new_value) def test_crud_operations_with_array_in_object(self): with self.store.open_session() as session: @@ -221,19 +222,19 @@ def test_crud_operations_with_array_of_arrays(self): change = changes["arr/1"] self.assertEqual(4, len(change)) - change = sorted(change, key=lambda ch: (ch["old_value"], ch["new_value"])) + change = sorted(change, key=lambda ch: (ch.field_old_value, ch.field_new_value)) - self.assertEqual("a", change[0]["old_value"]) - self.assertEqual("d", change[0]["new_value"]) + self.assertEqual("a", change[0].field_old_value) + self.assertEqual("d", change[0].field_new_value) - self.assertEqual("b", change[1]["old_value"]) - self.assertEqual("c", change[1]["new_value"]) + self.assertEqual("b", change[1].field_old_value) + self.assertEqual("c", change[1].field_new_value) - self.assertEqual("c", change[2]["old_value"]) - self.assertEqual("a", change[2]["new_value"]) + self.assertEqual("c", change[2].field_old_value) + self.assertEqual("a", change[2].field_new_value) - self.assertEqual("d", change[3]["old_value"]) - self.assertEqual("b", change[3]["new_value"]) + self.assertEqual("d", change[3].field_old_value) + self.assertEqual("b", change[3].field_new_value) session.save_changes() @@ -248,13 +249,13 @@ def test_crud_operations_with_array_of_arrays(self): change = changes["arr/1"] self.assertEqual(2, len(change)) - change = sorted(change, key=lambda ch: (ch["old_value"], ch["new_value"])) + change = sorted(change, key=lambda ch: (ch.field_old_value, ch.field_new_value)) - self.assertEqual("c", change[0]["old_value"]) - self.assertEqual("w", change[0]["new_value"]) + self.assertEqual("c", change[0].field_old_value) + self.assertEqual("w", change[0].field_new_value) - self.assertEqual("d", change[1]["old_value"]) - self.assertEqual("q", change[1]["new_value"]) + self.assertEqual("d", change[1].field_old_value) + self.assertEqual("q", change[1].field_new_value) session.save_changes() diff --git a/ravendb/tests/jvm_migrated_tests/what_changed_tests/test_RavenDB_11649.py b/ravendb/tests/jvm_migrated_tests/what_changed_tests/test_RavenDB_11649.py index ea7a37e0..12fc7ae4 100644 --- a/ravendb/tests/jvm_migrated_tests/what_changed_tests/test_RavenDB_11649.py +++ b/ravendb/tests/jvm_migrated_tests/what_changed_tests/test_RavenDB_11649.py @@ -33,7 +33,7 @@ def test_what_changed_when_property_in_array_changed_should_return_with_relevant session.save_changes() doc.inner_classes[0].a = "newInnerValue" changes = session.advanced.what_changed() - changed_paths = list(map(lambda change: change["field_path"], changes["docs/1"])) + changed_paths = list(map(lambda change: change.field_path, changes["docs/1"])) self.assertSequenceContainsElements(changed_paths, "inner_classes[0]") def test_what_changed_when_property_of_inner_property_changed_to_null_should_return_property_name_plus_path(self): @@ -46,7 +46,7 @@ def test_what_changed_when_property_of_inner_property_changed_to_null_should_ret doc.inner_class.a = None changes = session.advanced.what_changed() - changed_paths = list(map(lambda change: change["field_path"], changes["docs/1"])) + changed_paths = list(map(lambda change: change.field_path, changes["docs/1"])) self.assertSequenceContainsElements(changed_paths, "inner_class") def test_what_changed_when_inner_property_changed_should_return_the_property_name_plus_path(self): @@ -59,7 +59,7 @@ def test_what_changed_when_inner_property_changed_should_return_the_property_nam doc.inner_class.a = "newInnerValue" changes = session.advanced.what_changed() - changed_paths = list(map(lambda change: change["field_path"], changes["docs/1"])) + changed_paths = list(map(lambda change: change.field_path, changes["docs/1"])) self.assertSequenceContainsElements(changed_paths, "inner_class") def test_what_changed_when_outer_property_changed_field_path_should_be_empty(self): @@ -72,7 +72,7 @@ def test_what_changed_when_outer_property_changed_field_path_should_be_empty(sel doc.a = "newOuterValue" changes = session.advanced.what_changed() - changed_paths = list(map(lambda change: change["field_path"], changes["docs/1"])) + changed_paths = list(map(lambda change: change.field_path, changes["docs/1"])) self.assertSequenceContainsElements(changed_paths, "") def test_what_changed_when_all_named_a_properties_changed_should_return_different_paths(self): @@ -94,7 +94,7 @@ def test_what_changed_when_all_named_a_properties_changed_should_return_differen doc.inner_classes[0].a = "newValue" doc.inner_class_matrix[0][0].a = "newValue" changes = session.advanced.what_changed() - changed_paths = list(map(lambda change: change["field_path"], changes["docs/1"])) + changed_paths = list(map(lambda change: change.field_path, changes["docs/1"])) self.assertSequenceContainsElements( changed_paths, "", "inner_class", "inner_classes[0]", "inner_class_matrix[0][0]" ) @@ -110,7 +110,7 @@ def test_what_changed_when_inner_property_changed_from_null_should_return_the_pr doc.inner_class.a = "newInnerValue" changes = session.advanced.what_changed() - changed_paths = list(map(lambda change: change["field_path"], changes["docs/1"])) + changed_paths = list(map(lambda change: change.field_path, changes["docs/1"])) self.assertSequenceContainsElements(changed_paths, "inner_class") def test_what_changed_when_in_matrix_changed_should_return_with_relevant_path(self): @@ -124,7 +124,7 @@ def test_what_changed_when_in_matrix_changed_should_return_with_relevant_path(se doc.inner_class_matrix[0][0].a = "newValue" changes = session.advanced.what_changed() - changes_paths = list(map(lambda change: change["field_path"], changes["docs/1"])) + changes_paths = list(map(lambda change: change.field_path, changes["docs/1"])) self.assertSequenceContainsElements(changes_paths, "inner_class_matrix[0][0]") def test_what_changed_when_array_property_in_array_changed_from_null_should_return_relevant_path(self): @@ -137,5 +137,5 @@ def test_what_changed_when_array_property_in_array_changed_from_null_should_retu doc.inner_class_matrix[0] = [InnerClass(None)] changes = session.advanced.what_changed() - changes_paths = list(map(lambda change: change["field_path"], changes[key])) + changes_paths = list(map(lambda change: change.field_path, changes[key])) self.assertSequenceContainsElements(changes_paths, "inner_class_matrix[0]") diff --git a/ravendb/tests/jvm_migrated_tests/what_changed_tests/test_what_changed.py b/ravendb/tests/jvm_migrated_tests/what_changed_tests/test_what_changed.py index 9fb413a2..9ac503f4 100644 --- a/ravendb/tests/jvm_migrated_tests/what_changed_tests/test_what_changed.py +++ b/ravendb/tests/jvm_migrated_tests/what_changed_tests/test_what_changed.py @@ -1,5 +1,6 @@ import unittest +from ravendb import DocumentsChanges from ravendb.tests.test_base import TestBase, User from dataclasses import dataclass @@ -83,7 +84,7 @@ def test_what_changed_new_field(self): user.age = 5 changes = session.advanced.what_changed() self.assertEqual(1, len(changes)) - self.assertEqual("new_field", str(changes["users/1"][0]["change"])) + self.assertEqual(DocumentsChanges.ChangeType.NEW_FIELD, changes["users/1"][0].change) session.save_changes() def test_what_changed_remove_field(self): @@ -98,7 +99,7 @@ def test_what_changed_remove_field(self): del u.name changes = session.advanced.what_changed() self.assertEqual(1, len(changes)) - self.assertEqual("removed_field", str(changes["users/1"][0]["change"])) + self.assertEqual(DocumentsChanges.ChangeType.REMOVED_FIELD, changes["users/1"][0].change) session.save_changes() # its not the same yet its valid @@ -114,7 +115,7 @@ def test_what_changed_change_field(self): user.age = 6 changes = session.advanced.what_changed() self.assertEqual(1, len(changes)) - self.assertEqual("field_changed", str(changes["users/1"][0]["change"])) + self.assertEqual(DocumentsChanges.ChangeType.FIELD_CHANGED, changes["users/1"][0].change) session.save_changes() def test_what_changed_array_value_changed(self): @@ -123,7 +124,7 @@ def test_what_changed_array_value_changed(self): changes = session.advanced.what_changed() self.assertEqual(1, len(changes)) self.assertEqual(1, len(changes["users/1"])) - self.assertEqual("document_added", str(changes["users/1"][0]["change"])) + self.assertEqual(DocumentsChanges.ChangeType.DOCUMENT_ADDED, changes["users/1"][0].change) session.save_changes() with self.store.open_session() as session: @@ -134,13 +135,13 @@ def test_what_changed_array_value_changed(self): self.assertEqual(2, len(changes["users/1"])) - self.assertEqual("array_value_changed", str(changes["users/1"][0]["change"])) - self.assertEqual("1", str(changes["users/1"][0]["old_value"])) - self.assertEqual(2, changes["users/1"][0]["new_value"]) + self.assertEqual(DocumentsChanges.ChangeType.ARRAY_VALUE_CHANGED, changes["users/1"][0].change) + self.assertEqual("1", str(changes["users/1"][0].field_old_value)) + self.assertEqual(2, changes["users/1"][0].field_new_value) - self.assertEqual("array_value_changed", str(changes["users/1"][1]["change"])) - self.assertEqual("b", str(changes["users/1"][1]["old_value"])) - self.assertEqual("c", str(changes["users/1"][1]["new_value"])) + self.assertEqual(DocumentsChanges.ChangeType.ARRAY_VALUE_CHANGED, changes["users/1"][1].change) + self.assertEqual("b", str(changes["users/1"][1].field_old_value)) + self.assertEqual("c", str(changes["users/1"][1].field_new_value)) def test_what_changed_array_value_added(self): with self.store.open_session() as session: @@ -154,13 +155,13 @@ def test_what_changed_array_value_added(self): self.assertEqual(1, len(changes)) self.assertEqual(2, len(changes["arr/1"])) - self.assertEqual("array_value_added", str(changes["arr/1"][0]["change"])) - self.assertEqual("c", str(changes["arr/1"][0]["new_value"])) - self.assertEqual(None, changes["arr/1"][0]["old_value"]) + self.assertEqual(DocumentsChanges.ChangeType.ARRAY_VALUE_ADDED, changes["arr/1"][0].change) + self.assertEqual("c", str(changes["arr/1"][0].field_new_value)) + self.assertEqual(None, changes["arr/1"][0].field_old_value) - self.assertEqual("array_value_added", str(changes["arr/1"][1]["change"])) - self.assertEqual(2, changes["arr/1"][1]["new_value"]) - self.assertIsNone(changes["arr/1"][1]["old_value"]) + self.assertEqual(DocumentsChanges.ChangeType.ARRAY_VALUE_ADDED, changes["arr/1"][1].change) + self.assertEqual(2, changes["arr/1"][1].field_new_value) + self.assertIsNone(changes["arr/1"][1].field_old_value) def test_what_changed_array_value_removed(self): with self.store.open_session() as session: @@ -174,9 +175,9 @@ def test_what_changed_array_value_removed(self): self.assertEqual(1, len(changes)) self.assertEqual(2, len(changes["arr/1"])) - self.assertEqual("array_value_removed", str(changes["arr/1"][1]["change"])) - self.assertEqual("b", str(changes["arr/1"][1]["old_value"])) - self.assertIsNone(changes["arr/1"][1]["new_value"]) + self.assertEqual(DocumentsChanges.ChangeType.ARRAY_VALUE_REMOVED, changes["arr/1"][1].change) + self.assertEqual("b", str(changes["arr/1"][1].field_old_value)) + self.assertIsNone(changes["arr/1"][1].field_new_value) def test_what_changed_should_be_idempotent_operation(self): # RavenDB-9150 @@ -224,10 +225,10 @@ def test_what_changed_unhashables(self): self.assertEqual(1, len(changes["data/1"])) doc_changes = changes["data/1"][0] - self.assertEqual("field_changed", str(doc_changes["change"])) - self.assertEqual("data", doc_changes["field_name"]) - self.assertEqual("classified", doc_changes["old_value"]) - self.assertEqual("covert", doc_changes["new_value"]) + self.assertEqual(DocumentsChanges.ChangeType.FIELD_CHANGED, doc_changes.change) + self.assertEqual("data", doc_changes.field_name) + self.assertEqual("classified", doc_changes.field_old_value) + self.assertEqual("covert", doc_changes.field_new_value) session.save_changes() with self.store.open_session() as session: @@ -235,4 +236,4 @@ def test_what_changed_unhashables(self): session.delete(data) changes = session.advanced.what_changed() self.assertEqual(1, len(changes["data/1"])) - self.assertEqual("document_deleted", str(changes["data/1"][0].change)) + self.assertEqual(DocumentsChanges.ChangeType.DOCUMENT_DELETED, changes["data/1"][0].change)