Skip to content

Commit 064cd00

Browse files
authored
[DE-545] UTF-8 names (#260)
* Adding tests * tests: create collection index * fix: black * new: `test_database_and_collection_utf8`
1 parent f905d6e commit 064cd00

File tree

4 files changed

+123
-1
lines changed

4 files changed

+123
-1
lines changed

tests/static/cluster.conf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ jwt-secret = /tests/static/keyfile
88

99
[args]
1010
all.database.password = passwd
11+
# Extended names can be used starting with 3.11
12+
# all.database.extended-names = true
1113
all.log.api-enabled = true

tests/static/single.conf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@ jwt-secret = /tests/static/keyfile
88

99
[args]
1010
all.database.password = passwd
11+
# Extended names can be used starting with 3.11
12+
# all.database.extended-names = true

tests/test_collection.py

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import pytest
2+
from packaging import version
3+
4+
from arango.client import ArangoClient
15
from arango.collection import StandardCollection
26
from arango.exceptions import (
37
CollectionChecksumError,
@@ -13,8 +17,15 @@
1317
CollectionStatisticsError,
1418
CollectionTruncateError,
1519
CollectionUnloadError,
20+
DatabaseDeleteError,
21+
)
22+
from tests.helpers import (
23+
assert_raises,
24+
extract,
25+
generate_col_name,
26+
generate_string,
27+
generate_username,
1628
)
17-
from tests.helpers import assert_raises, extract, generate_col_name
1829

1930

2031
def test_collection_attributes(db, col, username):
@@ -228,3 +239,84 @@ def test_collection_management(db, bad_db, cluster):
228239
with assert_raises(CollectionRenameError) as err:
229240
bad_db.collection(new_name).rename(new_name)
230241
assert err.value.error_code in {11, 1228}
242+
243+
244+
@pytest.fixture
245+
def special_collection_names(db):
246+
names = ["abc123", "maçã", "mötör", "😀", "ﻚﻠﺑ ﻞﻄﻴﻓ", "かわいい犬"]
247+
248+
yield names
249+
250+
for name in names:
251+
try:
252+
db.delete_collection(name)
253+
except CollectionDeleteError:
254+
pass
255+
256+
257+
# Code duplication from `test_database.py`...
258+
@pytest.fixture
259+
def special_db_names(sys_db):
260+
names = ["abc123", "maçã", "mötör", "😀", "ﻚﻠﺑ ﻞﻄﻴﻓ", "かわいい犬"]
261+
262+
yield names
263+
264+
for name in names:
265+
try:
266+
sys_db.delete_database(name)
267+
except DatabaseDeleteError:
268+
pass
269+
270+
271+
def test_collection_utf8(db, db_version, special_collection_names):
272+
if db_version < version.parse("3.11.0"):
273+
pytest.skip("UTF8 collection names require ArangoDB 3.11+")
274+
275+
for name in special_collection_names:
276+
create_and_delete_collection(db, name)
277+
278+
279+
# Not sure if this belongs in here or in `test_database.py`...
280+
def test_database_and_collection_utf8(
281+
sys_db, db_version, special_collection_names, special_db_names
282+
):
283+
if db_version < version.parse("3.11.0"):
284+
pytest.skip("UTF8 collection names require ArangoDB 3.11+")
285+
286+
client = ArangoClient(hosts="http://127.0.0.1:8529")
287+
for db_name in special_db_names:
288+
username = generate_username()
289+
password = generate_string()
290+
291+
assert sys_db.create_database(
292+
name=db_name,
293+
users=[
294+
{
295+
"active": True,
296+
"username": username,
297+
"password": password,
298+
}
299+
],
300+
)
301+
302+
assert sys_db.has_database(db_name)
303+
304+
db = client.db(db_name, username, password, verify=True)
305+
306+
for col_name in special_collection_names:
307+
create_and_delete_collection(db, col_name)
308+
309+
assert sys_db.delete_database(db_name)
310+
311+
312+
def create_and_delete_collection(db, name):
313+
col = db.create_collection(name)
314+
assert col.name == name
315+
assert db.has_collection(name) is True
316+
317+
index_id = col.add_hash_index(fields=["foo"])["name"]
318+
assert index_id == col.indexes()[-1]["name"]
319+
assert col.delete_index(index_id) is True
320+
321+
assert db.delete_collection(name) is True
322+
assert db.has_collection(name) is False

tests/test_database.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
from datetime import datetime
22

3+
import pytest
4+
from packaging import version
5+
36
from arango.aql import AQL
47
from arango.backup import Backup
58
from arango.cluster import Cluster
@@ -292,3 +295,26 @@ def test_database_management(db, sys_db, bad_db):
292295
sys_db.delete_database(db_name)
293296
assert err.value.error_code in {FORBIDDEN, DATABASE_NOT_FOUND}
294297
assert sys_db.delete_database(db_name, ignore_missing=True) is False
298+
299+
300+
@pytest.fixture
301+
def special_db_names(sys_db):
302+
names = ["abc123", "maçã", "mötör", "😀", "ﻚﻠﺑ ﻞﻄﻴﻓ", "かわいい犬"]
303+
304+
yield names
305+
306+
for name in names:
307+
try:
308+
sys_db.delete_database(name)
309+
except DatabaseDeleteError:
310+
pass
311+
312+
313+
def test_database_utf8(sys_db, db_version, special_db_names):
314+
if db_version < version.parse("3.11.0"):
315+
pytest.skip("UTF8 collection names require ArangoDB 3.11+")
316+
317+
for name in special_db_names:
318+
assert sys_db.create_database(name)
319+
assert sys_db.has_database(name)
320+
assert sys_db.delete_database(name)

0 commit comments

Comments
 (0)