Skip to content

Commit c8535ea

Browse files
added extra tests
1 parent dde7e97 commit c8535ea

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

tests/conftest.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818

1919
class Vacancy(Base):
20-
__tablename__ = "vacancies"
20+
__tablename__ = "vacancy"
2121
id: Mapped[int] = mapped_column(primary_key=True)
2222
title: Mapped[str]
2323
description: Mapped[str]
@@ -27,12 +27,12 @@ class Vacancy(Base):
2727
salary_from: Mapped[int]
2828
salary_up_to: Mapped[float]
2929
category: Mapped[JobCategory] = mapped_column(nullable=False)
30-
company_id: Mapped[int] = mapped_column(ForeignKey("companies.id"))
30+
company_id: Mapped[int] = mapped_column(ForeignKey("company.id"))
3131
company: Mapped["Company"] = relationship(back_populates="vacancies")
3232

3333

3434
class Company(Base):
35-
__tablename__ = "companies"
35+
__tablename__ = "company"
3636
id: Mapped[int] = mapped_column(primary_key=True)
3737
title: Mapped[str]
3838
vacancies: Mapped[list["Vacancy"]] = relationship(back_populates="company")
@@ -51,7 +51,7 @@ def database_url(sqlite_file_path) -> str:
5151

5252
@pytest.fixture(scope="session")
5353
def create_engine(database_url):
54-
return create_async_engine(database_url, echo=True, future=True)
54+
return create_async_engine(database_url, echo=False, future=True)
5555

5656

5757
@pytest.fixture(scope="session")
@@ -126,6 +126,10 @@ def get_vacancy_restriction() -> dict:
126126
def get_vacancy_filter(get_vacancy_restriction):
127127
return FilterCore(Vacancy, get_vacancy_restriction)
128128

129+
@pytest.fixture
130+
def get_vacancy_filter_with_join(get_vacancy_restriction):
131+
return FilterCore(Vacancy, get_vacancy_restriction, select(Vacancy).join(Company))
132+
129133

130134
@pytest.fixture
131135
def get_custom_vacancy_filter(get_vacancy_restriction):
@@ -170,3 +174,12 @@ def get_query(self, custom_filter):
170174
return query.join(Vacancy).options(joinedload(Company.vacancies))
171175

172176
return CustomFilter(Company, get_company_restriction)
177+
178+
@pytest.fixture
179+
def get_filter_passed_in_init(get_company_restriction):
180+
return FilterCore(
181+
Company,
182+
get_company_restriction,
183+
select(Company).join(Vacancy)
184+
)
185+

tests/test_filter.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,18 @@ async def test_relation_search(session, get_custom_company_filter, create_vacanc
579579
assert company.title == "MyCompany2"
580580

581581

582+
async def test_pass_custom_select_into_init(session, get_filter_passed_in_init, create_vacancies):
583+
query = get_filter_passed_in_init.get_query("title__eq=MyCompany2&vacancies.salary_from__gte=100")
584+
res = await session.execute(query)
585+
companies = res.unique().scalars().all()
586+
587+
assert len(companies) == 1
588+
589+
company = companies[0]
590+
assert company.id == 2
591+
assert company.title == "MyCompany2"
592+
593+
582594
@pytest.mark.parametrize(
583595
"bad_filter, expected_status_code, expected_detail",
584596
(
@@ -609,3 +621,14 @@ def test_fail_relation_filter(get_custom_company_filter, bad_filter, expected_st
609621
detail.pop("url")
610622

611623
assert errors_details == expected_detail
624+
625+
626+
async def test_reverse_relation(session, get_vacancy_filter_with_join, create_vacancies):
627+
query = get_vacancy_filter_with_join.get_query("company.title__eq=MyCompany1")
628+
res = await session.execute(query)
629+
vacancies = res.unique().scalars().all()
630+
631+
assert len(vacancies) == 4
632+
vacancy = vacancies[0]
633+
assert vacancy.id == 1
634+
assert vacancy.company_id == 1

0 commit comments

Comments
 (0)