|
5 | 5 | from sqlalchemy.dialects.postgresql.array import ARRAY
|
6 | 6 | from sqlalchemy.ext.declarative import declarative_base
|
7 | 7 | from sqlalchemy.orm import relationship
|
| 8 | +from strawberry.type import StrawberryOptional |
8 | 9 |
|
9 | 10 | from strawberry_sqlalchemy_mapper import StrawberrySQLAlchemyMapper
|
10 | 11 |
|
@@ -207,3 +208,55 @@ class Base:
|
207 | 208 | strawberry_sqlalchemy_mapper._add_annotation(Base, key, annotation, field_keys)
|
208 | 209 | assert Base.__annotations__[key] == annotation
|
209 | 210 | assert field_keys == [key]
|
| 211 | + |
| 212 | + |
| 213 | +def test_connection_resolver_for(): |
| 214 | + strawberry_sqlalchemy_mapper = StrawberrySQLAlchemyMapper() |
| 215 | + _, Department = _create_employee_and_department_tables() |
| 216 | + employees_property = Department.employees.property |
| 217 | + assert ( |
| 218 | + strawberry_sqlalchemy_mapper.connection_resolver_for(employees_property) |
| 219 | + is not None |
| 220 | + ) |
| 221 | + |
| 222 | + |
| 223 | +def test_type_simple(): |
| 224 | + Employee = _create_employee_table() |
| 225 | + strawberry_sqlalchemy_mapper = StrawberrySQLAlchemyMapper() |
| 226 | + |
| 227 | + @strawberry_sqlalchemy_mapper.type(Employee) |
| 228 | + class Employee: |
| 229 | + pass |
| 230 | + |
| 231 | + strawberry_sqlalchemy_mapper.finalize() |
| 232 | + additional_types = list(strawberry_sqlalchemy_mapper.mapped_types.values()) |
| 233 | + assert len(additional_types) == 1 |
| 234 | + mapped_employee_type = additional_types[0] |
| 235 | + assert mapped_employee_type.__name__ == "Employee" |
| 236 | + assert len(mapped_employee_type._type_definition._fields) == 2 |
| 237 | + employee_type_fields = mapped_employee_type._type_definition._fields |
| 238 | + name = list(filter(lambda f: f.name == "name", employee_type_fields))[0] |
| 239 | + assert name.type == str |
| 240 | + id = list(filter(lambda f: f.name == "id", employee_type_fields))[0] |
| 241 | + assert id.type == int |
| 242 | + |
| 243 | + |
| 244 | +def test_type_relationships(): |
| 245 | + Employee, _ = _create_employee_and_department_tables() |
| 246 | + strawberry_sqlalchemy_mapper = StrawberrySQLAlchemyMapper() |
| 247 | + |
| 248 | + @strawberry_sqlalchemy_mapper.type(Employee) |
| 249 | + class Employee: |
| 250 | + pass |
| 251 | + |
| 252 | + strawberry_sqlalchemy_mapper.finalize() |
| 253 | + additional_types = list(strawberry_sqlalchemy_mapper.mapped_types.values()) |
| 254 | + assert len(additional_types) == 2 |
| 255 | + mapped_employee_type = additional_types[0] |
| 256 | + assert mapped_employee_type.__name__ == "Employee" |
| 257 | + assert len(mapped_employee_type._type_definition._fields) == 4 |
| 258 | + employee_type_fields = mapped_employee_type._type_definition._fields |
| 259 | + name = list(filter(lambda f: f.name == "department_id", employee_type_fields))[0] |
| 260 | + assert type(name.type) == StrawberryOptional |
| 261 | + id = list(filter(lambda f: f.name == "department", employee_type_fields))[0] |
| 262 | + assert type(id.type) == StrawberryOptional |
0 commit comments