added sign up functionality with tests