Hi,
I like to put all the preconditions into the Given block, and have a clear focus on a single thing under test in the When section. The Then section should contain all the post-conditions.
With flows, there are usually several aspects described by scenarios (the sequence of steps in a flow, how things are connected/passing the data correctly between the various steps, and the business logic of particular steps). I prefer to keep each of those in a separate spec (or even a set of specs), so you can describe things on different levels.
for example, showing the path coverage/sequence of steps, you might describe several key paths throughout the whole flow. in this case, the selection criteria for that particular path would go into the given block, the objective/exit criteria for the path would go into the When block, and the steps would go into the then block. something like this:
Given Mike is an existing user with a valid account
and Mike has recorded 1 track for the "Never Gonna Let You Go" song
and the "Never Gonna Let You Go" song is currently playing
When Mike wants to add a track to the "Never Gonna Let You Go" # <-
Then Mike would have to <step 1>
and Mike would have to <step 2>
and Mike would have to <step 3>
10-15 such scenarios gives you critical path coverage for the overall flow, then you can focus more detailed scenarios on individual cases, eg what happens if the song is interrupted half-way through etc.
gojko