Skip to content

Commit eb852ce

Browse files
committed
add tests
1 parent ca9bc1c commit eb852ce

File tree

1 file changed

+264
-0
lines changed

1 file changed

+264
-0
lines changed

tests/relay/test_connection.py

+264
Original file line numberDiff line numberDiff line change
@@ -1400,6 +1400,14 @@ async def departments(self) -> List[Department]:
14001400
name
14011401
}
14021402
}
1403+
},
1404+
building {
1405+
edges {
1406+
node {
1407+
id
1408+
name
1409+
}
1410+
}
14031411
}
14041412
}
14051413
}
@@ -1452,6 +1460,16 @@ async def departments(self) -> List[Department]:
14521460
}
14531461
}
14541462
]
1463+
},
1464+
"building": {
1465+
"edges": [
1466+
{
1467+
"node": {
1468+
"id": 2,
1469+
"name": "Building 1"
1470+
}
1471+
}
1472+
]
14551473
}
14561474
}
14571475
},
@@ -1469,6 +1487,16 @@ async def departments(self) -> List[Department]:
14691487
}
14701488
}
14711489
]
1490+
},
1491+
"building": {
1492+
"edges": [
1493+
{
1494+
"node": {
1495+
"id": 2,
1496+
"name": "Building 1"
1497+
}
1498+
}
1499+
]
14721500
}
14731501
}
14741502
}
@@ -1494,6 +1522,16 @@ async def departments(self) -> List[Department]:
14941522
}
14951523
}
14961524
]
1525+
},
1526+
"building": {
1527+
"edges": [
1528+
{
1529+
"node": {
1530+
"id": 2,
1531+
"name": "Building 1"
1532+
}
1533+
}
1534+
]
14971535
}
14981536
}
14991537
}
@@ -1900,3 +1938,229 @@ async def employees(self) -> List[Employee]:
19001938
}
19011939
]
19021940
}
1941+
1942+
1943+
@pytest.fixture
1944+
def secondary_tables_with_normal_relationship(base):
1945+
EmployeeDepartmentJoinTable = Table(
1946+
"employee_department_join_table",
1947+
base.metadata,
1948+
Column("employee_id", ForeignKey("employee.id"), primary_key=True),
1949+
Column("department_id", ForeignKey(
1950+
"department.id"), primary_key=True),
1951+
)
1952+
1953+
class Employee(base):
1954+
__tablename__ = "employee"
1955+
id = Column(Integer, autoincrement=True, primary_key=True)
1956+
name = Column(String, nullable=False)
1957+
role = Column(String, nullable=False)
1958+
department = relationship(
1959+
"Department",
1960+
secondary="employee_department_join_table",
1961+
back_populates="employees",
1962+
)
1963+
building_id = Column(Integer, ForeignKey("building.id"))
1964+
building = relationship(
1965+
"Building",
1966+
back_populates="employees",
1967+
)
1968+
1969+
class Department(base):
1970+
__tablename__ = "department"
1971+
id = Column(Integer, autoincrement=True, primary_key=True)
1972+
name = Column(String, nullable=False)
1973+
employees = relationship(
1974+
"Employee",
1975+
secondary="employee_department_join_table",
1976+
back_populates="department",
1977+
)
1978+
1979+
class Building(base):
1980+
__tablename__ = "building"
1981+
id = Column(Integer, autoincrement=True, primary_key=True)
1982+
name = Column(String, nullable=False)
1983+
employees = relationship(
1984+
"Employee",
1985+
back_populates="building",
1986+
)
1987+
1988+
return Employee, Department, Building
1989+
1990+
1991+
@pytest.mark.asyncio
1992+
async def test_query_with_secondary_table_with_values_list_and_normal_relationship(
1993+
secondary_tables_with_normal_relationship,
1994+
base,
1995+
async_engine,
1996+
async_sessionmaker
1997+
):
1998+
async with async_engine.begin() as conn:
1999+
await conn.run_sync(base.metadata.create_all)
2000+
2001+
mapper = StrawberrySQLAlchemyMapper()
2002+
EmployeeModel, DepartmentModel, BuildingModel = secondary_tables_with_normal_relationship
2003+
2004+
@mapper.type(DepartmentModel)
2005+
class Department():
2006+
pass
2007+
2008+
@mapper.type(EmployeeModel)
2009+
class Employee():
2010+
pass
2011+
2012+
@mapper.type(BuildingModel)
2013+
class Building():
2014+
pass
2015+
2016+
@strawberry.type
2017+
class Query:
2018+
@strawberry.field
2019+
async def departments(self) -> List[Department]:
2020+
async with async_sessionmaker() as session:
2021+
result = await session.execute(select(DepartmentModel))
2022+
return result.scalars().all()
2023+
2024+
mapper.finalize()
2025+
schema = strawberry.Schema(query=Query)
2026+
2027+
query = """\
2028+
query {
2029+
departments {
2030+
id
2031+
name
2032+
employees {
2033+
edges {
2034+
node {
2035+
id
2036+
name
2037+
role
2038+
department {
2039+
edges {
2040+
node {
2041+
id
2042+
name
2043+
}
2044+
}
2045+
},
2046+
building {
2047+
id
2048+
name
2049+
}
2050+
}
2051+
}
2052+
}
2053+
}
2054+
}
2055+
"""
2056+
2057+
# Create test data
2058+
async with async_sessionmaker(expire_on_commit=False) as session:
2059+
building = BuildingModel(id=2, name="Building 1")
2060+
department1 = DepartmentModel(id=10, name="Department Test 1")
2061+
department2 = DepartmentModel(id=3, name="Department Test 2")
2062+
e1 = EmployeeModel(id=1, name="John", role="Developer")
2063+
e2 = EmployeeModel(id=5, name="Bill", role="Doctor")
2064+
e3 = EmployeeModel(id=4, name="Maria", role="Teacher")
2065+
department1.employees.append(e1)
2066+
department1.employees.append(e2)
2067+
department2.employees.append(e3)
2068+
building.employees.append(e1)
2069+
building.employees.append(e2)
2070+
building.employees.append(e3)
2071+
session.add_all([department1, department2, e1, e2, e3, building])
2072+
await session.commit()
2073+
2074+
result = await schema.execute(query, context_value={
2075+
"sqlalchemy_loader": StrawberrySQLAlchemyLoader(
2076+
async_bind_factory=async_sessionmaker
2077+
)
2078+
})
2079+
assert result.errors is None
2080+
assert result.data == {
2081+
"departments": [
2082+
{
2083+
"id": 10,
2084+
"name": "Department Test 1",
2085+
"employees": {
2086+
"edges": [
2087+
{
2088+
"node": {
2089+
"id": 5,
2090+
"name": "Bill",
2091+
"role": "Doctor",
2092+
"department": {
2093+
"edges": [
2094+
{
2095+
"node": {
2096+
"id": 10,
2097+
"name": "Department Test 1"
2098+
}
2099+
}
2100+
]
2101+
},
2102+
"building": {
2103+
"id": 2,
2104+
"name": "Building 1"
2105+
}
2106+
}
2107+
},
2108+
{
2109+
"node": {
2110+
"id": 1,
2111+
"name": "John",
2112+
"role": "Developer",
2113+
"department": {
2114+
"edges": [
2115+
{
2116+
"node": {
2117+
"id": 10,
2118+
"name": "Department Test 1"
2119+
}
2120+
}
2121+
]
2122+
},
2123+
"building": {
2124+
"id": 2,
2125+
"name": "Building 1"
2126+
}
2127+
}
2128+
}
2129+
]
2130+
}
2131+
},
2132+
{
2133+
"id": 3,
2134+
"name": "Department Test 2",
2135+
"employees": {
2136+
"edges": [
2137+
{
2138+
"node": {
2139+
"id": 4,
2140+
"name": "Maria",
2141+
"role": "Teacher",
2142+
"department": {
2143+
"edges": [
2144+
{
2145+
"node": {
2146+
"id": 3,
2147+
"name": "Department Test 2"
2148+
}
2149+
}
2150+
]
2151+
},
2152+
"building": {
2153+
"id": 2,
2154+
"name": "Building 1"
2155+
}
2156+
}
2157+
}
2158+
]
2159+
}
2160+
}
2161+
]
2162+
}
2163+
2164+
2165+
# TODO
2166+
# Make test with secondary table and normal relationship at same time

0 commit comments

Comments
 (0)