def test_cycle_that_doesnt_involve_start(self):
     self.assertIsNone(
         validation.find_cycle('A', {
             'A': ['B'],
             'B': ['C'],
             'C': ['B'],
         }))
 def test_longer_cycle(self):
     self.assertEqual(
         validation.find_cycle('A', {
             'A': ['B'],
             'B': ['C'],
             'C': ['A'],
         }), ['A', 'B', 'C', 'A'])
 def test_no_cycles(self):
     self.assertIsNone(
         validation.find_cycle('A', {
             'A': ['B', 'C'],
             'B': ['C'],
             'C': [],
         }))
 def test_diamon_with_cycle(self):
     self.assertEqual(
         validation.find_cycle('A', {
             'A': ['B1', 'B2'],
             'B1': ['C'],
             'B2': ['C'],
             'C': ['A'],
         }), ['A', 'B1', 'C', 'A'])
 def test_many_cycles_but_only_one_has_start(self):
     self.assertEqual(
         validation.find_cycle('A', {
             'A': ['B'],
             'B': ['C'],
             'C': ['B', 'D'],
             'D': ['B', 'C', 'A'],
         }), ['A', 'B', 'C', 'D', 'A'])
 def test_trivial_cycle(self):
     self.assertEqual(validation.find_cycle('A', {
         'A': ['A'],
     }), ['A', 'A'])