Complete controller.Abstracts plus tests for it

Currently fails the update test. Fix for this is in a separate pull request.