mirror of
https://git-proxy.hk.martin98.com/https://github.com/infiniflow/ragflow.git
synced 2025-04-10 15:50:31 +08:00
Test: Added test cases for List Chunks HTTP API (#6514)
### What problem does this PR solve? cover [list chunks](https://ragflow.io/docs/v0.17.2/http_api_reference#list-chunks) endpoints ### Type of change - [x] update test cases
This commit is contained in:
parent
1d73baf3d8
commit
0a79dfd5cf
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@ -145,7 +145,7 @@ jobs:
|
||||
echo "Waiting for service to be available..."
|
||||
sleep 5
|
||||
done
|
||||
cd sdk/python && uv sync --python 3.10 --frozen && uv pip install . && source .venv/bin/activate && cd test/test_http_api && pytest -s --tb=short -m "not slow"
|
||||
cd sdk/python && uv sync --python 3.10 --frozen && uv pip install . && source .venv/bin/activate && cd test/test_http_api && DOC_ENGINE=infinity pytest -s --tb=short -m "not slow"
|
||||
|
||||
- name: Stop ragflow:nightly
|
||||
if: always() # always run this step even if previous steps failed
|
||||
|
@ -193,6 +193,6 @@ def list_chunks(auth, dataset_id, document_id, params=None):
|
||||
def batch_add_chunks(auth, dataset_id, document_id, num):
|
||||
chunk_ids = []
|
||||
for i in range(num):
|
||||
res = add_chunk(auth, dataset_id, document_id, {"content": f"ragflow test {i}"})
|
||||
res = add_chunk(auth, dataset_id, document_id, {"content": f"chunk test {i}"})
|
||||
chunk_ids.append(res["data"]["chunk"]["id"])
|
||||
return chunk_ids
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
|
||||
import pytest
|
||||
from common import batch_create_datasets, bulk_upload_documents, delete_dataset, list_documnet, parse_documnet
|
||||
from common import add_chunk, batch_create_datasets, bulk_upload_documents, delete_dataset, list_documnet, parse_documnet
|
||||
from libs.utils import wait_for
|
||||
|
||||
|
||||
@ -35,11 +35,31 @@ def chunk_management_tmp_dir(tmp_path_factory):
|
||||
|
||||
|
||||
@pytest.fixture(scope="class")
|
||||
def get_dataset_id_and_document_id(get_http_api_auth, chunk_management_tmp_dir):
|
||||
dataset_ids = batch_create_datasets(get_http_api_auth, 1)
|
||||
document_ids = bulk_upload_documents(get_http_api_auth, dataset_ids[0], 1, chunk_management_tmp_dir)
|
||||
parse_documnet(get_http_api_auth, dataset_ids[0], {"document_ids": document_ids})
|
||||
condition(get_http_api_auth, dataset_ids[0])
|
||||
def get_dataset_id_and_document_id(get_http_api_auth, chunk_management_tmp_dir, request):
|
||||
def cleanup():
|
||||
delete_dataset(get_http_api_auth)
|
||||
|
||||
yield dataset_ids[0], document_ids[0]
|
||||
delete_dataset(get_http_api_auth)
|
||||
request.addfinalizer(cleanup)
|
||||
|
||||
dataset_ids = batch_create_datasets(get_http_api_auth, 1)
|
||||
dataset_id = dataset_ids[0]
|
||||
document_ids = bulk_upload_documents(get_http_api_auth, dataset_id, 1, chunk_management_tmp_dir)
|
||||
parse_documnet(get_http_api_auth, dataset_id, {"document_ids": document_ids})
|
||||
condition(get_http_api_auth, dataset_id)
|
||||
|
||||
return dataset_id, document_ids[0]
|
||||
|
||||
|
||||
@pytest.fixture(scope="class")
|
||||
def add_chunks(get_http_api_auth, get_dataset_id_and_document_id):
|
||||
dataset_id, document_id = get_dataset_id_and_document_id
|
||||
chunk_ids = []
|
||||
for i in range(4):
|
||||
res = add_chunk(get_http_api_auth, dataset_id, document_id, {"content": f"chunk test {i}"})
|
||||
chunk_ids.append(res["data"]["chunk"]["id"])
|
||||
|
||||
# issues/6487
|
||||
from time import sleep
|
||||
|
||||
sleep(1)
|
||||
yield dataset_id, document_id, chunk_ids
|
||||
|
@ -60,7 +60,7 @@ class TestAddChunk:
|
||||
{"content": 1},
|
||||
100,
|
||||
"""TypeError("unsupported operand type(s) for +: \'int\' and \'str\'")""",
|
||||
marks=pytest.mark.xfail,
|
||||
marks=pytest.mark.skip,
|
||||
),
|
||||
({"content": "a"}, 0, ""),
|
||||
({"content": " "}, 102, "`content` is required"),
|
||||
@ -83,16 +83,16 @@ class TestAddChunk:
|
||||
@pytest.mark.parametrize(
|
||||
"payload, expected_code, expected_message",
|
||||
[
|
||||
({"content": "a", "important_keywords": ["a", "b", "c"]}, 0, ""),
|
||||
({"content": "a", "important_keywords": [""]}, 0, ""),
|
||||
({"content": "chunk test", "important_keywords": ["a", "b", "c"]}, 0, ""),
|
||||
({"content": "chunk test", "important_keywords": [""]}, 0, ""),
|
||||
(
|
||||
{"content": "a", "important_keywords": [1]},
|
||||
{"content": "chunk test", "important_keywords": [1]},
|
||||
100,
|
||||
"TypeError('sequence item 0: expected str instance, int found')",
|
||||
),
|
||||
({"content": "a", "important_keywords": ["a", "a"]}, 0, ""),
|
||||
({"content": "a", "important_keywords": "abc"}, 102, "`important_keywords` is required to be a list"),
|
||||
({"content": "a", "important_keywords": 123}, 102, "`important_keywords` is required to be a list"),
|
||||
({"content": "chunk test", "important_keywords": ["a", "a"]}, 0, ""),
|
||||
({"content": "chunk test", "important_keywords": "abc"}, 102, "`important_keywords` is required to be a list"),
|
||||
({"content": "chunk test", "important_keywords": 123}, 102, "`important_keywords` is required to be a list"),
|
||||
],
|
||||
)
|
||||
def test_important_keywords(self, get_http_api_auth, get_dataset_id_and_document_id, payload, expected_code, expected_message):
|
||||
@ -111,17 +111,17 @@ class TestAddChunk:
|
||||
@pytest.mark.parametrize(
|
||||
"payload, expected_code, expected_message",
|
||||
[
|
||||
({"content": "a", "questions": ["a", "b", "c"]}, 0, ""),
|
||||
({"content": "chunk test", "questions": ["a", "b", "c"]}, 0, ""),
|
||||
pytest.param(
|
||||
{"content": "a", "questions": [""]},
|
||||
{"content": "chunk test", "questions": [""]},
|
||||
0,
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/6404"),
|
||||
marks=pytest.mark.skip(reason="issues/6404"),
|
||||
),
|
||||
({"content": "a", "questions": [1]}, 100, "TypeError('sequence item 0: expected str instance, int found')"),
|
||||
({"content": "a", "questions": ["a", "a"]}, 0, ""),
|
||||
({"content": "a", "questions": "abc"}, 102, "`questions` is required to be a list"),
|
||||
({"content": "a", "questions": 123}, 102, "`questions` is required to be a list"),
|
||||
({"content": "chunk test", "questions": [1]}, 100, "TypeError('sequence item 0: expected str instance, int found')"),
|
||||
({"content": "chunk test", "questions": ["a", "a"]}, 0, ""),
|
||||
({"content": "chunk test", "questions": "abc"}, 102, "`questions` is required to be a list"),
|
||||
({"content": "chunk test", "questions": 123}, 102, "`questions` is required to be a list"),
|
||||
],
|
||||
)
|
||||
def test_questions(self, get_http_api_auth, get_dataset_id_and_document_id, payload, expected_code, expected_message):
|
||||
@ -174,12 +174,12 @@ class TestAddChunk:
|
||||
)
|
||||
def test_invalid_document_id(self, get_http_api_auth, get_dataset_id_and_document_id, document_id, expected_code, expected_message):
|
||||
dataset_id, _ = get_dataset_id_and_document_id
|
||||
res = add_chunk(get_http_api_auth, dataset_id, document_id, {"content": "a"})
|
||||
res = add_chunk(get_http_api_auth, dataset_id, document_id, {"content": "chunk test"})
|
||||
assert res["code"] == expected_code
|
||||
assert res["message"] == expected_message
|
||||
|
||||
def test_repeated_add_chunk(self, get_http_api_auth, get_dataset_id_and_document_id):
|
||||
payload = {"content": "a"}
|
||||
payload = {"content": "chunk test"}
|
||||
dataset_id, document_id = get_dataset_id_and_document_id
|
||||
res = list_chunks(get_http_api_auth, dataset_id, document_id)
|
||||
chunks_count = res["data"]["doc"]["chunk_count"]
|
||||
@ -198,7 +198,7 @@ class TestAddChunk:
|
||||
def test_add_chunk_to_deleted_document(self, get_http_api_auth, get_dataset_id_and_document_id):
|
||||
dataset_id, document_id = get_dataset_id_and_document_id
|
||||
delete_documnet(get_http_api_auth, dataset_id, {"ids": [document_id]})
|
||||
res = add_chunk(get_http_api_auth, dataset_id, document_id, {"content": "a"})
|
||||
res = add_chunk(get_http_api_auth, dataset_id, document_id, {"content": "chunk test"})
|
||||
assert res["code"] == 102
|
||||
assert res["message"] == f"You don't own the document {document_id}."
|
||||
|
||||
@ -216,7 +216,7 @@ class TestAddChunk:
|
||||
get_http_api_auth,
|
||||
dataset_id,
|
||||
document_id,
|
||||
{"content": "a"},
|
||||
{"content": f"chunk test {i}"},
|
||||
)
|
||||
for i in range(chunk_num)
|
||||
]
|
||||
|
@ -0,0 +1,203 @@
|
||||
#
|
||||
# Copyright 2025 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 os
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
|
||||
import pytest
|
||||
from common import (
|
||||
INVALID_API_TOKEN,
|
||||
batch_add_chunks,
|
||||
list_chunks,
|
||||
)
|
||||
from libs.auth import RAGFlowHttpApiAuth
|
||||
|
||||
|
||||
class TestAuthorization:
|
||||
@pytest.mark.parametrize(
|
||||
"auth, expected_code, expected_message",
|
||||
[
|
||||
(None, 0, "`Authorization` can't be empty"),
|
||||
(
|
||||
RAGFlowHttpApiAuth(INVALID_API_TOKEN),
|
||||
109,
|
||||
"Authentication error: API key is invalid!",
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_invalid_auth(self, get_dataset_id_and_document_id, auth, expected_code, expected_message):
|
||||
dataset_id, document_id = get_dataset_id_and_document_id
|
||||
res = list_chunks(auth, dataset_id, document_id)
|
||||
assert res["code"] == expected_code
|
||||
assert res["message"] == expected_message
|
||||
|
||||
|
||||
class TestChunksList:
|
||||
@pytest.mark.parametrize(
|
||||
"params, expected_code, expected_page_size, expected_message",
|
||||
[
|
||||
({"page": None, "page_size": 2}, 0, 2, ""),
|
||||
pytest.param({"page": 0, "page_size": 2}, 100, 0, "ValueError('Search does not support negative slicing.')", marks=pytest.mark.skip),
|
||||
({"page": 2, "page_size": 2}, 0, 2, ""),
|
||||
({"page": 3, "page_size": 2}, 0, 1, ""),
|
||||
({"page": "3", "page_size": 2}, 0, 1, ""),
|
||||
pytest.param({"page": -1, "page_size": 2}, 100, 0, "ValueError('Search does not support negative slicing.')", marks=pytest.mark.skip),
|
||||
pytest.param({"page": "a", "page_size": 2}, 100, 0, """ValueError("invalid literal for int() with base 10: \'a\'")""", marks=pytest.mark.skip),
|
||||
],
|
||||
)
|
||||
def test_page(self, get_http_api_auth, add_chunks, params, expected_code, expected_page_size, expected_message):
|
||||
dataset_id, document_id, _ = add_chunks
|
||||
res = list_chunks(get_http_api_auth, dataset_id, document_id, params=params)
|
||||
assert res["code"] == expected_code
|
||||
if expected_code == 0:
|
||||
assert len(res["data"]["chunks"]) == expected_page_size
|
||||
else:
|
||||
assert res["message"] == expected_message
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"params, expected_code, expected_page_size, expected_message",
|
||||
[
|
||||
({"page_size": None}, 0, 5, ""),
|
||||
pytest.param({"page_size": 0}, 0, 5, "", marks=pytest.mark.skipif(os.getenv("DOC_ENGINE") == "infinity", reason="Infinity does not support page_size=0")),
|
||||
pytest.param({"page_size": 0}, 100, 0, "3013", marks=pytest.mark.skipif(os.getenv("DOC_ENGINE") in [None, "elasticsearch"], reason="Infinity does not support page_size=0")),
|
||||
({"page_size": 1}, 0, 1, ""),
|
||||
({"page_size": 6}, 0, 5, ""),
|
||||
({"page_size": "1"}, 0, 1, ""),
|
||||
pytest.param({"page_size": -1}, 0, 5, "", marks=pytest.mark.skip),
|
||||
pytest.param({"page_size": "a"}, 100, 0, """ValueError("invalid literal for int() with base 10: \'a\'")""", marks=pytest.mark.skip),
|
||||
],
|
||||
)
|
||||
def test_page_size(self, get_http_api_auth, add_chunks, params, expected_code, expected_page_size, expected_message):
|
||||
dataset_id, document_id, _ = add_chunks
|
||||
res = list_chunks(get_http_api_auth, dataset_id, document_id, params=params)
|
||||
assert res["code"] == expected_code
|
||||
if expected_code == 0:
|
||||
assert len(res["data"]["chunks"]) == expected_page_size
|
||||
else:
|
||||
assert res["message"] == expected_message
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"params, expected_page_size",
|
||||
[
|
||||
({"keywords": None}, 5),
|
||||
({"keywords": ""}, 5),
|
||||
({"keywords": "1"}, 1),
|
||||
pytest.param({"keywords": "chunk"}, 4, marks=pytest.mark.skipif(os.getenv("DOC_ENGINE") == "infinity", reason="issues/6509")),
|
||||
({"keywords": "ragflow"}, 1),
|
||||
({"keywords": "unknown"}, 0),
|
||||
],
|
||||
)
|
||||
def test_keywords(self, get_http_api_auth, add_chunks, params, expected_page_size):
|
||||
dataset_id, document_id, _ = add_chunks
|
||||
res = list_chunks(get_http_api_auth, dataset_id, document_id, params=params)
|
||||
assert res["code"] == 0
|
||||
assert len(res["data"]["chunks"]) == expected_page_size
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"chunk_id, expected_code, expected_page_size, expected_message",
|
||||
[
|
||||
(None, 0, 5, ""),
|
||||
("", 0, 5, ""),
|
||||
pytest.param(lambda r: r[0], 0, 1, "", marks=pytest.mark.skip(reason="issues/6499")),
|
||||
pytest.param("unknown", 102, 0, "You don't own the document unknown.txt.", marks=pytest.mark.skip(reason="issues/6500")),
|
||||
],
|
||||
)
|
||||
def test_id(
|
||||
self,
|
||||
get_http_api_auth,
|
||||
add_chunks,
|
||||
chunk_id,
|
||||
expected_code,
|
||||
expected_page_size,
|
||||
expected_message,
|
||||
):
|
||||
dataset_id, document_id, chunk_ids = add_chunks
|
||||
if callable(chunk_id):
|
||||
params = {"id": chunk_id(chunk_ids)}
|
||||
else:
|
||||
params = {"id": chunk_id}
|
||||
res = list_chunks(get_http_api_auth, dataset_id, document_id, params=params)
|
||||
assert res["code"] == expected_code
|
||||
if expected_code == 0:
|
||||
if params["id"] in [None, ""]:
|
||||
assert len(res["data"]["chunks"]) == expected_page_size
|
||||
else:
|
||||
assert res["data"]["chunks"][0]["id"] == params["id"]
|
||||
else:
|
||||
assert res["message"] == expected_message
|
||||
|
||||
def test_invalid_params(self, get_http_api_auth, add_chunks):
|
||||
dataset_id, document_id, _ = add_chunks
|
||||
params = {"a": "b"}
|
||||
res = list_chunks(get_http_api_auth, dataset_id, document_id, params=params)
|
||||
assert res["code"] == 0
|
||||
assert len(res["data"]["chunks"]) == 5
|
||||
|
||||
def test_concurrent_list(self, get_http_api_auth, add_chunks):
|
||||
dataset_id, document_id, _ = add_chunks
|
||||
|
||||
with ThreadPoolExecutor(max_workers=5) as executor:
|
||||
futures = [executor.submit(list_chunks, get_http_api_auth, dataset_id, document_id) for i in range(100)]
|
||||
responses = [f.result() for f in futures]
|
||||
assert all(r["code"] == 0 for r in responses)
|
||||
assert all(len(r["data"]["chunks"]) == 5 for r in responses)
|
||||
|
||||
def test_default(self, get_http_api_auth, get_dataset_id_and_document_id):
|
||||
dataset_id, document_id = get_dataset_id_and_document_id
|
||||
res = list_chunks(get_http_api_auth, dataset_id, document_id)
|
||||
chunks_count = res["data"]["doc"]["chunk_count"]
|
||||
batch_add_chunks(get_http_api_auth, dataset_id, document_id, 31)
|
||||
# issues/6487
|
||||
from time import sleep
|
||||
|
||||
sleep(3)
|
||||
res = list_chunks(get_http_api_auth, dataset_id, document_id)
|
||||
assert res["code"] == 0
|
||||
assert len(res["data"]["chunks"]) == 30
|
||||
assert res["data"]["doc"]["chunk_count"] == chunks_count + 31
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"dataset_id, expected_code, expected_message",
|
||||
[
|
||||
("", 100, "<NotFound '404: Not Found'>"),
|
||||
(
|
||||
"invalid_dataset_id",
|
||||
102,
|
||||
"You don't own the dataset invalid_dataset_id.",
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_invalid_dataset_id(self, get_http_api_auth, add_chunks, dataset_id, expected_code, expected_message):
|
||||
_, document_id, _ = add_chunks
|
||||
res = list_chunks(get_http_api_auth, dataset_id, document_id)
|
||||
assert res["code"] == expected_code
|
||||
assert res["message"] == expected_message
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"document_id, expected_code, expected_message",
|
||||
[
|
||||
("", 102, "The dataset not own the document chunks."),
|
||||
(
|
||||
"invalid_document_id",
|
||||
102,
|
||||
"You don't own the document invalid_document_id.",
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_invalid_document_id(self, get_http_api_auth, add_chunks, document_id, expected_code, expected_message):
|
||||
dataset_id, _, _ = add_chunks
|
||||
res = list_chunks(get_http_api_auth, dataset_id, document_id)
|
||||
assert res["code"] == expected_code
|
||||
assert res["message"] == expected_message
|
@ -20,7 +20,10 @@ from common import batch_create_datasets, delete_dataset
|
||||
|
||||
|
||||
@pytest.fixture(scope="class")
|
||||
def get_dataset_ids(get_http_api_auth):
|
||||
ids = batch_create_datasets(get_http_api_auth, 5)
|
||||
yield ids
|
||||
delete_dataset(get_http_api_auth)
|
||||
def get_dataset_ids(get_http_api_auth, request):
|
||||
def cleanup():
|
||||
delete_dataset(get_http_api_auth)
|
||||
|
||||
request.addfinalizer(cleanup)
|
||||
|
||||
return batch_create_datasets(get_http_api_auth, 5)
|
||||
|
@ -65,14 +65,14 @@ class TestDatasetList:
|
||||
100,
|
||||
0,
|
||||
"1064",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
pytest.param(
|
||||
{"page": "a", "page_size": 2},
|
||||
100,
|
||||
0,
|
||||
"""ValueError("invalid literal for int() with base 10: \'a\'")""",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
],
|
||||
)
|
||||
@ -97,14 +97,14 @@ class TestDatasetList:
|
||||
100,
|
||||
0,
|
||||
"1064",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
pytest.param(
|
||||
{"page_size": "a"},
|
||||
100,
|
||||
0,
|
||||
"""ValueError("invalid literal for int() with base 10: \'a\'")""",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
],
|
||||
)
|
||||
@ -149,14 +149,14 @@ class TestDatasetList:
|
||||
0,
|
||||
lambda r: (is_sorted(r["data"]["docs"], "name", False)),
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
pytest.param(
|
||||
{"orderby": "unknown"},
|
||||
102,
|
||||
0,
|
||||
"orderby should be create_time or update_time",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
],
|
||||
)
|
||||
@ -232,7 +232,7 @@ class TestDatasetList:
|
||||
102,
|
||||
0,
|
||||
"desc should be true or false",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
@ -67,7 +67,7 @@ class TestDatasetUpdate:
|
||||
100,
|
||||
"""AttributeError("\'NoneType\' object has no attribute \'strip\'")""",
|
||||
),
|
||||
pytest.param("", 102, "", marks=pytest.mark.xfail(reason="issue#5915")),
|
||||
pytest.param("", 102, "", marks=pytest.mark.skip(reason="issue/5915")),
|
||||
("dataset_1", 102, "Duplicated dataset name in updating dataset."),
|
||||
("DATASET_1", 102, "Duplicated dataset name in updating dataset."),
|
||||
],
|
||||
|
@ -25,8 +25,13 @@ def file_management_tmp_dir(tmp_path_factory):
|
||||
|
||||
|
||||
@pytest.fixture(scope="class")
|
||||
def get_dataset_id_and_document_ids(get_http_api_auth, file_management_tmp_dir):
|
||||
def get_dataset_id_and_document_ids(get_http_api_auth, file_management_tmp_dir, request):
|
||||
def cleanup():
|
||||
delete_dataset(get_http_api_auth)
|
||||
|
||||
request.addfinalizer(cleanup)
|
||||
|
||||
dataset_ids = batch_create_datasets(get_http_api_auth, 1)
|
||||
document_ids = bulk_upload_documents(get_http_api_auth, dataset_ids[0], 5, file_management_tmp_dir)
|
||||
yield dataset_ids[0], document_ids
|
||||
delete_dataset(get_http_api_auth)
|
||||
dataset_id = dataset_ids[0]
|
||||
document_ids = bulk_upload_documents(get_http_api_auth, dataset_id, 5, file_management_tmp_dir)
|
||||
return dataset_id, document_ids
|
||||
|
@ -84,14 +84,14 @@ class TestDocumentList:
|
||||
100,
|
||||
0,
|
||||
"1064",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
pytest.param(
|
||||
{"page": "a", "page_size": 2},
|
||||
100,
|
||||
0,
|
||||
"""ValueError("invalid literal for int() with base 10: \'a\'")""",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
],
|
||||
)
|
||||
@ -126,14 +126,14 @@ class TestDocumentList:
|
||||
100,
|
||||
0,
|
||||
"1064",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
pytest.param(
|
||||
{"page_size": "a"},
|
||||
100,
|
||||
0,
|
||||
"""ValueError("invalid literal for int() with base 10: \'a\'")""",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
],
|
||||
)
|
||||
@ -180,14 +180,14 @@ class TestDocumentList:
|
||||
0,
|
||||
lambda r: (is_sorted(r["data"]["docs"], "name", False)),
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
pytest.param(
|
||||
{"orderby": "unknown"},
|
||||
102,
|
||||
0,
|
||||
"orderby should be create_time or update_time",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
],
|
||||
)
|
||||
@ -241,7 +241,7 @@ class TestDocumentList:
|
||||
0,
|
||||
lambda r: (is_sorted(r["data"]["docs"], "create_time", False)),
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
(
|
||||
{"desc": "False"},
|
||||
@ -266,7 +266,7 @@ class TestDocumentList:
|
||||
102,
|
||||
0,
|
||||
"desc should be true or false",
|
||||
marks=pytest.mark.xfail(reason="issues/5851"),
|
||||
marks=pytest.mark.skip(reason="issues/5851"),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
@ -183,99 +183,99 @@ class TestUpdatedDocument:
|
||||
{"create_date": "Fri, 14 Mar 2025 16:53:42 GMT"},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"create_time": 1},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"created_by": "ragflow_test"},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"dataset_id": "ragflow_test"},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"id": "ragflow_test"},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"location": "ragflow_test.txt"},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"process_begin_at": 1},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"process_duation": 1.0},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param({"progress": 1.0}, 102, "Can't change `progress`."),
|
||||
pytest.param(
|
||||
{"progress_msg": "ragflow_test"},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"run": "ragflow_test"},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"size": 1},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"source_type": "ragflow_test"},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"thumbnail": "ragflow_test"},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
({"token_count": 1}, 102, "Can't change `token_count`."),
|
||||
pytest.param(
|
||||
{"type": "ragflow_test"},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"update_date": "Fri, 14 Mar 2025 16:33:17 GMT"},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
pytest.param(
|
||||
{"update_time": 1},
|
||||
102,
|
||||
"The input parameters are invalid.",
|
||||
marks=pytest.mark.xfail(reason="issues/6104"),
|
||||
marks=pytest.mark.skip(reason="issues/6104"),
|
||||
),
|
||||
],
|
||||
)
|
||||
@ -316,35 +316,35 @@ class TestUpdatedDocument:
|
||||
{"chunk_token_num": -1},
|
||||
100,
|
||||
"AssertionError('chunk_token_num should be in range from 1 to 100000000')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"chunk_token_num": 0},
|
||||
100,
|
||||
"AssertionError('chunk_token_num should be in range from 1 to 100000000')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"chunk_token_num": 100000000},
|
||||
100,
|
||||
"AssertionError('chunk_token_num should be in range from 1 to 100000000')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"chunk_token_num": 3.14},
|
||||
102,
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"chunk_token_num": "1024"},
|
||||
100,
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
(
|
||||
"naive",
|
||||
@ -365,7 +365,7 @@ class TestUpdatedDocument:
|
||||
{"html4excel": 1},
|
||||
100,
|
||||
"AssertionError('html4excel should be True or False')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
("naive", {"delimiter": ""}, 0, ""),
|
||||
("naive", {"delimiter": "`##`"}, 0, ""),
|
||||
@ -374,42 +374,42 @@ class TestUpdatedDocument:
|
||||
{"delimiter": 1},
|
||||
100,
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"task_page_size": -1},
|
||||
100,
|
||||
"AssertionError('task_page_size should be in range from 1 to 100000000')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"task_page_size": 0},
|
||||
100,
|
||||
"AssertionError('task_page_size should be in range from 1 to 100000000')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"task_page_size": 100000000},
|
||||
100,
|
||||
"AssertionError('task_page_size should be in range from 1 to 100000000')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"task_page_size": 3.14},
|
||||
100,
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"task_page_size": "1024"},
|
||||
100,
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
("naive", {"raptor": {"use_raptor": True}}, 0, ""),
|
||||
("naive", {"raptor": {"use_raptor": False}}, 0, ""),
|
||||
@ -418,91 +418,91 @@ class TestUpdatedDocument:
|
||||
{"invalid_key": "invalid_value"},
|
||||
100,
|
||||
"""AssertionError("Abnormal \'parser_config\'. Invalid key: invalid_key")""",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"auto_keywords": -1},
|
||||
100,
|
||||
"AssertionError('auto_keywords should be in range from 0 to 32')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"auto_keywords": 32},
|
||||
100,
|
||||
"AssertionError('auto_keywords should be in range from 0 to 32')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"auto_questions": 3.14},
|
||||
100,
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"auto_keywords": "1024"},
|
||||
100,
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"auto_questions": -1},
|
||||
100,
|
||||
"AssertionError('auto_questions should be in range from 0 to 10')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"auto_questions": 10},
|
||||
100,
|
||||
"AssertionError('auto_questions should be in range from 0 to 10')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"auto_questions": 3.14},
|
||||
100,
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"auto_questions": "1024"},
|
||||
100,
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"topn_tags": -1},
|
||||
100,
|
||||
"AssertionError('topn_tags should be in range from 0 to 10')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"topn_tags": 10},
|
||||
100,
|
||||
"AssertionError('topn_tags should be in range from 0 to 10')",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"topn_tags": 3.14},
|
||||
100,
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
pytest.param(
|
||||
"naive",
|
||||
{"topn_tags": "1024"},
|
||||
100,
|
||||
"",
|
||||
marks=pytest.mark.xfail(reason="issues/6098"),
|
||||
marks=pytest.mark.skip(reason="issues/6098"),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user