@@ -0,0 +1,1788 @@
+from django.test import TestCase%0Afrom viewflow import flow%0Afrom viewflow.base import Flow, this%0A%0A%0Aclass BaseFlow(Flow):%0A    start = flow.StartFunction().Next(this.end)%0A    end = flow.End()%0A%0A%0Aclass FlowMixin(object):%0A    notify_admins = flow.Handler(this.send_alert).Next(this.notify_users)%0A    notify_users = flow.Handler(this.send_alert)%0A%0A%0Aclass ChildFlow(FlowMixin, BaseFlow):%0A    start = BaseFlow.start.Next(this.alert)%0A    alert = flow.Function(this.send_alert).Next(this.notify_admins)%0A    notify_users = FlowMixin.notify_users.Next(this.end)%0A%0A    def send_alert(self, activation):%0A        activation.prepare()%0A        activation.done()%0A%0A%0Aclass Test(TestCase):%0A    def test_base_flow_unchanged(self):%0A        self.assertEqual(BaseFlow.start._next, BaseFlow.end)%0A%0A    def test_child_flow_got_base_nodes(self):%0A        self.assertEqual(ChildFlow.end, BaseFlow.end)%0A        self.assertEqual(ChildFlow._meta.node('end'), BaseFlow.end)%0A%0A    def test_child_flow_overides_base_node(self):%0A        self.assertEqual(ChildFlow.alert._next, ChildFlow.notify_admins)%0A        self.assertEqual(ChildFlow.notify_users._next, ChildFlow.end)%0A%0A    def test_child_flow_contains_all_urls(self):%0A        patterns_names = sorted(%5Bpat.name for pat in ChildFlow.instance.urls.url_patterns%5D)%0A        self.assertEqual(patterns_names, sorted(%5B%0A            'alert__perform', 'alert__cancel', 'alert__undo', 'alert__details',%0A            'end__perform', 'end__cancel', 'end__undo', 'end__details',%0A            'notify_admins__perform', 'notify_admins__cancel', 'notify_admins__undo',%0A            'notify_admins__details', 'notify_users__perform', 'notify_users__cancel',%0A            'notify_users__undo', 'notify_users__details', 'start__perform',%0A            'start__cancel', 'start__undo', 'start__details'%5D))%0A

Add inheritance test