Referencing other FixturesΒΆ

To build complete scenarios, referencing other fixtures becomes necessary.

To reference other fixtures, use following functions:

These function behave the same as the methods of the BaseFix class.

class ArnoldAccount(BaseFix):
    MODEL = Account
    name = "arney"

class ArnoldPerson(BaseFix):
    MODEL = Person
    name = "Arnold"
    account = sqla_fix_fact.subFactoryModel(ArnoldAccount)

Prefer the usage of subFactoryModel() for referencing other fixtures.

You can also add kwargs to alter properties of the factory as described in Substitution of Values

class ArnoldAccount(BaseFix):
    MODEL = Account
    name = "arney"

class ArnoldPerson(BaseFix):
    MODEL = Person
    name = "Arnold"
    account = sqla_fix_fact.subFactoryModel(ArnoldAccount)

class ArnoldPersonAdmin(BaseFix):
    MODEL = Person
    name = "Arnold"
    account = sqla_fix_fact.subFactoryModel(ArnoldAccount, name="arney-admin")

Do not use the substitutions extensively at referencing other fixtures. In most cases an own fixture should be defined. Like in the example from above.

class ArnoldAccount(BaseFix):
    MODEL = Account
    name = "arney"

class ArnoldPerson(BaseFix):
    MODEL = Person
    name = "Arnold"
    account = sqla_fix_fact.subFactoryModel(ArnoldAccount)

class ArnoldAdminAccount(BaseFix):
    MODEL = Account
    name = "arney-admin"

class ArnoldPersonAdmin(BaseFix):
    MODEL = Person
    name = "Arnold"
    account = sqla_fix_fact.subFactoryModel(ArnoldAdminAccount)

To save you the burden of copying to much information, you could of course inherit from other fixtures. This inherits all properties except those you overwrite.

class ArnoldAccount(BaseFix):
    MODEL = Account
    name = "arney"

class ArnoldPerson(BaseFix):
    MODEL = Person
    name = "Arnold"
    account = sqla_fix_fact.subFactoryModel(ArnoldAccount)

class ArnoldAdminAccount(ArnoldAccount):
    name = "arney-admin"

class ArnoldPersonAdmin(ArnoldPerson):
    account = sqla_fix_fact.subFactoryModel(ArnoldAdminAccount)

You can also add sub-factories in lists

class ViewRole(BaseFix):
    MODEL = Role
    name = "View Role"

class EditRole(BaseFix):
    MODEL = Role
    name = "Edit Role"

class ArnoldAccount(BaseFix):
    MODEL = Account
    name = "arney"
    # Use get to reference to the roles, as only one instance in the DB is desired
    roles = [sqla_fix_fact.subFactoryGet(ViewRole), sqla_fix_fact.subFactoryGet(EditRole)]

class ArnoldPerson(BaseFix):
    MODEL = Person
    name = "Arnold"
    account = sqla_fix_fact.subFactoryModel(ArnoldAccount)