Files
ragflow/test/testcases/restful_api/test_documents.py
Idriss Sbaaoui 09e1fd290a Chore: migrate tests to restful api (#14871)
### What problem does this PR solve?

add new testing suite for the new restful api endpoints meant to replace
http and web api tests

### Type of change

- [x] New Feature (non-breaking change which adds functionality)
- [x] Other (please describe): test
2026-05-13 15:07:23 +08:00

123 lines
4.5 KiB
Python

#
# Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import pytest
from utils.file_utils import create_txt_file
@pytest.mark.p1
def test_documents_upload_and_list(rest_client, create_dataset, tmp_path):
dataset_id = create_dataset("dataset_upload_list")
fp = create_txt_file(tmp_path / "upload_and_list.txt")
with fp.open("rb") as file_obj:
res = rest_client.post(
f"/datasets/{dataset_id}/documents",
files=[("file", (fp.name, file_obj))],
)
assert res.status_code == 200
payload = res.json()
assert payload["code"] == 0, payload
assert payload["data"][0]["dataset_id"] == dataset_id, payload
list_res = rest_client.get(f"/datasets/{dataset_id}/documents")
assert list_res.status_code == 200
list_payload = list_res.json()
assert list_payload["code"] == 0, list_payload
assert list_payload["data"]["total"] >= 1, list_payload
assert any(doc["name"] == fp.name for doc in list_payload["data"]["docs"]), list_payload
@pytest.mark.p2
def test_documents_upload_missing_file(rest_client, create_dataset):
dataset_id = create_dataset("dataset_upload_missing")
res = rest_client.post(f"/datasets/{dataset_id}/documents")
assert res.status_code == 200
payload = res.json()
assert payload["code"] == 101, payload
assert payload["message"] == "No file part!", payload
@pytest.mark.p2
def test_documents_update_patch_and_delete(rest_client, create_document):
dataset_id, document_id = create_document("update_target.txt")
patch_res = rest_client.patch(
f"/datasets/{dataset_id}/documents/{document_id}",
json={"name": "updated_target.txt"},
)
assert patch_res.status_code == 200
patch_payload = patch_res.json()
assert patch_payload["code"] == 0, patch_payload
assert patch_payload["data"]["name"] == "updated_target.txt", patch_payload
delete_res = rest_client.delete(
f"/datasets/{dataset_id}/documents",
json={"ids": [document_id]},
)
assert delete_res.status_code == 200
delete_payload = delete_res.json()
assert delete_payload["code"] == 0, delete_payload
assert delete_payload["data"]["deleted"] == 1, delete_payload
list_res = rest_client.get(f"/datasets/{dataset_id}/documents")
assert list_res.status_code == 200
list_payload = list_res.json()
assert list_payload["code"] == 0, list_payload
assert all(doc["id"] != document_id for doc in list_payload["data"]["docs"]), list_payload
@pytest.mark.p2
def test_documents_parse_and_stop(rest_client, create_document):
dataset_id, document_id = create_document("parse_target.txt")
parse_res = rest_client.post(
f"/datasets/{dataset_id}/documents/parse",
json={"document_ids": [document_id]},
)
assert parse_res.status_code == 200
parse_payload = parse_res.json()
assert parse_payload["code"] == 0, parse_payload
stop_res = rest_client.post(
f"/datasets/{dataset_id}/documents/stop",
json={"document_ids": [document_id]},
)
assert stop_res.status_code == 200
stop_payload = stop_res.json()
# Depending on timing this can be immediate stop success or "already completed".
assert stop_payload["code"] in (0, 102), stop_payload
if stop_payload["code"] == 102:
assert "already completed" in stop_payload["message"], stop_payload
@pytest.mark.p2
def test_documents_metadata_update_path(rest_client, create_document):
dataset_id, document_id = create_document("metadata_target.txt")
res = rest_client.patch(
f"/datasets/{dataset_id}/documents/metadatas",
json={
"selector": {"document_ids": [document_id]},
"updates": [{"key": "author", "value": "qa"}],
"deletes": [],
},
)
assert res.status_code == 200
payload = res.json()
assert payload["code"] == 0, payload
assert payload["data"]["matched_docs"] == 1, payload
assert payload["data"]["updated"] >= 1, payload