1
1
import base64
2
- from fastapi import HTTPException
3
- import pytest
4
- from fastapi .testclient import TestClient
2
+
5
3
from app .app import app
6
4
from app .endpoints .splitter import validate_request
7
5
from app .models .splitter import SplitterRequest
6
+ from fastapi import HTTPException
7
+ from fastapi .testclient import TestClient
8
+ import pytest
9
+
8
10
from tests .conftest import MOCK_API_KEY
9
11
10
12
# Create a test client
11
13
client = TestClient (app )
12
14
15
+
13
16
def encode_file_to_base64 (file_path ):
14
17
"""Encode a file to base64 string."""
15
18
with open (file_path , "rb" ) as file :
16
- return base64 .b64encode (file .read ()).decode ('utf-8' )
19
+ return base64 .b64encode (file .read ()).decode ("utf-8" )
20
+
17
21
18
22
@pytest .mark .asyncio
19
23
async def test_split_ppt ():
@@ -22,111 +26,81 @@ async def test_split_ppt():
22
26
request_payload = {
23
27
"document_content" : ppt_content_base64 ,
24
28
"chunk_size" : 100 ,
25
- "chunk_overlap" : 10
29
+ "chunk_overlap" : 10 ,
26
30
}
27
- response = client .post (
28
- "/splitter/ppt" ,
29
- json = request_payload ,
30
- headers = {"api-key" : MOCK_API_KEY }
31
- )
31
+ response = client .post ("/splitter/ppt" , json = request_payload , headers = {"api-key" : MOCK_API_KEY })
32
32
if response .status_code != 200 :
33
33
print (f"Response status code: { response .status_code } " )
34
34
print (f"Response content: { response .json ()} " )
35
35
assert response .status_code == 200
36
36
assert "chunks" in response .json ()
37
37
38
+
38
39
@pytest .mark .asyncio
39
40
async def test_split_py ():
40
41
"""Test splitting Python code into chunks."""
41
42
python_code = """
42
43
def hello_world():
43
44
print("Hello, world!")
44
45
"""
45
- python_code_base64 = base64 .b64encode (python_code .encode ()).decode ('utf-8' )
46
- request_payload = {
47
- "document_content" : python_code_base64 ,
48
- "chunk_size" : 50 ,
49
- "chunk_overlap" : 5
50
- }
51
- response = client .post (
52
- "/splitter/py" ,
53
- json = request_payload ,
54
- headers = {"api-key" : MOCK_API_KEY }
55
- )
46
+ python_code_base64 = base64 .b64encode (python_code .encode ()).decode ("utf-8" )
47
+ request_payload = {"document_content" : python_code_base64 , "chunk_size" : 50 , "chunk_overlap" : 5 }
48
+ response = client .post ("/splitter/py" , json = request_payload , headers = {"api-key" : MOCK_API_KEY })
56
49
assert response .status_code == 200
57
50
assert "chunks" in response .json ()
58
51
52
+
59
53
@pytest .mark .asyncio
60
54
async def test_split_pdf ():
61
55
"""Test splitting text in a PDF document into chunks."""
62
56
pdf_content_base64 = encode_file_to_base64 ("./tests/test_files/test_document.pdf" )
63
57
request_payload = {
64
58
"document_content" : pdf_content_base64 ,
65
59
"chunk_size" : 200 ,
66
- "chunk_overlap" : 20
60
+ "chunk_overlap" : 20 ,
67
61
}
68
- response = client .post (
69
- "/splitter/pdf" ,
70
- json = request_payload ,
71
- headers = {"api-key" : MOCK_API_KEY }
72
- )
62
+ response = client .post ("/splitter/pdf" , json = request_payload , headers = {"api-key" : MOCK_API_KEY })
73
63
assert response .status_code == 200
74
64
assert "chunks" in response .json ()
75
65
66
+
76
67
# Define test cases for validate_request()
77
68
validate_request_test_cases = [
78
69
# Test case 1: valid request
79
70
(
80
71
SplitterRequest (
81
- document_content = "dGVzdA==" , # base64 for "test"
82
- chunk_size = 100 ,
83
- chunk_overlap = 10
72
+ document_content = "dGVzdA==" , chunk_size = 100 , chunk_overlap = 10 # base64 for "test"
84
73
),
85
74
MOCK_API_KEY ,
86
75
None ,
87
76
),
88
77
# Test case: invalid API key
89
78
(
90
- SplitterRequest (
91
- document_content = "dGVzdA==" ,
92
- chunk_size = 100 ,
93
- chunk_overlap = 10
94
- ),
79
+ SplitterRequest (document_content = "dGVzdA==" , chunk_size = 100 , chunk_overlap = 10 ),
95
80
"invalid_api_key" ,
96
81
HTTPException (status_code = 401 , detail = "Invalid API key" ),
97
82
),
98
83
# Test case 2: missing document content
99
84
(
100
- SplitterRequest (
101
- document_content = "" ,
102
- chunk_size = 100 ,
103
- chunk_overlap = 10
104
- ),
85
+ SplitterRequest (document_content = "" , chunk_size = 100 , chunk_overlap = 10 ),
105
86
MOCK_API_KEY ,
106
87
HTTPException (status_code = 400 , detail = "No document content provided" ),
107
88
),
108
89
# Test case 4: invalid chunk size
109
90
(
110
- SplitterRequest (
111
- document_content = "dGVzdA==" ,
112
- chunk_size = 0 ,
113
- chunk_overlap = 10
114
- ),
91
+ SplitterRequest (document_content = "dGVzdA==" , chunk_size = 0 , chunk_overlap = 10 ),
115
92
MOCK_API_KEY ,
116
93
HTTPException (status_code = 400 , detail = "No chunk size provided" ),
117
94
),
118
95
# Test case 5: invalid chunk overlap
119
96
(
120
- SplitterRequest (
121
- document_content = "dGVzdA==" ,
122
- chunk_size = 100 ,
123
- chunk_overlap = - 1
124
- ),
97
+ SplitterRequest (document_content = "dGVzdA==" , chunk_size = 100 , chunk_overlap = - 1 ),
125
98
MOCK_API_KEY ,
126
99
HTTPException (status_code = 400 , detail = "Chunk overlap must be greater than or equal to 0" ),
127
100
),
128
101
]
129
102
103
+
130
104
@pytest .mark .parametrize ("api_request, api_key, expected_exception" , validate_request_test_cases )
131
105
def test_validate_request (api_request , api_key , expected_exception ):
132
106
"""Test the validate_request function with various scenarios."""
0 commit comments