Finish user signup
add more tests, refactor code