add presenter tests and some dependency inversion