add default exceptions to relations, test one argument, test querysetproxy, test deeply nested
This commit is contained in:
@ -110,6 +110,24 @@ async def test_or_filters():
|
||||
assert books[0].title == "The Silmarillion"
|
||||
assert books[1].title == "The Witcher"
|
||||
|
||||
books = (
|
||||
await Book.objects.select_related("author")
|
||||
.filter(
|
||||
ormar.or_(
|
||||
ormar.and_(
|
||||
ormar.or_(year__gt=1960, year__lt=1940),
|
||||
author__name="J.R.R. Tolkien",
|
||||
),
|
||||
ormar.and_(year__lt=2000, author__name="Andrzej Sapkowski"),
|
||||
)
|
||||
)
|
||||
.all()
|
||||
)
|
||||
assert len(books) == 3
|
||||
assert books[0].title == "The Hobbit"
|
||||
assert books[1].title == "The Silmarillion"
|
||||
assert books[2].title == "The Witcher"
|
||||
|
||||
books = (
|
||||
await Book.objects.select_related("author")
|
||||
.exclude(
|
||||
@ -187,6 +205,38 @@ async def test_or_filters():
|
||||
with pytest.raises(QueryDefinitionError):
|
||||
await Book.objects.select_related("author").filter("wrong").all()
|
||||
|
||||
books = await tolkien.books.filter(
|
||||
ormar.or_(year__lt=1940, year__gt=1960)
|
||||
).all()
|
||||
assert len(books) == 2
|
||||
|
||||
books = await tolkien.books.filter(
|
||||
ormar.and_(
|
||||
ormar.or_(year__lt=1940, year__gt=1960), title__icontains="hobbit"
|
||||
)
|
||||
).all()
|
||||
assert len(books) == 1
|
||||
assert tolkien.books[0].title == "The Hobbit"
|
||||
|
||||
books = (
|
||||
await Book.objects.select_related("author")
|
||||
.filter(ormar.or_(author__name="J.R.R. Tolkien"))
|
||||
.all()
|
||||
)
|
||||
assert len(books) == 3
|
||||
|
||||
books = (
|
||||
await Book.objects.select_related("author")
|
||||
.filter(
|
||||
ormar.or_(
|
||||
ormar.and_(author__name__icontains="tolkien"),
|
||||
ormar.and_(author__name__icontains="sapkowski"),
|
||||
)
|
||||
)
|
||||
.all()
|
||||
)
|
||||
assert len(books) == 5
|
||||
|
||||
|
||||
# TODO: Check / modify
|
||||
# process and and or into filter groups (V)
|
||||
@ -196,5 +246,4 @@ async def test_or_filters():
|
||||
# finish docstrings (V)
|
||||
# fix types for FilterAction and FilterGroup (X)
|
||||
# add docs (V)
|
||||
|
||||
# fix querysetproxy
|
||||
# fix querysetproxy (V)
|
||||
|
||||
65
tests/test_relations_default_exception.py
Normal file
65
tests/test_relations_default_exception.py
Normal file
@ -0,0 +1,65 @@
|
||||
# type: ignore
|
||||
from typing import List, Optional
|
||||
|
||||
import databases
|
||||
import pytest
|
||||
import sqlalchemy
|
||||
|
||||
import ormar
|
||||
from ormar.exceptions import ModelDefinitionError
|
||||
from tests.settings import DATABASE_URL
|
||||
|
||||
database = databases.Database(DATABASE_URL, force_rollback=True)
|
||||
metadata = sqlalchemy.MetaData()
|
||||
|
||||
|
||||
class Author(ormar.Model):
|
||||
class Meta:
|
||||
tablename = "authors"
|
||||
database = database
|
||||
metadata = metadata
|
||||
|
||||
id: int = ormar.Integer(primary_key=True)
|
||||
first_name: str = ormar.String(max_length=80)
|
||||
last_name: str = ormar.String(max_length=80)
|
||||
|
||||
|
||||
class Category(ormar.Model):
|
||||
class Meta:
|
||||
tablename = "categories"
|
||||
database = database
|
||||
metadata = metadata
|
||||
|
||||
id: int = ormar.Integer(primary_key=True)
|
||||
name: str = ormar.String(max_length=40)
|
||||
|
||||
|
||||
def test_fk_error():
|
||||
with pytest.raises(ModelDefinitionError):
|
||||
|
||||
class Post(ormar.Model):
|
||||
class Meta:
|
||||
tablename = "posts"
|
||||
database = database
|
||||
metadata = metadata
|
||||
|
||||
id: int = ormar.Integer(primary_key=True)
|
||||
title: str = ormar.String(max_length=200)
|
||||
categories: Optional[List[Category]] = ormar.ManyToMany(Category)
|
||||
author: Optional[Author] = ormar.ForeignKey(Author, default="aa")
|
||||
|
||||
|
||||
def test_m2m_error():
|
||||
with pytest.raises(ModelDefinitionError):
|
||||
|
||||
class Post(ormar.Model):
|
||||
class Meta:
|
||||
tablename = "posts"
|
||||
database = database
|
||||
metadata = metadata
|
||||
|
||||
id: int = ormar.Integer(primary_key=True)
|
||||
title: str = ormar.String(max_length=200)
|
||||
categories: Optional[List[Category]] = ormar.ManyToMany(
|
||||
Category, default="aa"
|
||||
)
|
||||
Reference in New Issue
Block a user