def METHOD_NAME(self):
    examinee = self.examinee()
    examinee.add_step(self.pipeline_step(name='do_something'))
    # TODO: Don't hardcode step names
    examinee.add_step(self.pipeline_step(
        name='prepare',
        is_synthetic=True,
        depends=['foo', 'do_something']
    ))
    examinee.add_step(self.pipeline_step(name='publish', is_synthetic=True, depends=['prepare']))
    examinee.add_step(self.pipeline_step(name='foo', depends=['publish']))
    ordered_steps = tuple(examinee.ordered_steps())
    for step_tuple in ordered_steps:
        assert len(step_tuple) == 1
    ordered_steps = tuple(step_tuple[0] for step_tuple in ordered_steps)
    assert ordered_steps == ('do_something', 'prepare', 'publish', 'foo')
    examinee = self.examinee()
    examinee.add_step(self.pipeline_step(name='do_something'))
    # TODO: Don't hardcode step names
    examinee.add_step(self.pipeline_step(
        name='prepare',
        is_synthetic=True,
        depends=['foo', 'bar', 'baz', 'do_something']
    ))
    examinee.add_step(self.pipeline_step(name='publish', is_synthetic=True, depends=['prepare']))
    examinee.add_step(self.pipeline_step(name='foo', depends=('publish',)))
    examinee.add_step(self.pipeline_step(name='bar', depends=('foo',)))
    examinee.add_step(self.pipeline_step(name='baz', depends=('bar',)))
    ordered_steps = tuple(examinee.ordered_steps())
    # first two steps can run in parallel, followed by sequential remainder
    first_two_steps = ordered_steps[0]
    remainder_steps = ordered_steps[1:]
    assert len(first_two_steps) == 2
    assert set(first_two_steps) == {'do_something', 'prepare'}
    for step_tuple in remainder_steps:
        assert len(step_tuple) == 1
    remainder_steps = tuple(step_tuple[0] for step_tuple in remainder_steps)
    assert remainder_steps == ('publish', 'foo', 'bar', 'baz')
    examinee = self.examinee()
    examinee.add_step(self.pipeline_step(name='do_something'))
    # TODO: Don't hardcode step names
    examinee.add_step(self.pipeline_step(
        name='prepare',
        is_synthetic=True,
        depends=['foo', 'bar', 'do_something']
    ))
    examinee.add_step(
        self.pipeline_step(name='publish', is_synthetic=True, depends=['prepare'])
    )
    examinee.add_step(self.pipeline_step(name='foo', depends=['publish']))
    examinee.add_step(self.pipeline_step(name='bar', depends=['publish']))
    ordered_steps = tuple(examinee.ordered_steps())
    assert len(ordered_steps) == 3 # (do_sth, prepare), (publish), (foo, bar)
    first_two_steps = ordered_steps[0]
    second_step = ordered_steps[1]
    last_two_steps = ordered_steps[2]
    assert len(first_two_steps) == 2
    assert len(second_step) == 1
    assert len(last_two_steps) == 2
    assert set(first_two_steps) == {'do_something', 'prepare'}
    assert set(second_step) == {'publish'}
    assert set(last_two_steps) == {'foo', 'bar'}