Skip to content

Commit c1a59f2

Browse files
committed
Add tests and fix linting
1 parent 4e50954 commit c1a59f2

File tree

3 files changed

+136
-17
lines changed

3 files changed

+136
-17
lines changed

terminusdb_client/tests/integration_tests/test_conftest.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
"""Unit tests for conftest.py helper functions"""
2-
import pytest
32
from unittest.mock import patch, Mock
43
import requests
54

@@ -19,7 +18,7 @@ def test_local_server_running_200(self, mock_get):
1918
mock_response = Mock()
2019
mock_response.status_code = 200
2120
mock_get.return_value = mock_response
22-
21+
2322
assert is_local_server_running() is True
2423
mock_get.assert_called_once_with("http://127.0.0.1:6363", timeout=2)
2524

@@ -29,21 +28,21 @@ def test_local_server_running_404(self, mock_get):
2928
mock_response = Mock()
3029
mock_response.status_code = 404
3130
mock_get.return_value = mock_response
32-
31+
3332
assert is_local_server_running() is True
3433

3534
@patch('terminusdb_client.tests.integration_tests.conftest.requests.get')
3635
def test_local_server_not_running_connection_error(self, mock_get):
3736
"""Test local server detection returns False on connection error"""
3837
mock_get.side_effect = requests.exceptions.ConnectionError()
39-
38+
4039
assert is_local_server_running() is False
4140

4241
@patch('terminusdb_client.tests.integration_tests.conftest.requests.get')
4342
def test_local_server_not_running_timeout(self, mock_get):
4443
"""Test local server detection returns False on timeout"""
4544
mock_get.side_effect = requests.exceptions.Timeout()
46-
45+
4746
assert is_local_server_running() is False
4847

4948
@patch('terminusdb_client.tests.integration_tests.conftest.requests.get')
@@ -52,7 +51,7 @@ def test_docker_server_running_200(self, mock_get):
5251
mock_response = Mock()
5352
mock_response.status_code = 200
5453
mock_get.return_value = mock_response
55-
54+
5655
assert is_docker_server_running() is True
5756
mock_get.assert_called_once_with("http://127.0.0.1:6366", timeout=2)
5857

@@ -62,14 +61,14 @@ def test_docker_server_running_404(self, mock_get):
6261
mock_response = Mock()
6362
mock_response.status_code = 404
6463
mock_get.return_value = mock_response
65-
64+
6665
assert is_docker_server_running() is True
6766

6867
@patch('terminusdb_client.tests.integration_tests.conftest.requests.get')
6968
def test_docker_server_not_running(self, mock_get):
7069
"""Test Docker server detection returns False on connection error"""
7170
mock_get.side_effect = requests.exceptions.ConnectionError()
72-
71+
7372
assert is_docker_server_running() is False
7473

7574
@patch('terminusdb_client.tests.integration_tests.conftest.requests.get')
@@ -78,7 +77,7 @@ def test_jwt_server_running_200(self, mock_get):
7877
mock_response = Mock()
7978
mock_response.status_code = 200
8079
mock_get.return_value = mock_response
81-
80+
8281
assert is_jwt_server_running() is True
8382
mock_get.assert_called_once_with("http://127.0.0.1:6367", timeout=2)
8483

@@ -88,12 +87,12 @@ def test_jwt_server_running_404(self, mock_get):
8887
mock_response = Mock()
8988
mock_response.status_code = 404
9089
mock_get.return_value = mock_response
91-
90+
9291
assert is_jwt_server_running() is True
9392

9493
@patch('terminusdb_client.tests.integration_tests.conftest.requests.get')
9594
def test_jwt_server_not_running(self, mock_get):
9695
"""Test JWT server detection returns False on connection error"""
9796
mock_get.side_effect = requests.exceptions.ConnectionError()
98-
97+
9998
assert is_jwt_server_running() is False

terminusdb_client/tests/test_client_init.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
"""Unit tests for Client initialization"""
2-
import pytest
32
from terminusdb_client.client import Client
4-
from terminusdb_client.errors import InterfaceError
53

64

