test for missing nested models in generated pydantic models
This commit is contained in:
@ -0,0 +1,84 @@
|
|||||||
|
import databases
|
||||||
|
import sqlalchemy
|
||||||
|
|
||||||
|
import ormar
|
||||||
|
from tests.settings import DATABASE_URL
|
||||||
|
|
||||||
|
metadata = sqlalchemy.MetaData()
|
||||||
|
database = databases.Database(DATABASE_URL, force_rollback=True)
|
||||||
|
|
||||||
|
|
||||||
|
class BaseMeta(ormar.ModelMeta):
|
||||||
|
metadata = metadata
|
||||||
|
database = database
|
||||||
|
|
||||||
|
|
||||||
|
class Library(ormar.Model):
|
||||||
|
class Meta(BaseMeta):
|
||||||
|
pass
|
||||||
|
|
||||||
|
id: int = ormar.Integer(primary_key=True)
|
||||||
|
name: str = ormar.String(max_length=100)
|
||||||
|
|
||||||
|
|
||||||
|
class Package(ormar.Model):
|
||||||
|
class Meta(BaseMeta):
|
||||||
|
pass
|
||||||
|
|
||||||
|
id: int = ormar.Integer(primary_key=True)
|
||||||
|
library: Library = ormar.ForeignKey(Library,
|
||||||
|
related_name="packages")
|
||||||
|
version: str = ormar.String(max_length=100)
|
||||||
|
|
||||||
|
|
||||||
|
class Ticket(ormar.Model):
|
||||||
|
class Meta(BaseMeta):
|
||||||
|
pass
|
||||||
|
|
||||||
|
id: int = ormar.Integer(primary_key=True)
|
||||||
|
number: int = ormar.Integer()
|
||||||
|
status: str = ormar.String(max_length=100)
|
||||||
|
|
||||||
|
|
||||||
|
class TicketPackage(ormar.Model):
|
||||||
|
class Meta(BaseMeta):
|
||||||
|
pass
|
||||||
|
|
||||||
|
id: int = ormar.Integer(primary_key=True)
|
||||||
|
status: str = ormar.String(max_length=100)
|
||||||
|
ticket: Ticket = ormar.ForeignKey(Ticket, related_name="packages")
|
||||||
|
package: Package = ormar.ForeignKey(Package,
|
||||||
|
related_name="tickets")
|
||||||
|
|
||||||
|
|
||||||
|
def test_have_proper_children():
|
||||||
|
TicketPackageOut = TicketPackage.get_pydantic(exclude={"ticket"})
|
||||||
|
assert 'package' in TicketPackageOut.__fields__
|
||||||
|
PydanticPackage = TicketPackageOut.__fields__["package"].type_
|
||||||
|
assert 'library' in PydanticPackage.__fields__
|
||||||
|
|
||||||
|
|
||||||
|
def test_casts_properly():
|
||||||
|
payload = {
|
||||||
|
"id": 0,
|
||||||
|
"status": "string",
|
||||||
|
"ticket": {
|
||||||
|
"id": 0,
|
||||||
|
"number": 0,
|
||||||
|
"status": "string"
|
||||||
|
},
|
||||||
|
"package": {
|
||||||
|
"version": "string",
|
||||||
|
"id": 0,
|
||||||
|
"library": {
|
||||||
|
"id": 0,
|
||||||
|
"name": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
test_package = TicketPackage(**payload)
|
||||||
|
TicketPackageOut = TicketPackage.get_pydantic(exclude={"ticket"})
|
||||||
|
parsed = TicketPackageOut(**test_package.dict()).dict()
|
||||||
|
assert "ticket" not in parsed
|
||||||
|
assert "package" in parsed
|
||||||
|
assert "library" in parsed.get("package")
|
||||||
Reference in New Issue
Block a user