Source code for sqlobject.tests.test_ForeignKey_cascade
from sqlobject import ForeignKey, SQLObject, StringCol, \
    SQLObjectIntegrityError, SQLObjectNotFound
from sqlobject.tests.dbtest import raises, setupClass
[docs]class SOTestPerson1(SQLObject):
    name = StringCol() 
[docs]class SOTestMessageCascadeTrue(SQLObject):
    sender = ForeignKey('SOTestPerson1', cascade=True)
    recipient = ForeignKey('SOTestPerson1', cascade=True)
    body = StringCol() 
[docs]def test1():
    setupClass([SOTestPerson1, SOTestMessageCascadeTrue])
    john = SOTestPerson1(name='john')
    emily = SOTestPerson1(name='emily')
    message = SOTestMessageCascadeTrue(
        sender=emily, recipient=john, body='test1'
    )
    SOTestPerson1.delete(emily.id)
    john.expire()
    message.expire()
    john.sync()
    raises(SQLObjectNotFound, emily.sync)
    raises(SQLObjectNotFound, message.sync) 
[docs]class SOTestPerson2(SQLObject):
    name = StringCol() 
[docs]class SOTestMessageCascadeFalse(SQLObject):
    sender = ForeignKey('SOTestPerson2', cascade=False)
    recipient = ForeignKey('SOTestPerson2', cascade=False)
    body = StringCol() 
[docs]def test2():
    setupClass([SOTestPerson2, SOTestMessageCascadeFalse])
    john = SOTestPerson2(name='john')
    emily = SOTestPerson2(name='emily')
    message = SOTestMessageCascadeFalse(
        sender=emily, recipient=john, body='test2'
    )
    raises(SQLObjectIntegrityError, SOTestPerson2.delete, emily.id)
    john.expire()
    emily.expire()
    message.expire()
    john.sync()
    emily.sync()
    message.sync()
    assert message.sender == emily
    assert message.recipient == john 
[docs]class SOTestPerson3(SQLObject):
    name = StringCol() 
[docs]class SOTestMessageCascadeNull(SQLObject):
    sender = ForeignKey('SOTestPerson3', cascade='null')
    recipient = ForeignKey('SOTestPerson3', cascade='null')
    body = StringCol() 
[docs]def test3():
    setupClass([SOTestPerson3, SOTestMessageCascadeNull])
    john = SOTestPerson3(name='john')
    emily = SOTestPerson3(name='emily')
    message = SOTestMessageCascadeNull(
        sender=emily, recipient=john, body='test3'
    )
    SOTestPerson3.delete(emily.id)
    john.expire()
    message.expire()
    john.sync()
    message.sync()
    raises(SQLObjectNotFound, emily.sync)
    assert message.sender is None
    assert message.recipient == john
    SOTestPerson3.delete(john.id)
    john.expire()
    message.expire()
    message.sync()
    raises(SQLObjectNotFound, john.sync)
    assert message.recipient is None 
[docs]class SOTestPerson4(SQLObject):
    name = StringCol() 
[docs]class SOTestMessageCascadeMixed(SQLObject):
    sender = ForeignKey('SOTestPerson4', cascade=True)
    recipient = ForeignKey('SOTestPerson4', cascade='null')
    body = StringCol() 
[docs]def test4():
    setupClass([SOTestPerson4, SOTestMessageCascadeMixed])
    john = SOTestPerson4(name='john')
    emily = SOTestPerson4(name='emily')
    message = SOTestMessageCascadeMixed(
        sender=emily, recipient=john, body='test4'
    )
    SOTestPerson4.delete(emily.id)
    john.expire()
    message.expire()
    john.sync()
    raises(SQLObjectNotFound, message.sync) 
[docs]def test5():
    setupClass([SOTestPerson4, SOTestMessageCascadeMixed])
    john = SOTestPerson4(name='john')
    emily = SOTestPerson4(name='emily')
    message = SOTestMessageCascadeMixed(
        sender=emily, recipient=john, body='test5'
    )
    john.destroySelf()
    emily.expire()
    message.expire()
    emily.sync()
    message.sync()
    assert message.recipient is None
    assert message.sender == emily