def test_get_history(controller: layabase.CRUDController): controller.post({"key": "my_key1", "mandatory": 1, "optional": "my_value1"}) controller.post({"key": "my_key2", "mandatory": 2, "optional": "my_value2"}) assert controller.get_history({}) == [ {"key": "my_key1", "mandatory": 1, "optional": "my_value1"}, {"key": "my_key2", "mandatory": 2, "optional": "my_value2"}, ]
def test_rollback_unknown_criteria_is_valid(controller: layabase.CRUDController): controller.post( { "key": "first", "dict_field.first_key": EnumTest.Value1, "dict_field.second_key": 1, } ) before_update = 1 controller.put({"key": "first", "dict_field.first_key": EnumTest.Value2}) assert controller.rollback_to({"revision": before_update, "key": "unknown"}) == 0 assert controller.get_history({}) == [ { "key": "first", "dict_field": {"first_key": "Value2", "second_key": 1}, "valid_since_revision": 2, "valid_until_revision": -1, }, { "key": "first", "dict_field": {"first_key": "Value1", "second_key": 1}, "valid_since_revision": 1, "valid_until_revision": 2, }, ] assert controller.get({}) == [ { "key": "first", "dict_field": {"first_key": "Value2", "second_key": 1}, "valid_since_revision": 2, "valid_until_revision": -1, } ]
def test_post_versioning_is_valid(controller: layabase.CRUDController): assert controller.post( { "key": "first", "dict_field.first_key": EnumTest.Value1, "dict_field.second_key": 1, } ) == { "key": "first", "dict_field": {"first_key": "Value1", "second_key": 1}, "valid_since_revision": 1, "valid_until_revision": -1, } assert controller.get_history({}) == [ { "key": "first", "dict_field": {"first_key": "Value1", "second_key": 1}, "valid_since_revision": 1, "valid_until_revision": -1, } ] assert controller.get({}) == [ { "key": "first", "dict_field": {"first_key": "Value1", "second_key": 1}, "valid_since_revision": 1, "valid_until_revision": -1, } ]
def test_rollback_already_valid_versioning_is_valid( controller: layabase.CRUDController, ): controller.post( { "key": "first", "dict_field.first_key": EnumTest.Value1, "dict_field.second_key": 1, } ) controller.put({"key": "first", "dict_field.first_key": EnumTest.Value2}) assert controller.rollback_to({"revision": 2}) == 0 assert controller.get_history({}) == [ { "key": "first", "dict_field": {"first_key": "Value2", "second_key": 1}, "valid_since_revision": 2, "valid_until_revision": -1, }, { "key": "first", "dict_field": {"first_key": "Value1", "second_key": 1}, "valid_since_revision": 1, "valid_until_revision": 2, }, ] assert controller.get({}) == [ { "key": "first", "dict_field": {"first_key": "Value2", "second_key": 1}, "valid_since_revision": 2, "valid_until_revision": -1, } ]
def test_delete_versioning_is_valid(controller: layabase.CRUDController): controller.post( { "key": "first", "dict_field.first_key": EnumTest.Value1, "dict_field.second_key": 1, } ) controller.put({"key": "first", "dict_field.first_key": EnumTest.Value2}) assert controller.delete({"key": "first"}) == 1 assert controller.get_history({}) == [ { "key": "first", "dict_field": {"first_key": "Value2", "second_key": 1}, "valid_since_revision": 2, "valid_until_revision": 3, }, { "key": "first", "dict_field": {"first_key": "Value1", "second_key": 1}, "valid_since_revision": 1, "valid_until_revision": 2, }, ] assert controller.get({}) == []
def test_versioned_int_primary_key_is_reset_after_delete( controller: layabase.CRUDController, mock_mongo_audit_datetime ): assert controller.post({"other": "test1"}) == { "key": 1, "other": "test1", "valid_since_revision": 1, "valid_until_revision": -1, } assert controller.delete({}) == 1 assert controller.post({"other": "test1"}) == { "key": 1, "other": "test1", "valid_since_revision": 3, "valid_until_revision": -1, } assert controller.get_audit({}) == [ { "audit_action": "Insert", "audit_date_utc": "2018-10-11T15:05:05.663000", "audit_user": "", "revision": 1, "table_name": "test", }, { "audit_action": "Delete", "audit_date_utc": "2018-10-11T15:05:05.663000", "audit_user": "", "revision": 2, "table_name": "test", }, { "audit_action": "Insert", "audit_date_utc": "2018-10-11T15:05:05.663000", "audit_user": "", "revision": 3, "table_name": "test", }, ] assert controller.get_history({}) == [ { "key": 1, "other": "test1", "valid_since_revision": 1, "valid_until_revision": 2, }, { "key": 1, "other": "test1", "valid_since_revision": 3, "valid_until_revision": -1, }, ]
def test_versioned_many(controller: layabase.CRUDController): controller.post_many( [ { "key": "first", "dict_field.first_key": EnumTest.Value1, "dict_field.second_key": 1, }, { "key": "second", "dict_field.first_key": EnumTest.Value2, "dict_field.second_key": 2, }, ] ) controller.put_many( [ {"key": "first", "dict_field.first_key": EnumTest.Value2}, {"key": "second", "dict_field.second_key": 3}, ] ) assert controller.get_history({}) == [ { "key": "first", "dict_field": {"first_key": "Value2", "second_key": 1}, "valid_since_revision": 2, "valid_until_revision": -1, }, { "key": "second", "dict_field": {"first_key": "Value2", "second_key": 3}, "valid_since_revision": 2, "valid_until_revision": -1, }, { "key": "first", "dict_field": {"first_key": "Value1", "second_key": 1}, "valid_since_revision": 1, "valid_until_revision": 2, }, { "key": "second", "dict_field": {"first_key": "Value2", "second_key": 2}, "valid_since_revision": 1, "valid_until_revision": 2, }, ]
def test_rollback_before_update_deleted_versioning_is_valid( controller: layabase.CRUDController, ): controller.post( { "key": "first", "dict_field.first_key": EnumTest.Value1, "dict_field.second_key": 1, } ) before_update = 1 controller.put({"key": "first", "dict_field.first_key": EnumTest.Value2}) controller.delete({"key": "first"}) assert controller.rollback_to({"revision": before_update}) == 1 assert controller.get_history({}) == [ { "key": "first", "dict_field": {"first_key": "Value2", "second_key": 1}, "valid_since_revision": 2, "valid_until_revision": 3, }, { "key": "first", "dict_field": {"first_key": "Value1", "second_key": 1}, "valid_since_revision": 1, "valid_until_revision": 2, }, { "key": "first", "dict_field": {"first_key": "Value1", "second_key": 1}, "valid_since_revision": 4, "valid_until_revision": -1, }, ] assert controller.get({}) == [ { "key": "first", "dict_field": {"first_key": "Value1", "second_key": 1}, "valid_since_revision": 4, "valid_until_revision": -1, } ]
def test_rollback_multiple_rows_is_valid(controller: layabase.CRUDController): controller.post( { "key": "1", "dict_field.first_key": EnumTest.Value1, "dict_field.second_key": 1, } ) controller.post( { "key": "2", "dict_field.first_key": EnumTest.Value1, "dict_field.second_key": 1, } ) controller.put({"key": "1", "dict_field.first_key": EnumTest.Value2}) controller.delete({"key": "2"}) controller.post( { "key": "3", "dict_field.first_key": EnumTest.Value1, "dict_field.second_key": 1, } ) controller.post( { "key": "4", "dict_field.first_key": EnumTest.Value1, "dict_field.second_key": 1, } ) before_insert = 6 controller.post( { "key": "5", "dict_field.first_key": EnumTest.Value1, "dict_field.second_key": 1, } ) controller.put({"key": "1", "dict_field.second_key": 2}) # Remove key 5 and Update key 1 (Key 3 and Key 4 unchanged) assert controller.rollback_to({"revision": before_insert}) == 2 assert controller.get({}) == [ { "dict_field": {"first_key": "Value1", "second_key": 1}, "key": "3", "valid_since_revision": 5, "valid_until_revision": -1, }, { "dict_field": {"first_key": "Value1", "second_key": 1}, "key": "4", "valid_since_revision": 6, "valid_until_revision": -1, }, { "dict_field": {"first_key": "Value2", "second_key": 1}, "key": "1", "valid_since_revision": 9, "valid_until_revision": -1, }, ] assert controller.get_history({}) == [ { "dict_field": {"first_key": "Value2", "second_key": 2}, "key": "1", "valid_since_revision": 8, "valid_until_revision": 9, }, { "dict_field": {"first_key": "Value1", "second_key": 1}, "key": "2", "valid_since_revision": 2, "valid_until_revision": 4, }, { "dict_field": {"first_key": "Value1", "second_key": 1}, "key": "1", "valid_since_revision": 1, "valid_until_revision": 3, }, { "dict_field": {"first_key": "Value1", "second_key": 1}, "key": "3", "valid_since_revision": 5, "valid_until_revision": -1, }, { "dict_field": {"first_key": "Value1", "second_key": 1}, "key": "4", "valid_since_revision": 6, "valid_until_revision": -1, }, { "dict_field": {"first_key": "Value1", "second_key": 1}, "key": "5", "valid_since_revision": 7, "valid_until_revision": 9, }, { "dict_field": {"first_key": "Value2", "second_key": 1}, "key": "1", "valid_since_revision": 3, "valid_until_revision": 8, }, { "dict_field": {"first_key": "Value2", "second_key": 1}, "key": "1", "valid_since_revision": 9, "valid_until_revision": -1, }, ]