Measure and improve test coverage

Tests serve to document assumptions, validate functionality, and provide a guide for refactoring. With a low amount of code coverage, people may be confused about what a method does or how it works, and be afraid to change or improve it for fear of breaking existing functionality.

This PR improves test coverage to nearly 100% for models and nearly 90% for helpers. It also ensures that each time the test suite is run, the overall code coverage percentage is calculated and reported. Very minor refactorings intended to ease or streamline tests were also made.

Controller tests were outside of the scope of this effort and should be addressed in a future refactoring initiative.