51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
|
from amanuensis.db.models import IndexType
|
||
|
import pytest
|
||
|
|
||
|
import amanuensis.backend.index as indq
|
||
|
from amanuensis.db import DbContext, Lexicon, User
|
||
|
|
||
|
from amanuensis.errors import ArgumentError
|
||
|
|
||
|
|
||
|
def test_create_index(db: DbContext, make):
|
||
|
"""Test new index creation"""
|
||
|
lexicon: Lexicon = make.lexicon()
|
||
|
defaults: dict = {
|
||
|
"db": db,
|
||
|
"lexicon_id": lexicon.id,
|
||
|
"index_type": IndexType.ETC,
|
||
|
"pattern": "&c.",
|
||
|
"logical_order": 0,
|
||
|
"display_order": 0,
|
||
|
"capacity": 0,
|
||
|
}
|
||
|
kwargs: dict
|
||
|
|
||
|
# Character indexes require nonempty patterns
|
||
|
with pytest.raises(ArgumentError):
|
||
|
kwargs = {**defaults, "index_type": IndexType.CHAR, "pattern": ""}
|
||
|
indq.create(**kwargs)
|
||
|
kwargs = {**defaults, "index_type": IndexType.CHAR, "pattern": "ABC"}
|
||
|
assert indq.create(**kwargs)
|
||
|
|
||
|
# Range indexes must follow the 1-2 format
|
||
|
with pytest.raises(ArgumentError):
|
||
|
kwargs = {**defaults, "index_type": IndexType.RANGE, "pattern": "ABC"}
|
||
|
indq.create(**kwargs)
|
||
|
kwargs = {**defaults, "index_type": IndexType.RANGE, "pattern": "A-F"}
|
||
|
assert indq.create(**kwargs)
|
||
|
|
||
|
# Prefix indexes require nonempty patterns
|
||
|
with pytest.raises(ArgumentError):
|
||
|
kwargs = {**defaults, "index_type": IndexType.CHAR, "pattern": ""}
|
||
|
indq.create(**kwargs)
|
||
|
kwargs = {**defaults, "index_type": IndexType.CHAR, "pattern": "Prefix:"}
|
||
|
assert indq.create(**kwargs)
|
||
|
|
||
|
# Etc indexes require nonempty patterns
|
||
|
with pytest.raises(ArgumentError):
|
||
|
kwargs = {**defaults, "index_type": IndexType.CHAR, "pattern": ""}
|
||
|
indq.create(**kwargs)
|
||
|
kwargs = {**defaults, "index_type": IndexType.CHAR, "pattern": "&c."}
|
||
|
assert indq.create(**kwargs)
|