Tidy up tests, refactor factory methods and make Authenticated and UnAuthenticated interfaces and implementations explicit