dfbe47ef28
READY: Refactor/prompt refactor * Prompt refactor * refactor imports * Prompt refactor * Import refactor * Remove excess prompts from investment_prompts.py Approved-by: Alex Galarce
115 lines
4.9 KiB
Python
115 lines
4.9 KiB
Python
import pytest
|
|
from src.prompts import preprocessing_prompts
|
|
import src.utils as utils
|
|
from src.utils.table_utils import align_and_format_tables
|
|
from src import (config)
|
|
import copy
|
|
|
|
class TestAlignAndFormatTables:
|
|
@pytest.fixture
|
|
def mock_utils(self, mocker):
|
|
mock_contains_reimbursement = mocker.patch.object(
|
|
utils.string_utils,
|
|
"contains_reimbursement",
|
|
)
|
|
mock_invoke_claude = mocker.patch.object(
|
|
utils.llm_utils,
|
|
"invoke_claude",
|
|
)
|
|
return mock_contains_reimbursement, mock_invoke_claude
|
|
|
|
def test_align_and_format_tables_with_reimbursement(self, mock_utils):
|
|
"""Test aligning and formatting tables when reimbursement keywords are present."""
|
|
mock_contains_reimbursement, mock_invoke_claude = mock_utils
|
|
mock_contains_reimbursement.return_value = True
|
|
mock_invoke_claude.return_value = (
|
|
"Table Header\nColumn 1 : Value 1% | Column 2 : Value 3\nColumn 1 : Value 2 | Column 2 : Value 4"
|
|
)
|
|
|
|
text_dict = {
|
|
"1": "-------Table Start-------- Table Header {'Column 1': ['Value 1%', 'Value 2'], 'Column 2': ['Value 3', 'Value 4']}-------Table End--------",
|
|
}
|
|
filename = "test_file.txt"
|
|
|
|
expected_prompt = preprocessing_prompts.ALIGN_AND_FORMAT_TABLES(text_dict["1"])
|
|
input_text_dict = copy.deepcopy(text_dict)
|
|
|
|
result = align_and_format_tables(text_dict, filename)
|
|
|
|
assert result == {
|
|
"1": "Table Header\nColumn 1 : Value 1% | Column 2 : Value 3\nColumn 1 : Value 2 | Column 2 : Value 4",
|
|
}
|
|
mock_contains_reimbursement.assert_called_once_with(input_text_dict["1"])
|
|
mock_invoke_claude.assert_called_once_with(
|
|
expected_prompt,
|
|
config.MODEL_ID_CLAUDE35_SONNET,
|
|
filename,
|
|
8192,
|
|
)
|
|
|
|
def test_align_and_format_tables_without_reimbursement(self, mock_utils):
|
|
"""Test aligning and formatting tables when no reimbursement keywords are present."""
|
|
mock_contains_reimbursement, mock_invoke_claude = mock_utils
|
|
mock_contains_reimbursement.return_value = False
|
|
|
|
text_dict = {
|
|
"1": "-------Table Start-------- Table Header {'Column 1': ['Value 1', 'Value 2'], 'Column 2': ['Value 3', 'Value 4']}-------Table End--------",
|
|
}
|
|
filename = "test_file.txt"
|
|
|
|
result = align_and_format_tables(text_dict, filename)
|
|
|
|
assert result == text_dict # No changes should be made
|
|
mock_contains_reimbursement.assert_called_once_with(text_dict["1"])
|
|
mock_invoke_claude.assert_not_called()
|
|
|
|
def test_align_and_format_tables_no_table(self, mock_utils):
|
|
"""Test aligning and formatting tables when no table is present."""
|
|
mock_contains_reimbursement, mock_invoke_claude = mock_utils
|
|
|
|
text_dict = {
|
|
"1": "This page does not contain a table.",
|
|
}
|
|
filename = "test_file.txt"
|
|
|
|
result = align_and_format_tables(text_dict, filename)
|
|
|
|
assert result == text_dict # No changes should be made
|
|
mock_contains_reimbursement.assert_not_called()
|
|
mock_invoke_claude.assert_not_called()
|
|
|
|
def test_align_and_format_tables_multiple_pages(self, mock_utils):
|
|
"""Test aligning and formatting tables with multiple pages."""
|
|
mock_contains_reimbursement, mock_invoke_claude = mock_utils
|
|
mock_contains_reimbursement.side_effect = [True, False]
|
|
mock_invoke_claude.return_value = (
|
|
"Table Header\nColumn 1 : Value 1 | Column 2 : Value 3%\nColumn 1 : Value 2 | Column 2 : Value 4"
|
|
)
|
|
|
|
text_dict = {
|
|
"1": "-------Table Start-------- Table Header {'Column 1': ['Value 1', 'Value 2'], 'Column 2': ['Value 3%', 'Value 4']}-------Table End--------",
|
|
"2": "This page has 'Table Start' but does not contain reimbursement.",
|
|
}
|
|
filename = "test_file.txt"
|
|
|
|
expected_prompt = preprocessing_prompts.ALIGN_AND_FORMAT_TABLES(text_dict["1"])
|
|
input_text_dict = copy.deepcopy(text_dict)
|
|
|
|
result = align_and_format_tables(text_dict, filename)
|
|
|
|
assert result == {
|
|
"1": "Table Header\nColumn 1 : Value 1 | Column 2 : Value 3%\nColumn 1 : Value 2 | Column 2 : Value 4",
|
|
"2": "This page has 'Table Start' but does not contain reimbursement.",
|
|
}
|
|
assert mock_contains_reimbursement.call_count == 2
|
|
mock_contains_reimbursement.assert_any_call(input_text_dict["1"])
|
|
mock_contains_reimbursement.assert_any_call(input_text_dict["2"])
|
|
mock_invoke_claude.assert_called_once_with(
|
|
expected_prompt,
|
|
config.MODEL_ID_CLAUDE35_SONNET,
|
|
filename,
|
|
8192,
|
|
)
|
|
for call in mock_invoke_claude.call_args_list:
|
|
prompt, _, _, _ = call[0] # Unpack the arguments
|
|
assert input_text_dict["2"] not in prompt |