Full class spec coverage

Also refactors the config specs now we're using a custom type/provider