def create_model(json_client, data, redis_connection, reset_redis_data): fields = copy.deepcopy(data["events"][0]["fields"]) response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", fields, 1) assert_modified_fields(redis_connection, {"a/1": list(fields.keys())}) reset_redis_data()
def test_create_delete_restore(json_client, data, redis_connection): data["events"].append({"type": "delete", "fqid": "a/1"}) data["events"].append({"type": "restore", "fqid": "a/1"}) response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {"f": 1}, 1) assert_modified_fields(redis_connection, {"a/1": ["f"]})
def test_update_delete_restore_update(json_client, data, redis_connection, reset_redis_data): create_model(json_client, data, redis_connection, reset_redis_data) data["events"][0] = { "type": "update", "fqid": "a/1", "fields": { "another": "value", "f": None }, } data["events"].append({"type": "delete", "fqid": "a/1"}) data["events"].append({"type": "restore", "fqid": "a/1"}) data["events"].append({ "type": "update", "fqid": "a/1", "fields": { "third_field": ["my", "list"] } }) response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {"another": "value", "third_field": ["my", "list"]}, 2) assert_modified_fields(redis_connection, {"a/1": ["f", "another", "third_field"]})
def test_write_none(json_client, data, redis_connection, reset_redis_data): create_model(json_client, data, redis_connection, reset_redis_data) data["events"][0] = {"type": "update", "fqid": "a/1", "fields": {"f": None}} response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {}, 2) assert_modified_fields(redis_connection, {"a/1": ["f"]}, meta_deleted=False)
def test_single_delete(json_client, data, redis_connection, reset_redis_data): create_model(json_client, data, redis_connection, reset_redis_data) data["events"][0] = {"type": "delete", "fqid": "a/1"} response = json_client.post(WRITE_URL, data) assert response.status_code == 200 assert_no_model("a/1") assert_modified_fields(redis_connection, {"a/1": ["f"]})
def test_two_write_requests(json_client, data, redis_connection, reset_redis_data): create_model(json_client, data, redis_connection, reset_redis_data) data["events"][0] = {"type": "update", "fqid": "a/1", "fields": {"f": None}} data2 = copy.deepcopy(data) data2["events"][0] = {"type": "update", "fqid": "a/1", "fields": {"f2": 1}} response = json_client.post(WRITE_URL, [data, data2]) assert_response_code(response, 201) assert_model("a/1", {"f2": 1}, 3) assert_modified_fields(redis_connection, {"a/1": ["f", "f2"]}, meta_deleted=False)
def test_delete_restore_delete_restore(json_client, data, redis_connection, reset_redis_data): create_model(json_client, data, redis_connection, reset_redis_data) data["events"][0] = {"type": "delete", "fqid": "a/1"} data["events"].append({"type": "restore", "fqid": "a/1"}) data["events"].append({"type": "delete", "fqid": "a/1"}) data["events"].append({"type": "restore", "fqid": "a/1"}) response = json_client.post(WRITE_URL, data) assert response.status_code == 200 assert_model("a/1", {"f": 1}, 2) assert_modified_fields(redis_connection, {"a/1": ["f"]})
def test_list_update_add_string(json_client, data, redis_connection, reset_redis_data): create_model(json_client, data, redis_connection, reset_redis_data) data["events"][0] = { "type": "update", "fqid": "a/1", "list_fields": {"add": {"field": ["str"]}}, } response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {"f": 1, "field": ["str"]}, 2) assert_modified_fields(redis_connection, {"a/1": ["field"]}, meta_deleted=False)
def test_restore_without_delete(json_client, data, redis_connection, reset_redis_data): response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {"f": 1}, 1) assert_modified_fields(redis_connection, {"a/1": ["f"]}) reset_redis_data() data["events"] = [{"type": "restore", "fqid": "a/1"}] response = json_client.post(WRITE_URL, data) assert_error_response(response, ERROR_CODES.MODEL_NOT_DELETED) assert_model("a/1", {"f": 1}, 1) assert_no_modified_fields(redis_connection)
def test_list_update_with_create(json_client, data, redis_connection, reset_redis_data): data["events"].append( { "type": "update", "fqid": "a/1", "list_fields": {"add": {"g": [2]}}, } ) response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {"f": 1, "g": [2]}, 1) assert_modified_fields(redis_connection, {"a/1": ["f", "g"]})
def test_single_restore(json_client, data, redis_connection, reset_redis_data): data["events"].append({"type": "delete", "fqid": "a/1"}) response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_no_model("a/1") assert_modified_fields(redis_connection, {"a/1": ["f"]}) reset_redis_data() data["events"] = [{"type": "restore", "fqid": "a/1"}] response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {"f": 1}, 2) assert_modified_fields(redis_connection, {"a/1": ["f"]})
def test_create_update(json_client, data, redis_connection): field_data = [True, None, {"test": "value"}] data["events"].append( { "type": "update", "fqid": "a/1", "fields": {"f": None, "another_field": field_data}, } ) response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {"another_field": field_data}, 1) assert_modified_fields(redis_connection, {"a/1": ["f", "another_field"]})
def test_list_update_add_remove(json_client, data, redis_connection, reset_redis_data): data["events"][0]["fields"]["f"] = [1] data["events"][0]["fields"]["f2"] = ["test"] create_model(json_client, data, redis_connection, reset_redis_data) data["events"][0] = { "type": "update", "fqid": "a/1", "list_fields": {"add": {"f": [2]}, "remove": {"f2": ["test"]}}, } response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {"f": [1, 2], "f2": []}, 2) assert_modified_fields(redis_connection, {"a/1": ["f", "f2"]}, meta_deleted=False)
def test_single_update(json_client, data, redis_connection, reset_redis_data): create_model(json_client, data, redis_connection, reset_redis_data) field_data = [True, None, {"test": "value"}] data["events"][0] = { "type": "update", "fqid": "a/1", "fields": {"f": None, "another_field": field_data}, } response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {"another_field": field_data}, 2) assert_modified_fields( redis_connection, {"a/1": ["f", "another_field"]}, meta_deleted=False )
def test_create_delete_restore_different_positions(json_client, data, redis_connection, reset_redis_data): create_model(json_client, data, redis_connection, reset_redis_data) data["events"][0] = {"type": "delete", "fqid": "a/1"} response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_no_model("a/1") assert_modified_fields(redis_connection, {"a/1": ["f"]}) reset_redis_data() data["events"][0] = {"type": "restore", "fqid": "a/1"} response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {"f": 1}, 3) assert_modified_fields(redis_connection, {"a/1": ["f"]})
def test_single_delete(json_client, data, redis_connection, reset_redis_data): create_model(json_client, data, redis_connection, reset_redis_data) data["events"][0] = {"type": "delete", "fqid": "a/1"} response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_no_model("a/1") # assert the model is still in the lookup table, but marked as deleted connection_handler = injector.get(ConnectionHandler) with connection_handler.get_connection_context(): # read from read db read_db: ReadDatabase = injector.get(ReadDatabase) model = read_db.get("a/1", [], DeletedModelsBehaviour.ONLY_DELETED) assert model == {"f": 1, "meta_deleted": True, "meta_position": 2} assert read_db.is_deleted("a/1") assert_modified_fields(redis_connection, {"a/1": ["f"]})
def test_create_empty_field(json_client, data, redis_connection): data["events"][0]["fields"]["empty"] = None response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {"f": 1}, 1) assert_modified_fields(redis_connection, {"a/1": ["f"]})
def create_model(json_client, data, redis_connection, reset_redis_data): response = json_client.post(WRITE_URL, data) assert_response_code(response, 201) assert_model("a/1", {"f": 1}, 1) assert_modified_fields(redis_connection, {"a/1": ["f"]}) reset_redis_data()