Add PathField class for storing pathlib objects

Add tests for pathfield class
Add database fixture for generating test databases
This commit is contained in:
2021-11-24 17:13:41 -05:00
parent 5499d282eb
commit adab90736c
3 changed files with 160 additions and 0 deletions

22
tests/fixtures.py Normal file
View File

@@ -0,0 +1,22 @@
import uuid
import peewee
import pytest
@pytest.fixture(scope="function")
def fakedb(tmp_path):
"""Create a temporary pho-database (fakedb) for testing fields"""
sqlite = peewee.SqliteDatabase(
tmp_path / f"{uuid.uuid4()}.db",
pragmas={
"journal_mode": "wal",
"cache_size": -1 * 64000,
"foreign_keys": 1,
"ignore_check_constraints": 0,
"synchronous": 0,
},
)
yield sqlite

70
tests/test_pathfield.py Normal file
View File

@@ -0,0 +1,70 @@
# pylint: disable=redefined-outer-name
# pylint: disable=missing-class-docstring
# pylint: disable=too-few-public-methods
# pylint: disable=unused-import
from pathlib import Path
import peewee
import peewee_plus
from .fixtures import fakedb
def test_conversion(fakedb):
"""Test basic usage of PathField for roundtrip compatibility"""
class TestModel(peewee.Model):
class Meta:
database = fakedb
name = peewee.CharField()
some_path = peewee_plus.PathField()
fakedb.create_tables([TestModel])
path1 = Path("foo", "bar", "baz")
model1 = TestModel(name="one", some_path=path1)
model1.save()
model1 = TestModel.get(TestModel.name == "one")
assert model1.some_path == path1
assert not model1.some_path.is_absolute()
path2 = Path("/etc", "fizz", "buzz")
model2 = TestModel(name="two", some_path=path2)
model2.save()
model2 = TestModel.get(TestModel.name == "two")
assert model2.some_path == path2
assert model2.some_path.is_absolute()
def test_relative_to(fakedb):
"""Test usage of the ``relative_to`` parameter"""
base_path = Path("/etc", "foobar")
class TestModel(peewee.Model):
class Meta:
database = fakedb
name = peewee.CharField()
some_path = peewee_plus.PathField(relative_to=base_path)
fakedb.create_tables([TestModel])
path1 = Path("foo", "bar", "baz")
model1 = TestModel(name="one", some_path=path1)
model1.save()
model1 = TestModel.get(TestModel.name == "one")
assert model1.some_path.is_absolute()
assert model1.some_path == base_path / path1
path2 = Path("fizz", "buzz")
model2 = TestModel(name="two", some_path=base_path / path2)
model2.save()
model2 = TestModel.get(TestModel.name == "two")
assert model2.some_path.is_absolute()
assert model2.some_path == base_path / path2