parent
9b1661c9ef
commit
12475d8d0a
@ -0,0 +1,87 @@
|
||||
import pytest
|
||||
import requests
|
||||
from typing import Dict, Any
|
||||
from .conftest import BASE_URL
|
||||
|
||||
|
||||
class TestRelationExtractionEndpoint:
|
||||
"""Tests the /relation-extraction endpoint"""
|
||||
|
||||
def test_single_text_with_entities(self, api_client):
|
||||
"""Test with a single text and entities"""
|
||||
payload = {
|
||||
"text": "Steve Jobs founded Apple Inc. which is located in Cupertino.",
|
||||
"relations": ["founded", "located_in"],
|
||||
"entities": ["person", "organization", "location"],
|
||||
"threshold": 0.3
|
||||
}
|
||||
response = api_client.post(f"{BASE_URL}/relation-extraction", json=payload)
|
||||
assert response.status_code == 200
|
||||
|
||||
data = response.json()
|
||||
assert "outputs" in data
|
||||
assert isinstance(data["outputs"], list)
|
||||
|
||||
def test_single_text_without_entities(self, api_client):
|
||||
"""Test without explicit entities"""
|
||||
payload = {
|
||||
"text": "Bill Gates founded Microsoft.",
|
||||
"relations": ["founded"],
|
||||
"threshold": 0.3
|
||||
}
|
||||
response = api_client.post(f"{BASE_URL}/relation-extraction", json=payload)
|
||||
assert response.status_code == 200
|
||||
|
||||
def test_batch_texts(self, api_client):
|
||||
"""Test with a batch of texts"""
|
||||
payload = {
|
||||
"texts": [
|
||||
"Bill Gates founded Microsoft.",
|
||||
"Tesla was founded by Elon Musk.",
|
||||
"Apple is based in California."
|
||||
],
|
||||
"relations": ["founded", "founded_by", "based_in"],
|
||||
"threshold": 0.3
|
||||
}
|
||||
response = api_client.post(f"{BASE_URL}/relation-extraction", json=payload)
|
||||
assert response.status_code == 200
|
||||
|
||||
data = response.json()
|
||||
assert len(data["outputs"]) == 3
|
||||
|
||||
def test_with_optional_rules(self, api_client):
|
||||
"""Test with optional rules"""
|
||||
payload = {
|
||||
"text": "Steve Jobs founded Apple Inc.",
|
||||
"relations": ["founded"],
|
||||
"rules": [
|
||||
{
|
||||
"relation": "founded",
|
||||
"pairs_filter": [["person", "organization"]],
|
||||
"distance": 10
|
||||
}
|
||||
],
|
||||
"threshold": 0.3
|
||||
}
|
||||
response = api_client.post(f"{BASE_URL}/relation-extraction", json=payload)
|
||||
assert response.status_code == 200
|
||||
|
||||
def test_error_empty_relations(self, api_client):
|
||||
"""Test error with an empty relations list"""
|
||||
payload = {
|
||||
"text": "Some text",
|
||||
"relations": []
|
||||
}
|
||||
response = api_client.post(f"{BASE_URL}/relation-extraction", json=payload)
|
||||
assert response.status_code == 422
|
||||
|
||||
def test_error_both_text_and_texts(self, api_client):
|
||||
"""Test error when both text and texts are present"""
|
||||
payload = {
|
||||
"text": "Some text",
|
||||
"texts": ["Another text"],
|
||||
"relations": ["founded"]
|
||||
}
|
||||
response = api_client.post(f"{BASE_URL}/relation-extraction", json=payload)
|
||||
assert response.status_code == 400
|
||||
|
||||
Loading…
Reference in new issue