75
class TestClientInitialization:
@@ -29,9 +27,9 @@ def test_client_copy(self):
2927
client1 = Client("http://localhost:6363")
3028
client1.team = "test_team"
3129
client1.db = "test_db"
32-
30+
3331
client2 = client1.copy()
34-
32+
3533
assert client2.server_url == client1.server_url
3634
assert client2.team == client1.team
3735
assert client2.db == client1.db
@@ -42,9 +40,9 @@ def test_client_copy_modifications_independent(self):
4240
"""Test modifications to copied client don't affect original"""
4341
client1 = Client("http://localhost:6363")
4442
client1.team = "team1"
45-
43+
4644
client2 = client1.copy()
4745
client2.team = "team2"
48-
46+
4947
assert client1.team == "team1"
5048
assert client2.team == "team2"
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
"""Unit tests for idgen_random WOQL method"""
2+
from terminusdb_client.woqlquery.woql_query import WOQLQuery
3+
4+
5+
class TestIdgenRandom:
6+
"""Test idgen_random WOQL method"""
7+
8+
def test_idgen_random_basic(self):
9+
"""Test basic idgen_random functionality"""
10+
woql = WOQLQuery().idgen_random("Person/", "v:PersonID")
11+
result = woql.to_dict()
12+
13+
assert result["@type"] == "RandomKey"
14+
assert result["base"]["@type"] == "DataValue"
15+
assert result["base"]["data"]["@type"] == "xsd:string"
16+
assert result["base"]["data"]["@value"] == "Person/"
17+
assert result["uri"]["@type"] == "NodeValue"
18+
assert result["uri"]["variable"] == "PersonID"
19+
20+
def test_idgen_random_with_prefix(self):
21+
"""Test idgen_random with different prefix formats"""
22+
woql = WOQLQuery().idgen_random("http://example.org/Person/", "v:ID")
23+
result = woql.to_dict()
24+
25+
assert result["base"]["data"]["@value"] == "http://example.org/Person/"
26+
assert result["uri"]["variable"] == "ID"
27+
28+
def test_idgen_random_chaining(self):
29+
"""Test idgen_random can be chained with other operations"""
30+
woql = (WOQLQuery()
31+
.triple("v:Person", "rdf:type", "@schema:Person")
32+
.idgen_random("Person/", "v:PersonID"))
33+
34+
result = woql.to_dict()
35+
assert result["@type"] == "And"
36+
assert len(result["and"]) == 2
37+
assert result["and"][0]["@type"] == "Triple"
38+
assert result["and"][1]["@type"] == "RandomKey"
39+
40+
def test_idgen_random_multiple_calls(self):
41+
"""Test multiple idgen_random calls in same query"""
42+
woql = (WOQLQuery()
43+
.idgen_random("Person/", "v:PersonID")
44+
.idgen_random("Order/", "v:OrderID"))
45+
46+
result = woql.to_dict()
47+
assert result["@type"] == "And"
48+
assert result["and"][0]["@type"] == "RandomKey"
49+
assert result["and"][0]["base"]["data"]["@value"] == "Person/"
50+
assert result["and"][1]["@type"] == "RandomKey"
51+
assert result["and"][1]["base"]["data"]["@value"] == "Order/"
52+
53+
def test_idgen_random_args_parameter(self):
54+
"""Test idgen_random args parameter returns parameter list"""
55+
result = WOQLQuery().idgen_random("args", "v:ID")
56+
57+
assert result == ["base", "uri"]
58+
59+
def test_idgen_random_empty_prefix(self):
60+
"""Test idgen_random with empty prefix"""
61+
woql = WOQLQuery().idgen_random("", "v:ID")
62+
result = woql.to_dict()
63+
64+
assert result["@type"] == "RandomKey"
65+
assert result["base"]["data"]["@value"] == ""
66+
67+
def test_idgen_random_variable_output(self):
68+
"""Test idgen_random output variable format"""
69+
woql = WOQLQuery().idgen_random("Test/", "v:MyVar")
70+
result = woql.to_dict()
71+
72+
assert result["uri"]["variable"] == "MyVar"
73+
74+
def test_idgen_random_in_query_chain(self):
75+
"""Test idgen_random in complex query chain"""
76+
woql = (WOQLQuery()
77+
.triple("v:Person", "rdf:type", "@schema:Person")
78+
.idgen_random("Person/", "v:PersonID")
79+
.triple("v:PersonID", "@schema:name", "v:Name"))
80+
81+
result = woql.to_dict()
82+
assert result["@type"] == "And"
83+
# WOQLQuery chains create nested And structures
84+
# Verify RandomKey is present in the chain
85+
has_random_key = False
86+
87+
def check_for_random_key(obj):
88+
nonlocal has_random_key
89+
if isinstance(obj, dict):
90+
if obj.get("@type") == "RandomKey":
91+
has_random_key = True
92+
for value in obj.values():
93+
check_for_random_key(value)
94+
elif isinstance(obj, list):
95+
for item in obj:
96+
check_for_random_key(item)
97+
98+
check_for_random_key(result)
99+
assert has_random_key, "RandomKey should be present in query chain"
100+
101+
def test_idgen_random_matches_expected_json(self):
102+
"""Test idgen_random produces expected WOQL JSON structure"""
103+
from terminusdb_client.tests.woqljson.woqlIdgenJson import WOQL_RANDOM_KEY_JSON
104+
105+
woql = WOQLQuery().idgen_random("Person/", "v:Person_ID")
106+
result = woql.to_dict()
107+
108+
assert result == WOQL_RANDOM_KEY_JSON
109+
110+
def test_idgen_random_with_special_characters_in_prefix(self):
111+
"""Test idgen_random handles special characters in prefix"""
112+
woql = WOQLQuery().idgen_random("Test/2024-11/", "v:ID")
113+
result = woql.to_dict()
114+
115+
assert result["base"]["data"]["@value"] == "Test/2024-11/"
116+
117+
def test_idgen_random_preserves_cursor_state(self):
118+
"""Test idgen_random returns self for method chaining"""
119+
woql = WOQLQuery()
120+
result = woql.idgen_random("Test/", "v:ID")
121+
122+
assert result is woql # Should return same object for chaining

0 commit comments

Comments
 (0)