Refactoring Acceptance Tests

I found relating the acceptance tests to the spec we have here to be incredibly difficult.  Also the organisation needed some work.

This PR adds missing coverage, abstracts helpers, re-organises the test structure and makes it a lot easier to both add more tests in the future and relate existing tests to the existing functional spec.